全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
动态突破策略,有些代码过不去了,求老师帮忙编译下,万分感谢
2021-12-28 15:03


Params
    Numeric ceilingAmt(60);// 声明参数ceilingAmt,自适应参数最大值,默认值60
    Numeric floorAmt(30); //声明参数floorAmt,自适应参数最小值,默认值30
    Numeric bolBandTrig(2.00);//声明参数bolBandTrig,布林轨道默认系数,默认值2.00

Vars
    Numeric lookBackDays(20);  //  声明变量lookBackDays,自适应参数,默认值为20; 
    Numeric todayVolatility(0); // 声明变量todayVolatility,最新标准差;
    Numeric yesterDayVolatility(0);//声明变量 yesterDayVolatility,向前推一根BAR的标准差
    Numeric deltaVolatility(0);//声明变量deltaVolatility 波动率;
    NumericSeries buyPoint(0);//声明变量 buyPoint,区间高点;
    NumericSeries sellPoint(0);//声明变量 sellPoint,区间低点;
    NumericSeries longLiqPoint(0); //声明变量 longLiqPoint,多头均线出场线
    NumericSeries shortLiqPoint(0); //声明变量 shortLiqPoint,空头均线出场线
    NumericSeries upBand(0); //声明变量upBand 布林上轨;
    NumericSeries dnBand(0); //声明变量dnBand 布林下轨;
    NumericSeries MidLine(0);//声明变量MidLine 布林中轨 
    NumericSeries Band(0); //声明变量Band,标准差幅度
    BoolSeries BK(False);//声明变量 多头开仓条件
    BoolSeries SK(False); //声明变量 空头开仓条件
    BoolSeries SP(False);//声明变量 多头平仓条件
    BoolSeries BP(False);//声明变量 空头平仓条件
Begin
    todayVolatility = StandardDev(Close,30,1); //最新价在30根BAR线内的标准差;
    yesterDayVolatility = StandardDev(Close[1],30,1);//向前推一根BAR的收盘在30根BAR线内的标准差;
    deltaVolatility = (todayVolatility - yesterDayVolatility)/todayVolatility;//将最新价的标准差与向前一根BAR的收盘价的标准差减,做百分比,即为波动率;
    lookBackDays = lookBackDays * (1 + deltaVolatility);//将波动率deltaVolatility带入到自适应参数的计算中去,得到根据波动率变化的自适应参数;
    lookBackDays = Round(lookBackDays,0); //将自适应参数取正数;
    lookBackDays = Min(lookBackDays,ceilingAmt);//对自适应参数的取值设置最大值,最大不能大于ceilingAmt;
    lookBackDays = Max(lookBackDays,floorAmt);//对自适应参数的取值设置最小值,最小不能小于floorAmt;
    MidLine = Average(Close[1],lookBackDays); //布林中轨线使用自适应参数计算;
    Band = StandardDev(Close,lookBackDays,bolBandTrig);//标准差计算周期使用自适应参数计算;
    upBand = MidLine + bolBandTrig * Band;//计算布林轨道的上轨
    dnBand = MidLine - bolBandTrig * Band;//计算布林轨道的下轨
    buyPoint = Highest(High[1],lookBackDays);//计算自适应参数周期内的高点
    sellPoint = Lowest(Low[1],lookBackDays);//计算自适应参数周期内的低点
    longLiqPoint = Average(Close[1],lookBackDays);//计算自适应参数的多头均线
    shortLiqPoint = Average(Close[1],lookBackDays);//计算自适应参数的空头均线
    BK=CrossOver(high,buyPoint); //开多条件,最新价与区间上沿金叉;
    SK=CrossUnder(Low,sellPoint);//开空条件,最新价与区间下沿死叉;
    SP=CrossUnder(Low,longLiqPoint);//平多条件,最新价与多头均线死叉;
    BP=CrossOver(high,shortLiqPoint);//平空条件,最新价与空头均线金叉;
PlotNumeric(" MidLine", MidLine);
PlotNumeric("upBand",upBand);
PlotNumeric("dnBand",dnBand);
PlotNumeric("buyPoint",buyPoint);
PlotNumeric("sellPoint",sellPoint);
Commentary("lookBackDays"+Text(lookBackDays));
if(H > upBand[1])  //当最新价大于布林轨道上轨同时大于区间上沿开多
{

   If(BK)   
  {
     
     Buy(1,max( buyPoint, Open));

  }
Commentary("多头触发价:"+Text(buyPoint));

}

if(L < dnBand[1]) //当最新价小于布林轨道下轨同时小于区间下沿开空
{

   If(SK)
   {
      SellShort(1,min( sellPoint , Open ));
   }
Commentary("空头触发价:"+Text(sellPoint));

}
if(MarketPosition == 1) //当有多头持仓,同时最新价与多头均线死叉,平多;
{  
   If(SP)
   {
      Sell(1,min( longLiqPoint , Open ));
   }
Commentary("多头退出:"+Text(longLiqPoint));
}


if(MarketPosition == -1) //当有空头持仓,同时最新价与空头均线金叉,平空;

{
   If(BP)   
  {
     BuyToCover(1,max( shortLiqPoint, Open ));
  }
Commentary("空头退出:"+Text(shortLiqPoint));

}


end

tblaocai

您好!您的问题已收到。代码问题调试需要时间,我们会尽快抽时间调试后回复您,请您耐心等候。如果超过一周以上未得到回复且您的问题仍未解决,麻烦您通过社区将问题再次提交。感谢您的理解和支持!

2021-12-28 15:13
tblaocai

您这个代码在什么版本上编译的?如果是在TBQ上编译,编译时点一下工具栏的“代码升级”就可通过编译。

