手动提交的 TWS 订单
TWS 手工订单不是普通 API 客户端提交的订单。默认情况下,普通 clientId 不应该随便接管这些订单。
如果确实要让 API 监控或管理 TWS 手工订单,需要使用 clientId=0 并调用 reqAutoOpenOrders(True)。
app.connect("127.0.0.1", 7497, clientId=0)app.reqAutoOpenOrders(True)绑定成功后,TWS 可能通过 openOrder() 和 orderStatus() 把手工订单推送给 API。部分情况下还会出现 orderBound(),告诉你某个 permId 被绑定到了哪个 clientId/orderId。
为什么要谨慎
Section titled “为什么要谨慎”| 风险 | 说明 |
|---|---|
| 订单归属变复杂 | 手工订单会被 API 看到和管理。 |
| 多客户端冲突 | 其它程序也可能在监控订单。 |
| 撤单风险 | 程序若自动处理回调,可能误撤手工订单。 |
| 编号语义变化 | 手工订单被绑定后,会出现 API 侧 orderId。 |
普通策略开发不需要这个接口。更稳的做法是:
- 策略程序使用非 0 的固定
clientId。 - 程序只处理自己提交的订单。
- 用
orderRef标记策略来源。 - 手工订单由人工在 TWS 里管理。
只有当你在做统一订单监控、人工订单同步或半自动交易面板时,再考虑 clientId=0 + reqAutoOpenOrders(True)。