12.59K 浏览
0

INFO – 模拟交易下单 20200604042524689774: 时间:2038-01-01 00:00:00.000000,合约:DCE.i1905,开平:CLOSE,方向:SELL,手数:1,价格:789.5
INFO – 模拟交易委托单 20200604042524689774: 下单失败, 不在可交易时间段内

请问2038-01-01 00:00:00.000000这个时间是怎么出来的?

west 已回答的问题 2020年6月5日
0

你方便提供一下能重现2038年这个问题的简短代码吗,就是用回测,然后下单语句是放在哪里的,会出现这个问题

west 已回答的问题 2020年6月5日
0

quote的trading_time字段来自于合约文件,合约文件始终用的试最新的,这个之后会优化。

你的回测是写结束时间是2038?

west 已回答的问题 2020年6月5日
0

你是盘中交易还是回测呢?有没有重现代码

Simple 编辑评论 2020年6月4日

是回测。
上面问题描述的不够完整,重新描述一遍。
第一次出现“下单失败, 不在可交易时间段内”是在2019-02-19 23:14:59.999999。
日志如下:
INFO – 模拟交易下单 20200604042524689774: 时间:2019-02-19 23:14:59.999999,合约:DCE.i1905,开平:CLOSE,方向:SELL,手数:1,价格:626.5
INFO – 模拟交易委托单 20200604042524689774: 下单失败, 不在可交易时间段内

发现平仓没有完成时,我的程序会一直尝试执行,直到最后又出现了一次模拟下单,也就是2038年那次。

断点到2019-02-19 23:14:59.999999这个时间,查看quote发现,夜盘交易时间截止至23点。
quote如下:
D({‘datetime’: ‘2019-02-19 23:14:59.999999’, ‘ask_price1’: 627.5, ‘ask_volume1’: 1, ‘bid_price1’: 626.5, ‘bid_volume1’: 1, ‘ask_price2’: nan, ‘ask_volume2’: 0, ‘bid_price2’: nan, ‘bid_volume2’: 0, ‘ask_price3’: nan, ‘ask_volume3’: 0, ‘bid_price3’: nan, ‘bid_volume3’: 0, ‘ask_price4’: nan, ‘ask_volume4’: 0, ‘bid_price4’: nan, ‘bid_volume4’: 0, ‘ask_price5’: nan, ‘ask_volume5’: 0, ‘bid_price5’: nan, ‘bid_volume5’: 0, ‘last_price’: 627.0, ‘highest’: nan, ‘lowest’: nan, ‘open’: nan, ‘close’: nan, ‘average’: nan, ‘volume’: 0, ‘amount’: nan, ‘open_interest’: 613947, ‘settlement’: nan, ‘upper_limit’: nan, ‘lower_limit’: nan, ‘pre_open_interest’: 0, ‘pre_settlement’: nan, ‘pre_close’: nan, ‘price_tick’: 0.5, ‘price_decs’: 1, ‘volume_multiple’: 100, ‘max_limit_order_volume’: 1000, ‘max_market_order_volume’: 1000, ‘min_limit_order_volume’: 0, ‘min_market_order_volume’: 0, ‘underlying_symbol’: ”, ‘strike_price’: nan, ‘ins_class’: ‘FUTURE’, ‘instrument_id’: ‘DCE.i1905’, ‘expired’: False, ‘trading_time’: , D({‘day’: [[’09:00:00′, ’10:15:00′], [’10:30:00′, ’11:30:00′], [’13:30:00′, ’15:00:00′]], ‘night’: [[’21:00:00′, ’23:00:00′]]}), ‘expire_datetime’: 1558076400.0, ‘delivery_month’: 5, ‘delivery_year’: 2019, ‘option_class’: ”, ‘product_id’: ‘i’, ‘margin’: 6024.0, ‘commission’: 7.53})

总的来说这是两个问题:
1、把现在的交易时间用作了历史的交易时间,历史的夜盘有过到23:30的时候,由于现在的交易时间限制在23点之前,导致这半个小时无法下单。这导致回测无法进行,至少是很不准确。我理解逻辑应该是这样:回测时候有数据就可以下单,不受交易时间限制,盘中模拟或者实盘受交易时间限制。
2、我的程序发现没有平仓会不断的尝试并且不会终止,当回测结束时,我的程序会重新发起一次清仓操作,此时就出现了2038年这个问题。

希望对tqsdk的改进有帮助。