热门月你还在设定日历吗?快用GetHotChange

 

今天主要聊一聊GetHotChange,它是期货热门月换月和指定月到期日函数,可取到HOT热门月的具体月份以及距离结算日到期天数,国内外交易所商品期货&金融期货都适用。

 

打开MC跟着一起操作吧:

透过GetHotChange抓到HOT商品目前的实际月份(上图显示在[HOT]的这一行),再透过GetContractsExpire可以收到商品距离结算日的剩余交易日,或是剩余日历日,也可直接回传对应的结算日期。

(具体函数内的参数说明,可通过在MC->公式编辑器函数上点击F1查看)
 
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;
通过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
                    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;

图表实现效果如下:

此信号可直接作为单独信号-> 插入到原本策略的HOT图表上
需注意的是:中国金融期货交易所曾经于2016.01.01号有修改过收盘时间,从15:15 到15:00,而本身Sess2endtime取值是通过Quotemanager的收盘时段设置。故针对CFFEX 股指期货品种请注意收盘时间的相应改动。

© 2011-2023 MultiCharts All Rights Reserved.