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
//代码已修改好,如下。我多品种验证过了,这个策略回撤过大,不能实盘。
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));
}
}
求策略的时候求爷爷告奶奶,放下筷子就骂娘,真是可以
您这个代码在什么版本上编译的?如果是在TBQ上编译,编译时点一下工具栏的“代码升级”就可通过编译。
您好!您的问题已收到。代码问题调试需要时间,我们会尽快抽时间调试后回复您,请您耐心等候。如果超过一周以上未得到回复且您的问题仍未解决,麻烦您通过社区将问题再次提交。感谢您的理解和支持!