今天主要聊一聊GetHotChange,它是期货热门月换月和指定月到期日函数,可取到HOT热门月的具体月份以及距离结算日到期天数,国内外交易所商品期货&金融期货都适用。
打开MC跟着一起操作吧:
透过GetHotChange抓到HOT商品目前的实际月份(上图显示在[HOT]的这一行),再透过GetContractsExpire可以收到商品距离结算日的剩余交易日,或是剩余日历日,也可直接回传对应的结算日期。
(具体函数内的参数说明,可通过在MC->公式编辑器函数上点击F1查看)var:vs1(""),vRemainDate(""),vSettlement(""),vTest(""),vs2("");
if LastBarOnChart andInstr(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;
通过GetHotChange 函数延伸而来( 仅用于回测中) 在回测中如何针对 HOT 行情换月后的跳空处理信号原理:取到某个时间点前后的指定月份合约,然后当两者出现不一致时,即表明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
ifmarketposition > 0 then begin
sell ("ChangeMonth_Sell") thisbar on Close ; // this bar 仅用于回测
buy ("ChangeMonth_Buy") nextbar at market;
end;
ifmarketposition < 0 then begin
buytocover ("ChangeMonth_Cover")this bar on Close ; //this bar 仅用于回测
sellshort("ChangeMonth_Short") next bar at market;
end;
end ;
end;
end ;
图表实现效果如下:
此信号可直接作为单独信号-> 插入到原本策略的HOT图表上 需注意的是:中国金融期货交易所曾经于2016.01.01号有修改过收盘时间,从15:15 到15:00,而本身Sess2endtime取值是通过Quotemanager的收盘时段设置。故针对CFFEX 股指期货品种请注意收盘时间的相应改动。想要了解跟多MC函数欢迎直接留言或添加MC小哥哥微信
▼▼▼