跳转到内容

取消所有未完成订单

reqGlobalCancel(OrderCancel()) 会请求取消所有未完成订单。它不是只取消某个 orderId,因此风险比 cancelOrder() 高。

from ibapi.order_cancel import OrderCancel
app.reqGlobalCancel(OrderCancel())
  • 模拟账户测试脚本结束前清理残留挂单。
  • 测试工具提供“清理本次测试订单”的兜底动作。
  • 开发阶段确认没有遗留订单影响下一次测试。
  • 真实账户里给普通用户随手点击。
  • 多策略共用同一个账户时无差别取消。
  • 没有订单列表确认的情况下直接调用。
  • 系统无法区分手工订单、策略订单和其它 API 客户端订单时直接批量撤单。

cancelOrder() 之后又调用 reqGlobalCancel() 时,如果单个订单已经进入取消流程,TWS 可能返回:

ERROR=reqId=[订单 ID];code=161;msg=在委托单未处于可取消状态时尝试取消。

这类提示常见于重复取消或订单状态已经不可取消。测试脚本可以记录它;真实交易系统应先展示未完成订单列表,再让用户确认是否批量撤单。

  • 后台按钮文案不要只写“清空”,应明确写“取消所有未完成订单”。
  • 批量撤单前展示订单数量、合约、方向、数量、订单来源和 orderRef
  • 多策略系统应优先按 orderRef 或策略 ID 过滤,只取消本策略订单。
  • 批量撤单后再调用 reqOpenOrders()reqAllOpenOrders() 刷新活动订单列表。