diff --git a/sanguo_trader/qmt_gateway_client.py b/sanguo_trader/qmt_gateway_client.py index 761ec37..850592c 100644 --- a/sanguo_trader/qmt_gateway_client.py +++ b/sanguo_trader/qmt_gateway_client.py @@ -164,9 +164,14 @@ class QmtGatewayClient: try: from vnpy.trader.object import CancelRequest oid = str(order_id) - if oid.startswith("QMT."): # vt_orderid(QMT.184246#1)→ remark(184246#1) - oid = oid[4:] # vnpy_qmt td.orders 按 remark 建 key - self._exec.gateway.cancel_order(CancelRequest(orderid=oid)) + vt = oid if oid.startswith("QMT.") else f"QMT.{oid}" + o = self._exec.orders.get(vt) + if o is None: + return {"ok": False, "error": f"order {oid} 不在缓存(gateway 未收到该单事件)"} + remark = vt[4:] # vt_orderid(QMT.184246#1)→ remark(184246#1),vnpy_qmt 按 remark 建 key + # vnpy 4.4.0 的 CancelRequest 必填 (orderid, symbol, exchange),缺 symbol/exchange 会 TypeError + self._exec.gateway.cancel_order( + CancelRequest(orderid=remark, symbol=o.symbol, exchange=o.exchange)) return {"ok": True, "order_id": order_id} except Exception as e: # noqa: BLE001 logger.warning("QmtGatewayClient.cancel_order 失败 %s: %s", order_id, e)