跳转到内容

查询活动订单

活动订单指仍在 TWS/IBKR 系统中处于工作状态、等待触发、等待撤单或尚未完全结束的订单。TWS API 提供三种常见入口:reqOpenOrders()reqAllOpenOrders()reqAutoOpenOrders(True)

官方参考:TWS API Documentation

接口查询范围适合场景
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=True
ALL_OPEN_ORDERS_END=True
OPEN_ORDER_ROWS=0
ORDER_STATUS_ROWS=0

没有活动订单时,两个查询也会正常返回结束信号。判断接口是否正常,不要只看 OPEN_ORDER_ROWS 是否大于 0;更重要的是是否收到 openOrderEnd()

活动订单只覆盖还没有完全结束的订单。已经撤单、成交完成或失效的订单,需要用 reqCompletedOrders() 读取。

在模拟账户里,一笔 AAPL 限价单提交、改价并撤单后,再查活动订单会返回 0 行;同一笔订单会出现在已完成订单里,状态为 Cancelled