18 浏览
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
=============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

所以总结问题:在没有换月(但接近)换月的时候,quote的价格首先切换,但quote的symbol没有切换。symbol在三天后才切换。