咨询一个因为数据原因导致的信号闪烁问题,问题比较奇怪,直接上图。
A、先说现象。如下:
一、以下的图一和图二是加载了公式的策略单元里再打开的K线图,是一个跨周期策略的小周期,品种是大豆后复权(a9888)。其中:
1、图一光标对应的那根BAR的time是20240924-112557。
2、图二光标对应的那根BAR的time是20240924-112603。
图一:
图二:
二、以下的图三和图四是另外一个工作区单独打开的大豆后复权(a9888)的1秒K线图。其中:
1、图三光标对应的那根BAR的time同样是20240924-112557。
2、图四光标对应的那根BAR的time同样是20240924-112603。
图三:
图四:
B、问题所在
因为是1秒级别的数据,时间112557对应的BAR下一根就是112603对应的BAR,说明有5秒钟的时间段交易所可能没有数据,这个OK。但上述图一和图二,即时间112557对应的BAR和112603对应的BAR中间,有一个没有数据的BAR呈列在K线图上。而图三和图四,时间112557对应的BAR和112603对应的BAR中间,并不存在一个没有数据的BAR呈列出来。我想问一下:1、为什么两种K线展示模式会有这个区别?2、这个区别会导致我的策略在这两根BAR中间的某个时间发生信号闪烁(消息中心没有提示信号闪烁,图表没有信号但实盘却报单了,比如我实盘的时候会在112558这个时间点报开空单,而策略逻辑根本不可能开空单)。检查了好多笔类似的交易,均是上述情况导致。请问一下大概会是什么原因?应该如何解决?
谢谢
您好,1分钟对应了60个1秒,实时K线运行时,因为是即时计算,两者之间的对应关系是没有问题的。但一旦K线成为历史K线,下次重新运行公式时,历史K线因为只有历史K线,没有实时走势,所以,这60个1秒都会对应到相应的1分钟,而且读取到的是这个1分钟线的收盘时的数据,这就存在未来数据,因为1分钟的第一秒,能读到这个1分钟收盘后的价格。而未来数据就是闪烁的根源。所以,正确的写法是这60个一秒应该对应到前一个1分钟,这样就不会使用未来数据了。
你好,感谢回复。虽然没有完全看明白你说的,但大体理解你所表达的是,你是说小周期的60个1秒BAR要对应上一根1分钟BAR吗?如果是这个意思,我的策略逻辑不允许这么做,因为这就失去了策略的本意了,因为我是1分钟计算信号,1秒钟只是报单,并不存在1秒钟周期调用1分钟周期去计算指标的情况。而是当下的1分钟数据就是对应当下的60个1秒钟
另外,我的策略除了上述这种空值的情况导致这种信号闪烁之外,其它的交易均没有信号闪烁,报单完全是正确的。因此我的理解应该是重点放在如何在1秒数据产生空值的时候,防止策略在这个时候去运行。因为一旦运行的话,就会有奇怪的报单,而这个报单根本不在策略的逻辑范围内,更像是一种底层机制产生的问题,很难排查。
所以,我想进一步咨询的是,如果跨周期策略因为要时间对齐的原因,小周期会强制性地在没有数据的情况下硬加一个空值的BAR,那么怎么样可以在策略碰到这种情况下跳过这个BAR不运行?我觉得这样或许能解决这个问题。
比如,可以用成交量是否大于0来判断吗?或者有没有其它思路,毕竟你们对软件机制更加熟悉。
谢谢
您好,我实际操作,复刻了一下您的应用场景,实际上那个不是空bar,而是1秒周期叠加1分钟周期产生的K线并集。通过Vol>0测试来看达不到想要的效果,只有通过indexs数组元素判断可以。但您说您1秒图只是报单,不会影响1分钟的信号,之前除了这种空值,其它都没信号闪烁,这个我还是没想明白是什么原理。
谢谢回复。
实际上那个不是空bar,而是1秒周期叠加1分钟周期产生的K线并集。------请问这个是什么意思,没看明白。
通过Vol>0测试来看达不到想要的效果,只有通过indexs数组元素判断可以。----用indexes数组元素判断是怎么个判断?
但您说您1秒图只是报单,不会影响1分钟的信号,之前除了这种空值,其它都没信号闪烁,这个我还是没想明白是什么原理。------我的意思是代码应该不存在常规意义下的信号闪烁问题,如果有,其它交易也会出现。
我的大周期是1分钟,小周期是1秒。
2.常规来讲,tbquant要保证较大周期回溯1或以上周期,不然会闪烁-----请问,这一句是什么意思,没完全看明白。谢谢
数据中间没有成交的K线是没有的,会变成省略
跨周期时,因为时间要对齐就会留出一个空
对应原则根据标准跨周期对齐
如果跨周期因为要对齐时间的原因要留出一个空,那么这种处理对于策略运行会产生什么影响?因为我这边的确就是在这个空的位置出问题了,策略会进行没有理由的开平仓(图表没有信号,而且报告里的交易记录也根本没有这个交易),也不是策略代码导致的通常意义下的信号闪烁问题。所以我还是不知道机制是因为怎么处理这种情况导致这个问题的。
举个例子,我的策略会在11:25:58这个时间产生一笔卖出开仓的交易,这个11:25:58产生的交易是怎么样产生的?r按照您上述的解释,11:25:58根本就没有K线数据,既然没有K线数据又怎么会产生交易呢?是因为11:25:58这个时间点发生的交易读取的价格数据其实并不是这个时间产生的吗?(比如会不会其实是11:25:57的数据?)
1.你只描述了结果,没有具体代码或者可供分析的内容,空白的K线并不会影响交易
2.常规来讲,tbquant要保证较大周期回溯1或以上周期,不然会闪烁
3.tbquant3可以使用SetBasePeriod,来使大周期精度更细
我的大周期是1分钟,小周期是1秒。
2.常规来讲,tbquant要保证较大周期回溯1或以上周期,不然会闪烁-----请问,这一句是什么意思,没完全看明白。谢谢