紧急求助,无法刷新获取订单信息数据和持仓数据!
用get_order(vtorderid='CTP.3-9351590_1',use_df=False) 获取订单信息,和用get_position获取仓位信息,很多时候都返回None.
调试发现这些访问服务器的接口,只是获取了本地数据,刚下单的数据没有更新,导致返回None。
如果重新登录系统,又可以获取数据了,但不可能每次下单都退出系统再重新登录系统。
请问有什么命令可以刷新获取服务器的订单信息数据和持仓数据?
紧急求助,无法刷新获取订单信息数据和持仓数据!
用get_order(vtorderid='CTP.3-9351590_1',use_df=False) 获取订单信息,和用get_position获取仓位信息,很多时候都返回None.
调试发现这些访问服务器的接口,只是获取了本地数据,刚下单的数据没有更新,导致返回None。
如果重新登录系统,又可以获取数据了,但不可能每次下单都退出系统再重新登录系统。
请问有什么命令可以刷新获取服务器的订单信息数据和持仓数据?
发完单之后要等收到订单回报才能用get_order()查询到结果,所以你需要sleep一段时间,具体需要多长时间要看本地到交易所的网络延迟
我就是用sleep一直等待的,然后每秒get_order()一次,也不返回订单数据。
但关掉vnpy,再重新打开vnpy,重新连接,再get_order()一次,立即就返回订单数据了。
下单一次,关一次vnpy,那肯定不行了,请问有没有刷新服务器数据的命令?
可以自己在接口打印排查一下委托之后的变化
def get_order(self, vt_orderid: str) -> Optional[OrderData]:
"""查询委托数据"""
return self.orders.get(vt_orderid, None)
这段代码已经是接口了吧,一直返回就是None呀,还要怎样打印?
另外我也试过这样重新连接
gateway.close
gateway.connect
结果执行后,整个vnpy都自动退出了
老师,还有什么办法可以刷新服务器数据?
如果获取不了最新的服务器数据,整个vnpy都用不了!
其实不用打印出来,主界面那个成交列表也看不到刚刚成交的数据,感觉get_order就是取主界面那个成交列表的数据。
只要关闭vnpy系统,再重新打开vnpy系统,重新连接,再get_order()同一个vt_orderid,立即就返回订单数据了。
所以有没有命令可以刷新主界面那个成交列表的数据?
这个bug还真没见过,是不是修改了什么地方把订单回报的函数卡住了?可以在vnpy_ctp/gateway/ctp_gateway.py里面CtpTdApi类的OnRtnOrder里打印一下看看
我连的是simnow服务器
simnow也是用的vnpy_ctp的ctp_gateway.py,这个才是接口。
如果主界面成交也不能及时更新,可能是底层出现了报错,可以自己观察一下
正常排查也是在接口文件的委托推送和成交推送里面打印,如果没收到就是API没有推送。如果底层接口收到了没成功推向上层应该就是底层报错了
老师说得对,排查过就是order_event事件没有推送的原因。
启动vnpy的时候,order_event事件会推送一次所有旧的委托到主界面,然后无论怎样下单,无论sleep多长时间,都不会再推送新的委托。
但重新启动vnpy,就可以看到上一次的委托,因为启动的时候会推送一次。
我查过,的确是用vnpy_ctp的ctp_gateway.py,这个没有问题,而且启动时推送是成功的,证明接口没有错。
为什么新的下单,order_event事件一直没有收到任何委托推送和成交推送呢?
第一次启动的时候有在接口的onRtnOrder函数下进行打印排查吗?
或者底层有报错信息输出吗?
非常感谢老师的指导和排查方法,帮我解决了不少问题。
今天simnow接收数据特别快,数据一下子就推送过来了。
感觉这个问题跟simnow服务器有关,而vnpy的机制是由服务器推送。
希望后续vnpy能够增加一些主动刷新推送事件的方法,当服务器故障暂停推送时,能够主动发送命令刷新推送事件!