VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 44
声望: 2

最近偶尔会碰到收不到订单回报的情况,我用的是脚本策略,下单之后用get_order(vt_orderid)查询订单,发现status一直是SUBMITTING,但实际已经成交了;如果重新登陆账号,又可以接收到这笔订单的回报,也可以查到ALLTRADED的状态。
我看了一下源码,发现orderdata对象在生成的时候默认的status就是SUBMITTING,后续可能没有收到回报,所以没有触发on_order()来更新内存里的数据,不知道是不是因为网络原因有丢包之类的情况?

Member
avatar
加入于:
帖子: 4749
声望: 288

veighna_studio版本是?最近新增了广期所的合约,vnpy_ctp需要升级

Member
avatar
加入于:
帖子: 44
声望: 2

xiaohe wrote:

veighna_studio版本是?最近新增了广期所的合约,vnpy_ctp需要升级

目前用的是2.8,是融航的接口会出现这个问题,ctp至今没遇到过。跟广期所应该没关系,没有交易过工业硅,其他几个交易所的似乎都遇到过

Member
avatar
加入于:
帖子: 4749
声望: 288

miro wrote:

最近偶尔会碰到收不到订单回报的情况,我用的是脚本策略,下单之后用get_order(vt_orderid)查询订单,发现status一直是SUBMITTING,但实际已经成交了;如果重新登陆账号,又可以接收到这笔订单的回报,也可以查到ALLTRADED的状态。
我看了一下源码,发现orderdata对象在生成的时候默认的status就是SUBMITTING,后续可能没有收到回报,所以没有触发on_order()来更新内存里的数据,不知道是不是因为网络原因有丢包之类的情况?
看这个描述应该是底层出现报错信息,导致委托状态不更新。可以自己看下底层是否报错了keyerror吧

Member
avatar
加入于:
帖子: 44
声望: 2

`
def process_order_event(self, event: Event) -> None:
""""""
order: OrderData = event.data
self.orders[order.vt_orderid] = order
if order.vt_orderid not in self.order_to_trades:
self.order_to_trades[order.vt_orderid]=[]

    # If order is active, then update data in dict.
    if order.is_active():
        self.active_orders[order.vt_orderid] = order
    # Otherwise, pop inactive order from in dict
    elif order.vt_orderid in self.active_orders:
        self.active_orders.pop(order.vt_orderid)

`
从process_order_event来看,应该是self.orders[order.vt_orderid] = order出了问题?但是没有发现过报错信息,我在这个函数里打印信息后续再检查检查吧

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】