VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 60
声望: 0

在CtpGateway里面 onRtnDepthMarketData 函数里面,每个价格会用函数 adjust_price 做一个调整 ,也就是去掉一些异常大的数值。但是这个在融航的接口rohon_gateway里面并没有做,但是我模拟账户发现融航也是会出现一些异常大的数值,所以这个函数在rohon_gateway也是需要的。请有看到的版主下次可以考虑优化一下。但是这个异常值怎么会产生,有知道大虾可以解析一下吗?

def onRtnDepthMarketData(self, data: dict):
"""
Callback of tick data update.
"""
symbol = data["InstrumentID"]
exchange = symbol_exchange_map.get(symbol, "")
if not exchange:
return

    timestamp = f"{data['ActionDay']} {data['UpdateTime']}.{int(data['UpdateMillisec']/100)}"
    dt = datetime.strptime(timestamp, "%Y%m%d %H:%M:%S.%f")
    dt = CHINA_TZ.localize(dt)

    tick = TickData(
        symbol=symbol,
        exchange=exchange,
        datetime=dt,
        name=symbol_name_map[symbol],
        volume=data["Volume"],
        open_interest=data["OpenInterest"],
        last_price=adjust_price(data["LastPrice"]),
        limit_up=data["UpperLimitPrice"],
        limit_down=data["LowerLimitPrice"],
        open_price=adjust_price(data["OpenPrice"]),
        high_price=adjust_price(data["HighestPrice"]),
        low_price=adjust_price(data["LowestPrice"]),
        pre_close=adjust_price(data["PreClosePrice"]),
        bid_price_1=adjust_price(data["BidPrice1"]),
        ask_price_1=adjust_price(data["AskPrice1"]),
        bid_volume_1=data["BidVolume1"],
        ask_volume_1=data["AskVolume1"],
        gateway_name=self.gateway_name
    )
    self.gateway.on_tick(tick)
Administrator
avatar
加入于:
帖子: 4500
声望: 320

收到,我们来处理下。

产生的原因是CTP类接口返回的价格字段是C++里的double类型,这种类型的数据在由pybind11转化为Python的float类型时,可能由于浮点数精度问题(所有语言都有,跨语言的应用就更常见)导致数字出现偏差,然后导致奇怪的错误了。

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】