查询已完成订单
已完成订单是已经不再活动的订单,例如已成交、已取消、API 取消、失效等。它们不会出现在活动订单列表里,但可以通过 reqCompletedOrders() 查询。
| 步骤 | 接口 / 回调 | 说明 |
|---|---|---|
| 1 | reqCompletedOrders(apiOnly) | 请求已完成订单。 |
| 2 | completedOrder() | 每次接收一条已完成订单。 |
| 3 | completedOrdersEnd() | 表示这一批已完成订单返回结束。 |
completedOrder() 返回的是订单归档,不是成交流水。一个已取消订单可以出现在这里,但不会出现在 execDetails() 中。
COMPLETED_ORDERS_END=TrueCOMPLETED_ORDER_ROWS=4COMPLETED_ORDER=symbol=AAPL;secType=STK;action=BUY;orderType=LMT;totalQuantity=1;status=Cancelled;permId=1466795661COMPLETED_ORDER=symbol=AAPL;secType=STK;action=BUY;orderType=LMT;totalQuantity=1;status=Cancelled;permId=1466795662这个结果说明 reqCompletedOrders(True) 正常结束,并返回此前已取消的 API 限价单。示例只展示前两条订单归档关键字段,公开日志里应避免打印账户号和完整交易明细。
和活动订单的区别
Section titled “和活动订单的区别”| 数据 | 接口 | 用途 |
|---|---|---|
| 活动订单 | reqOpenOrders() / reqAllOpenOrders() | 恢复还在工作中的订单。 |
| 已完成订单 | reqCompletedOrders() | 查看已结束订单归档。 |
| 成交详情 | reqExecutions() | 保存真实成交流水。 |
| 佣金费用 | commissionAndFeesReport() | 补充成交费用和已实现盈亏。 |
- 已完成订单不一定成交。Cancelled、ApiCancelled、Inactive 都可能没有成交。
- 已完成订单适合做订单历史,不适合做盈亏流水。
- 如果要计算真实买卖明细,应使用
execDetails()和commissionAndFeesReport()。 - 返回 0 行不代表接口失败;是否收到
completedOrdersEnd()更能说明请求是否正常结束。