求教TB培训视频的源码

老师们,求提供TB视频里的代码,谢谢

https://video.tbquant.net/video?id=video289

培训视频24H“循环播放”
TB老用户向TB老师求教
再谈视频教学的弊端
求教!!关于TB的执行机制问题。
求教电脑时间同步的问题
求教
短视频测试
求教,自己编写的公式如何删除?
求个最简单的MACD源码
请问有没有线下培训

// 简称: 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上面,存在信号消失的问题,无法解决,仅作为测试之用,不可用于交易。代码已经找不到了,无法提供了。