查询活动订单
活动订单指仍在 TWS/IBKR 系统中处于工作状态、等待触发、等待撤单或尚未完全结束的订单。TWS API 提供三种常见入口:reqOpenOrders()、reqAllOpenOrders() 和 reqAutoOpenOrders(True)。
三种接口怎么选
Section titled “三种接口怎么选”| 接口 | 查询范围 | 适合场景 |
|---|---|---|
reqOpenOrders() | 本 API 客户端提交的未完成订单 | 单个策略程序恢复自己的订单状态。 |
reqAllOpenOrders() | 所有 API 客户端提交的未完成订单 | 账户级订单监控、风控后台、统一订单看板。 |
reqAutoOpenOrders(True) | 将 TWS 手工订单自动绑定给 API | 明确需要管理手工订单,且连接使用 clientId=0。 |
普通策略程序优先使用 reqOpenOrders()。只有在你确实要做账户级订单监控时,才使用 reqAllOpenOrders()。reqAutoOpenOrders(True) 会改变手工订单和 API 的绑定关系,不能随手放进通用示例里自动执行。
这三类请求最终都会通过相同回调返回:
| 回调 | 说明 |
|---|---|
openOrder() | 返回订单对象、合约对象和订单状态对象。 |
orderStatus() | 返回状态、已成交数量、剩余数量、平均成交价等进度信息。 |
openOrderEnd() | 表示这一批订单返回结束。 |
orderBound() | 手工订单绑定到 API 订单编号时可能出现。 |
# 查询本 clientId 自己提交的未完成订单。app.reqOpenOrders()
# 查询所有 API 客户端提交的未完成订单。app.reqAllOpenOrders()reqOpenOrders() 和 reqAllOpenOrders() 都不需要 reqId。它们返回的数据要通过回调接收。
OPEN_ORDERS_END=TrueALL_OPEN_ORDERS_END=TrueOPEN_ORDER_ROWS=0ORDER_STATUS_ROWS=0没有活动订单时,两个查询也会正常返回结束信号。判断接口是否正常,不要只看 OPEN_ORDER_ROWS 是否大于 0;更重要的是是否收到 openOrderEnd()。
和已完成订单的区别
Section titled “和已完成订单的区别”活动订单只覆盖还没有完全结束的订单。已经撤单、成交完成或失效的订单,需要用 reqCompletedOrders() 读取。
在模拟账户里,一笔 AAPL 限价单提交、改价并撤单后,再查活动订单会返回 0 行;同一笔订单会出现在已完成订单里,状态为 Cancelled。