老师们,求提供TB视频里的代码,谢谢
// 简称: TS_TheTripleScreenApproach_L
// 名称: 三重滤网_多
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
/*
策略说明:
1、基于三重滤网的交易系统
2、Data0 周线、Data1 日线、Data2 15分钟
系统要素:
1、基于周K线的MACD指标
2、基于日K线的KD指标
3、昨日最高、最低价
入场条件:
1、周K线的MACD柱状图向上
2、日K线的K指标进入超卖区
3、15分钟K线向上突破昨日高点
3个条件均满足则开多单
出场条件:
1、买入开仓时,昨日低点与当日开仓前的最低点二者中较小者作为止损价;卖出开仓时,昨日高点与当日开仓前的最高点二者中较大者作为止损价
2、持有多单时,日K线的K指标进入超买区,并且15分钟K线向下突破昨日低点,平多单
3、持有空单时,日K线的K指标进入超卖区,并且15分钟K线向上突破昨日高点,平空单
注 意:
此公式仅做多,平多
*/
Params
Numeric MACD_FastLength(12); // MACD指标参数
Numeric MACD_SlowLength(26); // MACD指标参数
Numeric MACD_Length(9); // MACD指标参数
Numeric KD_Length(14); // KD指标参数
Numeric KD_SlowLength(3); // KD指标参数
Numeric KD_SmoothLength(3); // KD指标参数
Numeric KD_OverBought(90,60,90,10); // 超买
Numeric KD_OverSold(10,10,40,10); // 超卖
Numeric Capital(10000000); //每次开仓市值1000万
Vars
Global Bool IsRollover(True); //是否后复权
Global Bool IsRolloverRealPrice(False); //是否映射真实价格
Global Bool IsAutoSwapPosition(False); //是否自动换仓
Global Bool IgnoreSwapSiganlCalc(False); //是否忽略换仓信号计算
Series<Numeric> MACDValue;
Numeric AvgMACD;
Series<Numeric> MACDDiff;
Series<Numeric> HighestValue;
Series<Numeric> LowestValue;
Series<Numeric> KValue;
Numeric SumHLValue;
Numeric SumCLValue;
Series<Numeric> DValue;
Global Numeric Units; // 开仓数量
Series<Numeric> myStopPrice(0); // 止损价格
Events
//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作
OnInit()
{
SetInitCapital(5000000000);
Range[0:DataCount-1]
{
If(IsRollover)
{
AddDataFlag(Enum_Data_RolloverBackWard());//设置后复权
}
If(IsRolloverRealPrice)
{
AddDataFlag(Enum_Data_RolloverRealPrice());//是否映射真实价格
}
If(IsAutoSwapPosition)
{
AddDataFlag(Enum_Data_AutoSwapPosition());//设置自动换仓
}
If(IgnoreSwapSiganlCalc)
{
AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());//设置忽略换仓信号计算
}
}
}
onBar(ArrayRef<Integer> indexs)
{
MACDValue = XAverage(Close,MACD_FastLength) - XAverage(Close,MACD_SlowLength);
AvgMACD = XAverage(MACDValue,MACD_Length);
MACDDiff = MACDValue - AvgMACD;
Data0.PlotNumeric("MACD",MACDValue);
Data0.PlotNumeric("MACDAvg",AvgMACD);
If(MACDDiff >= 0)
Data0.PlotNumeric("MACDDiff",MACDDiff,0,Red);
Else
Data0.PlotNumeric("MACDDiff",MACDDiff,0,Green);
Data0.PlotNumeric("零线",0);
Data1.HighestValue = Data1.HighestFC(High,KD_Length);
Data1.LowestValue = Data1.LowestFC(Low,KD_Length);
Data1.SumHLValue = Data1.SummationFC(Data1.HighestValue - Data1.LowestValue,KD_SlowLength);
Data1.SumCLValue = Data1.SummationFC(Data1.Close - Data1.LowestValue,KD_SlowLength);
If(Data1.SumHLValue <> 0)
{
Data1.KValue = Data1.SumCLValue/Data1.SumHLValue*100;
}Else
{
Data1.KValue = 0;
}
Data1.DValue = Data1.AverageFC(Data1.KValue,KD_SmoothLength);
Data1.PlotNumeric("K",KValue);
Data1.PlotNumeric("D",DValue);
Data1.PlotNumeric("Ref1",20);
Data1.PlotNumeric("Ref2",80);
// 开仓数量
If(IsRollover And IsRolloverRealPrice)
{
Units = IntPart(Capital/(Data2.Open/Data2.Rollover()*Data2.ContractUnit()*Data2.BigPointValue()));
}Else
{
Units = IntPart(Capital/(Data2.Open*Data2.ContractUnit()*Data2.BigPointValue()));
}
// 开仓
If(Data2.MarketPosition != 1 And Data0.MACDDiff[1] > Data0.MACDDiff[2] And Data1.KValue[1] <= KD_OverSold And Data2.High >= Data1.High[1])
{
Data2.Buy(Units,Max(Data2.Open,Data1.High[1]));
// 止损价格
Data2.myStopPrice = Min(Data2.LowD(1),Data1.Low[1]);
}
// 止损
If(Data2.MarketPosition == 1 And Data2.BarsSinceEntry >= 1 And Data2.Low <= Data2.myStopPrice) Data2.Sell(0,Min(Data2.Open,Data2.myStopPrice));
// 平仓
If(Data2.MarketPosition == 1 And Data2.BarsSinceEntry >= 1 And Data1.KValue[1] >= KD_OverBought And Data2.Low <= Data1.Low[1])
{
Data2.Sell(0,Min(Data2.Open,Data1.Low[1]));
}
}
//------------------------------------------------------------------------
// 简称: TS_TheTripleScreenApproach_S
// 名称: 三重滤网_空
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
/*
策略说明:
1、基于三重滤网的交易系统
2、Data0 周线、Data1 日线、Data2 15分钟
系统要素:
1、基于周K线的MACD指标
2、基于日K线的KD指标
3、昨日最高、最低价
入场条件:
1、周K线的MACD柱状图向下
2、日K线的K指标进入超买区
3、15分钟K线向下突破昨日低点
3个条件均满足则开空单
出场条件:
1、买入开仓时,昨日低点与当日开仓前的最低点二者中较小者作为止损价;卖出开仓时,昨日高点与当日开仓前的最高点二者中较大者作为止损价
2、持有多单时,日K线的K指标进入超买区,并且15分钟K线向下突破昨日低点,平多单
3、持有空单时,日K线的K指标进入超卖区,并且15分钟K线向上突破昨日高点,平空单
注 意:
此公式仅做空,平空
*/
Params
Numeric MACD_FastLength(12); // MACD指标参数
Numeric MACD_SlowLength(26); // MACD指标参数
Numeric MACD_Length(9); // MACD指标参数
Numeric KD_Length(14); // KD指标参数
Numeric KD_SlowLength(3); // KD指标参数
Numeric KD_SmoothLength(3); // KD指标参数
Numeric KD_OverBought(90,60,90,10); // 超买
Numeric KD_OverSold(10,10,40,10); // 超卖
Numeric Capital(10000000); //每次开仓市值1000万
Vars
Global Bool IsRollover(True); //是否后复权
Global Bool IsRolloverRealPrice(False); //是否映射真实价格
Global Bool IsAutoSwapPosition(False); //是否自动换仓
Global Bool IgnoreSwapSiganlCalc(False); //是否忽略换仓信号计算
Series<Numeric> MACDValue;
Numeric AvgMACD;
Series<Numeric> MACDDiff;
Series<Numeric> HighestValue;
Series<Numeric> LowestValue;
Series<Numeric> KValue;
Numeric SumHLValue;
Numeric SumCLValue;
Series<Numeric> DValue;
Global Numeric Units; // 开仓数量
Series<Numeric> myStopPrice(0); // 止损价格
Events
//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作
OnInit()
{
SetInitCapital(5000000000);
Range[0:DataCount-1]
{
If(IsRollover)
{
AddDataFlag(Enum_Data_RolloverBackWard());//设置后复权
}
If(IsRolloverRealPrice)
{
AddDataFlag(Enum_Data_RolloverRealPrice());//是否映射真实价格
}
If(IsAutoSwapPosition)
{
AddDataFlag(Enum_Data_AutoSwapPosition());//设置自动换仓
}
If(IgnoreSwapSiganlCalc)
{
AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());//设置忽略换仓信号计算
}
}
}
onBar(ArrayRef<Integer> indexs)
{
MACDValue = XAverage(Close,MACD_FastLength) - XAverage(Close,MACD_SlowLength);
AvgMACD = XAverage(MACDValue,MACD_Length);
MACDDiff = MACDValue - AvgMACD;
Data0.PlotNumeric("MACD",MACDValue);
Data0.PlotNumeric("MACDAvg",AvgMACD);
If(MACDDiff >= 0)
Data0.PlotNumeric("MACDDiff",MACDDiff,0,Red);
Else
Data0.PlotNumeric("MACDDiff",MACDDiff,0,Green);
Data0.PlotNumeric("零线",0);
Data1.HighestValue = Data1.HighestFC(High,KD_Length);
Data1.LowestValue = Data1.LowestFC(Low,KD_Length);
Data1.SumHLValue = Data1.SummationFC(Data1.HighestValue - Data1.LowestValue,KD_SlowLength);
Data1.SumCLValue = Data1.SummationFC(Data1.Close - Data1.LowestValue,KD_SlowLength);
If(Data1.SumHLValue <> 0)
{
Data1.KValue = Data1.SumCLValue/Data1.SumHLValue*100;
}Else
{
Data1.KValue = 0;
}
Data1.DValue = Data1.AverageFC(Data1.KValue,KD_SmoothLength);
Data1.PlotNumeric("K",KValue);
Data1.PlotNumeric("D",DValue);
Data1.PlotNumeric("Ref1",20);
Data1.PlotNumeric("Ref2",80);
// 开仓数量
If(IsRollover And IsRolloverRealPrice)
{
Units = IntPart(Capital/(Data2.Open/Data2.Rollover()*Data2.ContractUnit()*Data2.BigPointValue()));
}Else
{
Units = IntPart(Capital/(Data2.Open*Data2.ContractUnit()*Data2.BigPointValue()));
}
// 开仓
If(Data2.MarketPosition != -1 And Data0.MACDDiff[1] < Data0.MACDDiff[2] And Data1.KValue[1] >= KD_OverBought And Data2.Low <= Data1.Low[1])
{
Data2.SellShort(Units,Min(Data2.Open,Data1.Low[1]));
// 止损价格
Data2.myStopPrice = Max(Data2.HighD(1),Data1.High[1]);
}
// 止损
If(Data2.MarketPosition == -1 And Data2.BarsSinceEntry >= 1 And Data2.High >= Data2.myStopPrice) Data2.BuyToCover(0,Max(Data2.Open,Data2.myStopPrice));
// 平仓
If(Data2.MarketPosition == -1 And Data2.BarsSinceEntry >= 1 And Data1.KValue[1] <= KD_OverSold And Data2.High >= Data1.High[1])
{
Data2.BuyToCover(0,Max(Data2.Open,Data1.High[1]));
}
}
//------------------------------------------------------------------------
// 简称: TS_Alpaca
// 名称: 羊驼策略
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
// 若改变排序的指定时间,需要根据实际情况处理各个品种每日交易时长不一致的情况
Params
Numeric p(0.5); //当前参与排序品种的最强与最弱的一定比例进行交易
Numeric w(5); //周几进行排序
Numeric Capital(10000000); //每次开仓市值1000万
Vars
Global Bool IsRollover(True); //是否后复权
Global Bool IsRolloverRealPrice(False); //是否映射真实价格
Global Bool IsAutoSwapPosition(False); //是否自动换仓
Global Bool IgnoreSwapSiganlCalc(False); //是否忽略换仓信号计算
Numeric Lots; //开仓数量
Global Array<Numeric> zdf; //元素为涨跌幅
Global Array<Integer> id; //元素为涨跌幅对应的Data[i]
Global Numeric n; //有真实行情的品种个数
Global Numeric i;
Global Numeric noData;
Events
//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作
OnInit()
{
SetInitCapital(500000000);
Range[0:DataCount-1]
{
If(IsRollover)
{
AddDataFlag(Enum_Data_RolloverBackWard());//设置后复权
}
If(IsRolloverRealPrice)
{
AddDataFlag(Enum_Data_RolloverRealPrice());//是否映射真实价格
}
If(IsAutoSwapPosition)
{
AddDataFlag(Enum_Data_AutoSwapPosition());//设置自动换仓
}
If(IgnoreSwapSiganlCalc)
{
AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());//设置忽略换仓信号计算
}
}
}
onBar(ArrayRef<Integer> indexs)
{
noData = 0;
Range[i = 1:DataCount - 1]
{
If(Time != Data[i-1].Time)
{
noData = 1;
}
}
// 开仓数量
For i = 0 To DataCount - 1
{
// 开仓数量
If(IsRollover And IsRolloverRealPrice)
{
Data[i].Lots = IntPart(Capital/(Data[i].Open/Data[i].Rollover()*Data[i].ContractUnit()*Data[i].BigPointValue()));
}Else
{
Data[i].Lots = IntPart(Capital/(Data[i].Open*Data[i].ContractUnit()*Data[i].BigPointValue()));
}
}
// 数组初始化
n = 0;
For i = 0 To DataCount - 1
{
If(Data[i].CurrentBar > 1) // 处理各个品种Bar的开始时间不一致的问题
{
zdf[n] = Data[i].Open/Data[i].CloseD(1);
id[n] = i;
n = n + 1;
}
}
If(Time == 0.1455 And noData == 0 And Weekday == w)
{
// 数组排序
Na1Sort(zdf,id,0,n - 1,False);
For i = 0 To n - 1
{
// 强做多
If(i <= (IntPart(n*p) - 1) And Data[id[i]].MarketPosition != 1) Data[id[i]].Buy(Data[id[i]].Lots,Data[id[i]].Open);
// 中间排名的品种若有持仓则平掉
If(i > (IntPart(n*p) - 1) And i < (n - IntPart(n*p)))
{
If(Data[id[i]].MarketPosition == 1) Data[id[i]].Sell(0,Data[id[i]].Open);
If(Data[id[i]].MarketPosition == -1) Data[id[i]].BuyToCover(0,Data[id[i]].Open);
}
// 弱做空
If(i >= (n - IntPart(n*p)) And Data[id[i]].MarketPosition != -1) Data[id[i]].SellShort(Data[id[i]].Lots,Data[id[i]].Open);
}
}
}
之前的代码写在tbquant上面,存在信号消失的问题,无法解决,仅作为测试之用,不可用于交易。代码已经找不到了,无法提供了。