vnpy / vnpy_ctp

VeighNa框架的CTP交易接口
https://www.vnpy.com
MIT License
118 stars 106 forks source link

关于CTP大商所行情的的日期问题 #34

Closed kkqy closed 2 years ago

kkqy commented 2 years ago
def onRtnDepthMarketData(self, data: dict) -> None:
"""行情数据推送"""

    # 过滤没有时间戳的异常行情数据
    if not data["UpdateTime"]:
        return

    # 过滤还没有收到合约数据前的行情推送
    symbol: str = data["InstrumentID"]
    contract: ContractData = symbol_contract_map.get(symbol, None)
    if not contract:
        return

    # 对大商所的交易日字段取本地日期
    if not data["ActionDay"] or contract.exchange == Exchange.DCE:
        date_str: str = self.current_date
    else:
        date_str: str = data["ActionDay"]

几大交易所的TradingDay和ActionDay定义都不一样, 看了一下,因为大商所的ActionDay比较特殊,它实际上应该是TradingDay,所以vnpy的CTP模块的源码里,如果是大商所的行情,日期就取本地日期。 但是这样做是否会有隐患? 虽然联网的电脑或者服务器都有网络时间校准,但是也有极端情况 比如行情是 1号 晚上23点59分59秒:500毫秒 的,但是到达本地的时候,因为网络延迟或者本地时间误差,本地时间已经是2号0点了,如果替换成本地日期,那就变成 2号 23点59分59秒了,有没有出现这种可能呢? 这是不是有问题呢?

vnpy commented 2 years ago

大商所合约目前没有越过夜盘12点的