上周五夜盘实盘测试自己写的沪铝5分钟macd策略, 发现在近半个小时内, 只计算了3个macd的dif值, 记录如下:
2020-10-10 00:33:45,310 INFO: al2010双均线策略初始化完成
2020-10-10 00:34:05,095 INFO: CTA策略初始化完成
2020-10-10 00:34:05,095 INFO: 进入控制cta交易子线程
2020-10-10 00:43:07,518 INFO: DIF值为:4.640292383406631
2020-10-10 00:45:09,013 INFO: DIF值为:4.223777945979236
2020-10-10 01:00:07,066 INFO: DIF值为:4.647035546902771
按照预期的逻辑, 应该是每隔5分钟都会计算一次macd的dif值, 但是实际只计算了三次,而且第一次计算的时候是在2020-10-10 00:43, 正常应该是在00:40或者00:45才会计算, 上通达信上看了一下当时al2010的K线情况, 发现当时成交量很少, 连续几个5分钟的成交量都为零, 通达信5分钟al2010的K线图如下:
所以怀疑是不是vnpy的Bargenerator无法对较长一段时间内零成交量的情况进行K线合成, 因为K线合成是接收到TickData后才会触发的, 如果一段时间内交易量为零, 是不是交易所就不会推送tickdata, 从而也不会触发5分钟K线合成? 但是据我所知交易所推送的都是切片行情啊, 应该会每隔一小段时间推送交易的切片, 即使交易量为零. 如果因为交易量为零交易所就不推送tick数据, 那vnpy的K线合成逻辑应该要再完善一下: 在没有tick推送的跨策略的周期时间内 , 增加超时K线合成的逻辑