2021-12-28 16:53
rdqh10017160

求策略的时候求爷爷告奶奶,放下筷子就骂娘,真是可以

 

2022-02-17 12:04
dengkk2020

//代码已修改好,如下。我多品种验证过了,这个策略回撤过大,不能实盘。

Params

//此处添加参数

Numeric millsecs(1000);

Numeric ceilingAmt(60);// 声明参数ceilingAmt,自适应参数最大值,默认值60

   Numeric floorAmt(30); //声明参数floorAmt,自适应参数最小值,默认值30

   Numeric bolBandTrig(2.00);//声明参数bolBandTrig,布林轨道默认系数,默认值2.00

Vars

//此处添加变量

Numeric avg;

Global Integer timerId;

Numeric lookBackDays(20);  //  声明变量lookBackDays,自适应参数,默认值为20;

   Numeric todayVolatility(0); // 声明变量todayVolatility,最新标准差;

   Numeric yesterDayVolatility(0);//声明变量 yesterDayVolatility,向前推一根BAR的标准差

   Numeric deltaVolatility(0);//声明变量deltaVolatility 波动率;

   Series<Numeric> buyPoint(0);//声明变量 buyPoint,区间高点;

   Series<Numeric> sellPoint(0);//声明变量 sellPoint,区间低点;

   Series<Numeric> longLiqPoint(0); //声明变量 longLiqPoint,多头均线出场线

   Series<Numeric> shortLiqPoint(0); //声明变量 shortLiqPoint,空头均线出场线

   Series<Numeric> upBand(0); //声明变量upBand 布林上轨;

   Series<Numeric> dnBand(0); //声明变量dnBand 布林下轨;

   Series<Numeric> MidLine(0);//声明变量MidLine 布林中轨

   Series<Numeric> Band(0); //声明变量Band,标准差幅度

   Series<Bool> BK(False);//声明变量 多头开仓条件

   Series<Bool> SK(False); //声明变量 空头开仓条件

   Series<Bool> SP(False);//声明变量 多头平仓条件

   Series<Bool> BP(False);//声明变量 空头平仓条件


Events

//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组

OnBar(ArrayRef<Integer> indexs)

{

todayVolatility = StandardDev(Close,30,1); //最新价在30根BAR线内的标准差;

yesterDayVolatility = StandardDev(Close[1],30,1);//向前推一根BAR的收盘在30根BAR线内的标准差;

deltaVolatility = (todayVolatility - yesterDayVolatility)/todayVolatility;//将最新价的标准差与向前一根BAR的收盘价的标准差减,做百分比,即为波动率;

lookBackDays = lookBackDays * (1 + deltaVolatility);//将波动率deltaVolatility带入到自适应参数的计算中去,得到根据波动率变化的自适应参数;

lookBackDays = Round(lookBackDays,0); //将自适应参数取正数;

lookBackDays = Min(lookBackDays,ceilingAmt);//对自适应参数的取值设置最大值,最大不能大于ceilingAmt;

lookBackDays = Max(lookBackDays,floorAmt);//对自适应参数的取值设置最小值,最小不能小于floorAmt;

MidLine = Average(Close[1],lookBackDays); //布林中轨线使用自适应参数计算;

Band = StandardDev(Close,lookBackDays,bolBandTrig);//标准差计算周期使用自适应参数计算;

upBand = MidLine + bolBandTrig * Band;//计算布林轨道的上轨

dnBand = MidLine - bolBandTrig * Band;//计算布林轨道的下轨

buyPoint = Highest(High[1],lookBackDays);//计算自适应参数周期内的高点

sellPoint = Lowest(Low[1],lookBackDays);//计算自适应参数周期内的低点

longLiqPoint = Average(Close[1],lookBackDays);//计算自适应参数的多头均线

shortLiqPoint = Average(Close[1],lookBackDays);//计算自适应参数的空头均线

BK=CrossOver(high,buyPoint); //开多条件,最新价与区间上沿金叉;

SK=CrossUnder(Low,sellPoint);//开空条件,最新价与区间下沿死叉;

SP=CrossUnder(Low,longLiqPoint);//平多条件,最新价与多头均线死叉;

BP=CrossOver(high,shortLiqPoint);//平空条件,最新价与空头均线金叉;

PlotNumeric(\" MidLine\", MidLine);

PlotNumeric(\"upBand\",upBand);

PlotNumeric(\"dnBand\",dnBand);

PlotNumeric(\"buyPoint\",buyPoint);

PlotNumeric(\"sellPoint\",sellPoint);

Commentary(\"lookBackDays\"+Text(lookBackDays));

if(H > upBand[1])  //当最新价大于布林轨道上轨同时大于区间上沿开多

{

  If(BK)  

 {

Buy(1,max( buyPoint, Open));

 }

Commentary(\"多头触发价:\"+Text(buyPoint));

}

if(L < dnBand[1]) //当最新价小于布林轨道下轨同时小于区间下沿开空

{

  If(SK)

  {

 SellShort(1,min( sellPoint , Open ));

  }

Commentary(\"空头触发价:\"+Text(sellPoint));

}

if(MarketPosition == 1) //当有多头持仓,同时最新价与多头均线死叉,平多;

{  

  If(SP)

  {

 Sell(1,min( longLiqPoint , Open ));

  }

Commentary(\"多头退出:\"+Text(longLiqPoint));

}

if(MarketPosition == -1) //当有空头持仓,同时最新价与空头均线金叉,平空;

{

  If(BP)  

 {

BuyToCover(1,max( shortLiqPoint, Open ));

 }

Commentary(\"空头退出:\"+Text(shortLiqPoint));

}

}

2023-10-06 22:48
您未登录,请先 登录注册 后发表评论
顶部