今天主要聊一聊GetHotChange,它是期货热门月换月和指定月到期日函数,可取到HOT热门月的具体月份以及距离结算日到期天数,国内外交易所商品期货&金融期货都适用。
var:vs1(""),vRemainDate(""),vSettlement(""),vTest(""),vs2("");
if LastBarOnChart and Instr(symbol,"HOT")<>0 then begin
vs1=GetHotChange(symbol,date,time_s);
vRemainDate=NumToStr(GetContractsExpire(2,vs1,date,time_s),0)+"days";
vs2=NumToStr(GetContractsExpire(3,vs1,date,time_s),0);
vSettlement=LeftStr(vs2,4)+"/"+MidStr(vs2,5,2)+"/"+rightstr(vs2,2);
plot1(vs1,"[HOT]");
plot2(vRemainDate,"[Remain]");
plot3(vSettlement,"[Settlement]");
SetPlotColor(1,RGB(196,166,0));
SetPlotColor(2,RGB(196,166,0));
SetPlotColor(3,RGB(196,166,0));
end;
信号原理:取到某个时间点前后的指定月份合约,然后当两者出现不一致时,即表明HOT行情有换月,然后通过先平仓再开仓进行换仓动作。
var:vHotSymbol(""),vNextHotSymbol(""),vCon1(false);
once cleardebug;
if InStr(symbol,"HOT")<>0 then begin
vHotSymbol=GetHotChange(symbol,date,time_s);//获取当前的主力月份
vNextHotSymbol=GetHotChange(symbol,calcdate(date,1),time_s);//获取下日的主力月份
if Time = sess2endtime then begin
// 在当个交易日收盘时执行当根K平仓&Next bar 开仓动作
vCon1= vHotSymbol<>vNextHotSymbol;
if vCon1 then begin
if marketposition > 0 then begin
sell ("ChangeMonth_Sell") this bar on Close ; // this bar 仅用于回测
buy ("ChangeMonth_Buy") next bar at market;
end;
if marketposition < 0 then begin
buytocover ("ChangeMonth_Cover")this bar on Close ; //this bar 仅用于回测
sellshort("ChangeMonth_Short") next bar at market;
end;
end ;
end;
end;
图表实现效果如下:
© 2011-2023 MultiCharts All Rights Reserved.