在换月日当天通常默认第一根K线换月,考虑到实际情况是第一根K线滑点较大,想移到如第5根K线移仓换月。移仓开仓价直接用=c映射即可,但我想问的是,第5根K线时,888映射的是新的主力合约,如何获得旧的合约正确移仓平仓价?
谢谢您的详细答复
首先用基础数据读取老的主力合约代码,可以通过两种方式1.用多图层的方式,下面加载老的主力合约数据来获取老主力的价格进行平仓,2.转移映射合约的函数setordermap2appointedsymbol(映射指定合约),setordermap2mainsymbol(映射主力合约),,,我觉得您的需求涉及的知识点有点多基础数据的读取,k线定位,多图层的使用,相应的知识点可以在帮助文档以及官网视频搜搜关键字学习一下,我觉得换月可以用监控器同步也可以的
谢谢您的详细答复。追问:我用的是多品种888合约的图层,并且已经定位到换月当天的第5根K线。在init设定映射主力合约。tb给的换月移仓标准代码:
data[f*i+1].BuyToCover(0, Value(fRollover[0][1]), Enum_Signal_UnCorrectPrice);==A
data[f*i+1].SellShort(Lots, Value(fRollover[0][2]), Enum_Signal_UnCorrectPrice);==B
其中B我改成:data[f*i+1].SellShort(Lots, c, Enum_Signal_UnCorrectPrice);这样比B更准确,因为B是指第一根的值。而我是第5根。
但是A如果也改成data[f*i+1].BuyToCover(0, c, Enum_Signal_UnCorrectPrice); 这个C是新主力合约第5根K线的价格,是不对的;而原A是上一个主力合约的在当天第一根K线的收盘价格,我想要的是上一个主力合约-旧合约的第5根K线价格。
考虑我订阅888合约共6个品种,每个品种2个周期,会映射不同时期的主力合约。问:有否办法通过888数据可以映射前一个主力合约的价格?
只要您能从基础数据读取到历史合约(老主力合约代码)就可以用指定映射合约的函数处理setordermap2appointedsymbol(映射指定合约),意思就是平仓映射老的主力,如果还需要换仓就开在新主力
Events
OnInit()
{
SetConsecEntries(15);
}
OnBar(ArrayRef<Integer> indexs)
{
if(Date + Time == 20230523.0945)
{
SetOrderMap2AppointedSymbol([\"rb2310.SHFE\"],[1.0]);
Buy(0,Open);
}
if(Date + Time == 20230523.0946)
{
SetOrderMap2AppointedSymbol([\"rb2305.SHFE\"],[1.0]);
Buy(0,Open);
}
}类似这种简单的发单代码,每次交易都可以选择映射的合约