13 浏览
0

本地回测,同时监听了quote和tick,quote使用的主连代码,tick使用quote.underlying_symbol。发现突然有时候quote和tick的last_price会差非常多,但又没有触发换月,我用if api.is_changing(quote, “underlying_symbol”)来判断是否换月,并没有触发这里。

是否意味着quote的价格不应该使用,而应该使用ticks里或者klines里的价格?

zyding 发表新评论 2小时 前

即使都使用tick里的价格,发现开仓后,position里的价格也与tick价格不一样,导致没有办法判断盈亏。再仔细看日志,发现到12-16夜盘开盘的时候,tick数据自己换月了,但其他所有对象都没有换月,代码也没有触发自动或手动换月。依然在开2501的仓,但是tick价格变成了2505的了。
代码类似:
symbol_prefix = “KQ.m@DCE.c”
quote = api.get_quote(symbol_prefix) #未换月
ticks = api.get_tick_serial(quote.underlying_symbol) #自动换月
position = api.get_position(quote.underlying_symbol) #未换月
target_pos = TargetPosTask(api, quote.underlying_symbol) #未换月

打印的日志:
1. 第一条日志此时symbol、tick和quote信息都正确:
=============tick log for 2024-12-13 20:59:00.021000 ****start****================
tick basic info. symbol:DCE.c2501, quote_price:2115 | tick_price:2104.0 | ask_price:2106.0 | bid_price:2104.0 | ask_volume:23.0 | bid_volume:448.0 | tick volume:0
2. 第二条,下一个tick日志, symbol、tick正确,quote价格变成2505的价格了:
=============tick log for 2024-12-13 21:00:00.468000 ****start****================
tick basic info. symbol:DCE.c2501, quote_price:2211 | tick_price:2111.0 | ask_price:2111.0 | bid_price:2109.0 | ask_volume:3.0 | bid_volume:72.0 | tick volume:0

3. 第三条日志,3天后, symbol才换月成2505,quote和tick都与symbol统一。但不知为何没有触发if api.is_changing(quote, “underlying_symbol”)逻辑,导致position还是2501的信息,此时开平仓价格判断依然错乱。
=============tick log for 2024-12-16 18:33:47 ****start****================
tick basic info. symbol:DCE.c2505, quote_price:2205 | tick_price:nan | ask_price:nan | bid_price:nan | ask_volume:0.0 | bid_volume:0.0 | tick volume:0
=============tick log for 2024-12-16 21:00:00.082000 ****start****================
tick basic info. symbol:DCE.c2505, quote_price:2205 | tick_price:2205.0 | ask_price:2205.0 | bid_price:2203.0 | ask_volume:249.0 | bid_volume:109.0 | tick volume:0
4. 第四条随后的开仓信息,可以看到position并没有变化
position changed:{‘exchange_id’: ‘DCE’, ‘instrument_id’: ‘c2501’, ‘pos_long_his’: 0, ‘pos_long_today’: 0, ‘pos_short_his’: 0, ‘pos_short_today’: 1, ‘volume_long_today’: 0, ‘volume_long_his’: 0, ‘volume_long’: 0, ‘volume_long_frozen_today’: 0, ‘volume_long_frozen_his’: 0, ‘volume_long_frozen’: 0, ‘volume_short_today’: 1, ‘volume_short_his’: 0, ‘volume_short’: 1, ‘volume_short_frozen_today’: 0, ‘volume_short_frozen_his’: 0, ‘volume_short_frozen’: 0, ‘open_price_long’: nan, ‘open_price_short’: 2105.0, ‘open_cost_long’: 0.0, ‘open_cost_short’: 21050.0, ‘position_price_long’: nan, ‘position_price_short’: 2105.0, ‘position_cost_long’: 0.0, ‘position_cost_short’: 21050.0, ‘float_profit_long’: 0.0, ‘float_profit_short’: -10.0, ‘float_profit’: -10.0, ‘position_profit_long’: 0.0, ‘position_profit_short’: -10.0, ‘position_profit’: -10.0, ‘margin_long’: 0.0, ‘margin_short’: 1072.5, ‘margin’: 1072.5, ‘market_value_long’: 0.0, ‘market_value_short’: 0.0, ‘market_value’: 0.0, ‘pos’: -1, ‘pos_long’: 0, ‘pos_short’: 1, ‘last_price’: 2106, ‘underlying_last_price’: nan, ‘future_margin’: 1072.5}

所以总结问题有:
1. 在没有换月(但接近)换月的时候,quote的价格首先切换,但quote的symbol没有切换。
2. 在quote的symbol切换后,为何没有触发is_changing(quote, “underlying_symbol”)?
3. 在没有触发is_changing(quote, “underlying_symbol”)的情况下,tick也没有重新定义,为何tick会自动切换?
4. 在tick切换后,position为何没有自动切换?他们的定义都是一样的。