取消所有未完成订单
reqGlobalCancel(OrderCancel()) 会请求取消所有未完成订单。它不是只取消某个 orderId,因此风险比 cancelOrder() 高。
from ibapi.order_cancel import OrderCancel
app.reqGlobalCancel(OrderCancel())- 模拟账户测试脚本结束前清理残留挂单。
- 测试工具提供“清理本次测试订单”的兜底动作。
- 开发阶段确认没有遗留订单影响下一次测试。
不适合的场景
Section titled “不适合的场景”- 真实账户里给普通用户随手点击。
- 多策略共用同一个账户时无差别取消。
- 没有订单列表确认的情况下直接调用。
- 系统无法区分手工订单、策略订单和其它 API 客户端订单时直接批量撤单。
重复取消边界
Section titled “重复取消边界”在 cancelOrder() 之后又调用 reqGlobalCancel() 时,如果单个订单已经进入取消流程,TWS 可能返回:
ERROR=reqId=[订单 ID];code=161;msg=在委托单未处于可取消状态时尝试取消。这类提示常见于重复取消或订单状态已经不可取消。测试脚本可以记录它;真实交易系统应先展示未完成订单列表,再让用户确认是否批量撤单。
- 后台按钮文案不要只写“清空”,应明确写“取消所有未完成订单”。
- 批量撤单前展示订单数量、合约、方向、数量、订单来源和
orderRef。 - 多策略系统应优先按
orderRef或策略 ID 过滤,只取消本策略订单。 - 批量撤单后再调用
reqOpenOrders()或reqAllOpenOrders()刷新活动订单列表。