看了下日志,发现了一些线索,也许可以解答我上述的问题,以及其他有类似情况(一直处于提交但无法成交的状态)的问题:
2021-01-20 20:21:53,292 INFO: 交易服务器连接成功
2021-01-20 20:21:53,308 INFO: 行情服务器连接成功
2021-01-20 20:21:53,636 INFO: 交易服务器授权验证成功
2021-01-20 20:21:53,636 INFO: 行情服务器登录成功
2021-01-20 20:21:53,667 INFO: 交易服务器登录成功
2021-01-20 20:21:53,714 INFO: 结算信息确认成功
2021-01-20 20:21:59,870 INFO: 合约信息查询成功
2021-01-20 20:22:54,100 INFO: 交易服务器连接成功
2021-01-20 20:22:54,110 INFO: 行情服务器连接成功
2021-01-20 20:22:54,435 INFO: 交易服务器授权验证成功
2021-01-20 20:22:54,436 INFO: 行情服务器登录成功
2021-01-20 20:22:54,467 INFO: 交易服务器登录成功
2021-01-20 20:22:54,502 INFO: 结算信息确认成功
2021-01-20 20:23:00,850 INFO: 合约信息查询成功
2021-01-21 02:37:12,008 INFO: 行情服务器连接断开,原因4097
2021-01-21 02:37:12,055 INFO: 交易服务器连接断开,原因4097
2021-01-21 07:35:43,568 INFO: 行情服务器连接成功
2021-01-21 07:35:43,599 INFO: 行情服务器登录成功
2021-01-21 07:39:02,583 INFO: 交易服务器连接成功
2021-01-21 07:42:58,141 INFO: 交易服务器授权验证失败,代码:8,信息:CTP:前置不活跃
我每天的习惯是晚上21点开盘前启动程序,直到第二天下午15点收盘后再关闭,其间程序一直开着不关闭。
看日志,凌晨2:30上期所收盘后,行情和交易服务器都断开了与客户程序的连接。到早上7:35 vntrader重连上行情服务器,7:39重连上交易服务器,但7:42的时候交易服务器授权验证失败,信息为“CTP前置不活跃”,暂时不知道确切意思是什么,是否是其授权验证模块未启动工作?
所以这时候,交易服务器是连接成功,但未完成授权登录,即账户处于不可交易状态。这个状态一直会保持到下一个交易时段结束。在这期间,所有触发的单子都是不可能成交的。
按以往使用的期货公司的软件经验看,一般每个交易时段开盘前1小时内才能登录交易账户,假设早上9点开盘,那么8点之前一般是登录不了交易账户的,可能这个时候登录验证没有开,或者开了也不让登录。看交易日志,早上8点前尝试了登录授权,然后失败了。这之后没有再继续尝试,可能就导致了大家反映的这个问题。有些人重启程序后下单就正常,就是在正常的时间重新授权验证成功了,所以下单也正常了。
解决办法其实很简单,就是如果授权验证失败,程序就每隔一个周期(如60秒)重复尝试授权验证,直到成功为止。虽然可以手动关闭程序再启动,但始终觉得是种比较弱的解决办法。自动化交易系统即使不能724小时运行,做到124小时连续运行应该是个基本要求。
另外,软件的主界面上建议增加一个“交易授权成功”或”登录“成功的状态标识,能显式地反映授权状态。
上述是根据日志做的一个分析,大家也可以一起验证一下。