在阅读ctp部分代码的时候,看到有个地方很不理解:BaseGateway下on_tick会推送两个事件。第一个是“tick事件类型+tick”可以理解,第二部为什么要发送一个类型为“EVENT_TICK + tick.vt_symbol”的事件?这个事件是哪个模块需要调用呢?
def on_tick(self, tick: TickData) -> None:
"""
Tick event push.
Tick event of a specific vt_symbol is also pushed.
"""
self.on_event(EVENT_TICK, tick)
self.on_event(EVENT_TICK + tick.vt_symbol, tick)
原因是9点55分左右,交易所会发送昨天夜盘的最后一条数据。而根据ctpGateway的逻辑,这条数据会被打上“今天”的时间戳。例如 9.24 23:00:00.
BarGenerater在tick进入时,会判断这条tick是否早于上一条tick。如果是则判断为脏数据return掉。 所以有些合约生成不了k线。
不过为什么ctpGateway要选用本地日期呢?本地时间一定是和交易所时间有差别的。
同样遇到了这个问题,load_data函数无法读取csv文件,但是在外面读取没有问题。很费解。