先说一下背景,我做了一个突破型的策略,每天生成上下轨BuyLine和SellLine,当天向上突破BuyLine时则做多,第二天前30分钟未向上突破时则先平昨日仓。
突破的时候需要买入虚一档的看涨期权,由于每天需交易的期权都不同,所以我把可能的期权图层都加进策略中,交易时需执行遍历图层代码。但在实盘操作时,发现开平仓的代码偶尔会不正常发单,比如今天HO2406-C-2500应该发单,却没发单。但同一套策略的Mo2406-C-5300却能正常发单,这种情况已经出现了很多次,感觉是平台机制的问题,请研发人员分析。
交易情况如下:仅有MO期权的交易,而无HO期权的交易。
我以HO的期权策略进行说明,0号图层是ih2406的日线,1号图层是ih2406的30分钟线,2及以后的图层都是当月的看涨期权图层,如下图所示:
交易的核心代码如下:
OnBarOpen(ArrayRef<Integer> indexs)
{
Range[2:datacount-1]
{
If(data1.time == 0.1 and Data1.High[1] < BuyLine)
{
if(MarketPosition==1)
{
data1.Commentary(Symbol + 仓位不为空,即将平仓);
Sell(lots,Open);
FileAppend(c:DT_Option_Debug,data1.time= + Text(data1.Time) + CurrentDate= + DateToString(CurrentDate) + CurrentTime= + TimeToString(CurrentTime)
+ Data1.High[1]= + Text(Data1.High) + Buyline= + Text(BuyLine) + SellLine= + Text(SellLine) + 此时价格为
+ Text(data1.Open) + ,未向上突破buyline,平仓所有合计 + text(lots) + 张看涨期权。驱动的图层为 + TextArray(indexs));
data1.PlotString(Cover,10点平仓,low,red);
}
}
}
}
我用fileappend函数记录了交易的代码,用文件查看器查看后,可以看到是有触发交易的:
那么问题来了,为什么账户交易记录里没有发出任何一个期权合约的交易委托呢?如果说代码有问题,为什么HO代码不触发交易,但MO合约触发了交易呢?问题出在OnBarOpen处理不了range遍历循环,还是range[2:datacount-1]的用法有问题?
这个Bug已经困扰我许久,请TB的各位老师指导。
老师,这套机制如果我只用期货进行交易,不用期权,如IH2406的日线和IH2406的30分钟K线两个图层,却从来没有发生过错误,只有用IH2406进行交易信号判断,用期权图层进行交易时,才会发生错误。
多图层叠加的情况是有可能发生闪烁行为的。这个问题一般是由于图层最新数据的到来有先后顺序,如果策略模型对数据接受的随机顺序没有合适的处理方式,导致先发信号被覆盖,或者后发信号被当作历史信号而不返单,不排除这些可能性。
这个问题目前没有好的解决方案,只能靠模型自己的处理机制来解决。
另外,这种类似的问题,我要分析就必须拿到对应的代码及复现环境,做测试实验并且根据详细的日志来定位问题。目前来看,你提供的这些信息无法定位到问题到底在哪里。
当然如果执意认为这是tb机制有bug有漏洞,也可以把相关描述提交给客服让客服转达给研发人员。
但是转发给研发人员,同样是要提供能稳定复现问题的代码及环境,否则研发人员也是束手无策的。
“这个问题一般是由于图层最新数据的到来有先后顺序,如果策略模型对数据接受的随机顺序没有合适的处理方式,导致先发信号被覆盖,或者后发信号被当作历史信号而不返单,不排除这些可能性。”老师有关于这个多图层信号机制的文字说明或视频介绍吗?我对多图层的信号机制确实了解得不够。