求教TB培训视频的源码
老师们,求提供TB视频里的代码,谢谢 https://video.tbquant.net/video?id=video289
老师们,求提供TB视频里的代码,谢谢 https://video.tbquant.net/video?id=video289
// 简称: 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上面,存在信号消失的问题,无法解决,仅作为测试之用,不可用于交易。代码已经找不到了,无法提供了。