全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
已解决
移仓换月
2023-05-21 09:07

在换月日当天通常默认第一根K线换月,考虑到实际情况是第一根K线滑点较大,想移到如第5根K线移仓换月。移仓开仓价直接用=c映射即可,但我想问的是,第5根K线时,888映射的是新的主力合约,如何获得旧的合约正确移仓平仓价?

cai446449

首先用基础数据读取老的主力合约代码,可以通过两种方式1.用多图层的方式,下面加载老的主力合约数据来获取老主力的价格进行平仓,2.转移映射合约的函数setordermap2appointedsymbol(映射指定合约),setordermap2mainsymbol(映射主力合约),,,我觉得您的需求涉及的知识点有点多基础数据的读取,k线定位,多图层的使用,相应的知识点可以在帮助文档以及官网视频搜搜关键字学习一下,我觉得换月可以用监控器同步也可以的

2023-05-22 14:27
justin321
@cai446449

谢谢您的详细答复。追问:我用的是多品种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数据可以映射前一个主力合约的价格?

2023-05-22 22:56
cai446449
@justin321

只要您能从基础数据读取到历史合约(老主力合约代码)就可以用指定映射合约的函数处理setordermap2appointedsymbol(映射指定合约),意思就是平仓映射老的主力,如果还需要换仓就开在新主力

2023-05-23 09:41
cai446449
@justin321

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);

 }  

}类似这种简单的发单代码,每次交易都可以选择映射的合约

2023-05-23 09:43
justin321

谢谢您的详细答复

2023-05-23 20:28
您未登录,请先 登录注册 后发表评论
顶部