我的策略是每天早上8点50分自动启动,目标合约是pg液化石油气。
8:50还没到竞价阶段,但是启动后on_tick收到的第一个tick的时间居然是当天晚上10点59分的,
比如1月1日早上8:50启动,结果收到的第一条tick的datetime居然是1月1日晚上10:59的,
结果导致BarGenerator无法生成分钟bar了(因为BarGenerator只会接收比上一条tick时间更晚的tick)。
初步估计是vnpy_ctp对大商所的ActionDay的处理问题,所以应该不只是pg合约,大商所的合约都可能有这个问题。(这下不得不吐槽国内的交易所对 TradingDay/ActionDay 的处理问题了,几个交易所几个不同标准,FXXK.)
我看到论坛上有过滤无效tick的解决办法:https://www.vnpy.com/forum/topic/30601-che-di-jie-jue-tickshu-ju-de-guo-lu-wen-ti
但是修改的地方太多了,不利于vnpy后续更新(除非官方把修改合并进去)
主要是这个异常tick如果不考虑本地系统时间,单纯从tick的datetime还无法判断是否无效,因为它也确实是正常的交易时间内。
目前一个不太优雅的解决办法是,直接取系统时间,如果是9点前收取的tick一律无视。
但这种过滤方法又会影响回测和载入历史tick,所以针对这个问题又得额外增加判断逻辑。