请求成交详情
reqExecutions() 用来请求成交详情。它需要一个 ExecutionFilter 对象作为过滤条件。
from ibapi.execution import ExecutionFilter
exec_filter = ExecutionFilter()app.reqExecutions(98301, exec_filter)空过滤器表示查询 TWS 可见范围内的成交。98301 是本次请求的 reqId,只要在本次程序运行里不和其他请求冲突即可。
| 字段 | 类型 | 中文说明 |
|---|---|---|
clientId | int | 按 API 客户端编号过滤。只想查某个客户端提交的订单成交时使用。 |
acctCode | str | 按账户号过滤。顾问、多账户或家庭账户结构下很有用。 |
time | str | 起始时间过滤。常见格式类似 YYYYMMDD-HH:MM:SS,实际可用范围仍受 TWS 交易日志范围限制。 |
symbol | str | 按合约代码过滤,例如 AAPL。 |
secType | str | 按证券类型过滤,例如 STK、OPT、FUT、CASH。 |
exchange | str | 按交易所过滤。注意 SMART 订单的实际成交交易所可能不是 SMART。 |
side | str | 按成交方向过滤。常见值是 BUY / SELL 或与 API 版本对应的方向值。 |
lastNDays | str / int | 部分 API 版本支持按最近天数过滤,但不要把它当成无限历史查询;TWS 可见范围仍是关键约束。 |
过滤字段可以只填一部分。字段越多,范围越窄;新手排查时建议先用空过滤器确认链路,再逐步增加过滤条件。
按股票过滤示例
Section titled “按股票过滤示例”exec_filter = ExecutionFilter()exec_filter.symbol = "AAPL"exec_filter.secType = "STK"
app.reqExecutions(98301, exec_filter)按账户和时间过滤示例
Section titled “按账户和时间过滤示例”exec_filter = ExecutionFilter()exec_filter.acctCode = "DU1234567"exec_filter.time = "20260614-09:30:00"
app.reqExecutions(98302, exec_filter)acctCode 应替换成自己的账户号。时间过滤只适合缩小当天或 TWS 可见范围内的成交,不适合当作长期历史成交接口使用。
模拟账户返回示例
Section titled “模拟账户返回示例”EXEC_DETAILS_END=TrueEXEC_ROWS=0可见范围内没有成交时,只要收到 execDetailsEnd(),就说明这次查询正常结束。真正的错误通常会通过 error() 回调返回错误码和错误信息。
常见排查顺序
Section titled “常见排查顺序”- 先用空过滤器查询,确认能收到
execDetailsEnd()。 - 确认当天或 TWS 交易日志范围内确实有成交。
- 再增加
symbol、secType、acctCode等过滤条件。 - 如果使用多个 API 客户端,确认
clientId过滤没有把成交排除掉。 - 如果订单只提交后撤单,没有成交,就不会返回
Execution。