全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
经常出现图表信号只有在重启策略单元后才显示的问题
2023-12-27 16:37

请教老师们一个问题,我有一个多品种策略在实盘运行时,出现图表信号不刷新的问题,想问一下大概是什么原因?以下是详细情况:

1、问题描述:策略在回溯测试时,图表信号是正常的,开了监控器,监控器也没有报不匹配,此时我以为策略一直正常运行。但当我停止策略单元再重启后,监控器就查出帐户持仓和信号持仓不匹配。我去查找原因,发现会出现一种情况:在停止策略单元并重启前,该出图表信号的地方没有出图表信号,而在策略单元停止再重启后,那个图表信号又出现了。这也是为什么策略单元重启前监控器没有报不匹配,而重启后又报不匹配的原因。上述情况不是每一次交易信号都会出现,有时候会有时候不会。另外:此种情况出现时,消息中心并没有报信号闪烁。

2、策略的特点:是一个多品种的策略,不同图层数据源之间会互相交互计算(简单来说就是会取不同图层的数据源进行综合计算得出一个指标值,作为交易信号计算的依据)。我是把信号计算写在ONBARCLOSE里,报单写在ONBAROPEN里,没有用到ONBAR。另外,ONBARCLOSE里进行数据计算时,我会用到CLOSE。我知道ONBAR里不能用CLOSE,会导致信号闪烁。但在ONBARCLOSE里用CLOSE我的理解是不会导致信号闪烁问题,因此就用了(不知道是否问题出现在这里?)

3、我自己推测的第一种可能(有点瞎猜):这种情况会不会是因为ONBARCLOSE的处理机制问题。之前看TB的官方视频,说ONBARCLOSE的驱动并不是严格按照最后0.5秒那个TICK驱动,而是当新BAR出现时才驱动ONBARCLOSE,但一定会在ONBAROPEN之前驱动。而且ONBARCLOSE的驱动可能也并不会等数据对齐后才驱动,因为这样会有问题。

按照这个理解的话,我的策略出现这种问题是不是可以这样解释:当加载多品种的策略时,驱动ONBARCLOSE的那一刻,有些品种的数据还没有到,所以导致有一些品种的图表信号没法被正确计算出来,因此就没有图表信号。而因为ONBARCLOSE只会驱动一次,即使时间过了那一刻,也不会去重新计算那个位置的图表信号,因此策略单元不重启的话那个图表信号就缺失了。而当停止策略单元重启后,又会重新计算一遍那个位置的图表信号,此时因为数据补齐了又算出来有图表信号了。

4、我自己推测的第二种可能:是不是因为ONBARCLOSE里一样不能用CLOSE的原因?因为我的理解是ONBARCLOSE里的CLOSE只会有一个价格而且只会触发一次,所以不存在信号闪烁的可能。这个理解是不是有误?

5、那假如上述问题大概是对的(这要老师评估才知道),是不是我把代码里的信号计算和报单全部放在ONBAR里,同时把所有CLOSE(包括用到CLOSE的函数】改成CLOSE[1],是不是就可以解决这个问题了?

不知道我有没有表达清楚我的问题,期待老师的答案,万分感谢!



wangkaiming

虽然你写了很多,但是都无法帮助判断你出了什么问题

显然是代码的问题,导致某种闪烁

2023-12-28 09:08
kyover

推测的第一种可能有漏洞,onbarclose不是只驱动一次,如果图层的新bar数据不是同时来的,那么后面的新bar数据推送过来的时候,也会驱动一次onbarclose。实际上,onbarclose驱动最多次数和图层数量是一致的,但不一定是图层的数量。

onbarclose如果你没有用settrigger的话,是不会导致闪烁的。

2023-12-28 09:20
hyqh901097026
@kyover

照老师这么说,ONBARCLOSE驱动的次数和图层数量是一致的,那就不存在算不到某个图层品种信号的可能性了,我之前还怀疑有这个可能。那现在这个可能性也排除了,就更加不知道问题出在哪了。之前有没有其它用户碰到过类似的问题呢?(就是重启前图表信号不标记,重启后图表信号又标记了)。如果有,大概的可能原因在哪呢?我好找个排查方向

2023-12-28 09:33
181****0510
@hyqh901097026

呃。。。这个。。。你是怎么得出这个结论的:“照老师这么说,ONBARCLOSE驱动的次数和图层数量是一致的”?建议你重新阅读以下老师的回答的第一段落的最后那部分。。。。

2023-12-28 12:48
hyqh901097026
@181****0510

实际上,onbarclose驱动最多次数和图层数量是一致的,但不一定是图层的数量。

----是的,我的确是没有看清楚这句话。重新理解这句话,是说最极端的情况下最多是和图层数量一致,就是在某种情况下每个图层的数据都不是同时来的。比如图层数30,最多是30,但也可能有28个是第一次同时来的,有2个又是第二次同时来的,那么这种情况下onbarclose就是驱动2次?(28,2)。不知这个理解对不对?

---那是不是可以进一步推论,在多品种情况下,ONBARCLOSE有可能不只驱动一次,那么对于某个图层来说,就有可能前一次ONBARCLOSE驱动时计算的指标值和后一次驱动ONBARCLOSE时计算的指标值不一样,从而有可能导致信号消失?

因为我策略的问题就是信号消失问题,报单了,但回头去看图表信号,发现没有信号。但消息中心并没有报信号闪烁。

2023-12-28 14:08
wangkaiming

我的建议是看代码

2023-12-29 08:55
您未登录,请先 登录注册 后发表评论
顶部