跳转到内容

请求成交详情

reqExecutions() 用来请求成交详情。它需要一个 ExecutionFilter 对象作为过滤条件。

官方参考:TWS API Documentation

from ibapi.execution import ExecutionFilter
exec_filter = ExecutionFilter()
app.reqExecutions(98301, exec_filter)

空过滤器表示查询 TWS 可见范围内的成交。98301 是本次请求的 reqId,只要在本次程序运行里不和其他请求冲突即可。

字段类型中文说明
clientIdint按 API 客户端编号过滤。只想查某个客户端提交的订单成交时使用。
acctCodestr按账户号过滤。顾问、多账户或家庭账户结构下很有用。
timestr起始时间过滤。常见格式类似 YYYYMMDD-HH:MM:SS,实际可用范围仍受 TWS 交易日志范围限制。
symbolstr按合约代码过滤,例如 AAPL
secTypestr按证券类型过滤,例如 STKOPTFUTCASH
exchangestr按交易所过滤。注意 SMART 订单的实际成交交易所可能不是 SMART。
sidestr按成交方向过滤。常见值是 BUY / SELL 或与 API 版本对应的方向值。
lastNDaysstr / int部分 API 版本支持按最近天数过滤,但不要把它当成无限历史查询;TWS 可见范围仍是关键约束。

过滤字段可以只填一部分。字段越多,范围越窄;新手排查时建议先用空过滤器确认链路,再逐步增加过滤条件。

exec_filter = ExecutionFilter()
exec_filter.symbol = "AAPL"
exec_filter.secType = "STK"
app.reqExecutions(98301, exec_filter)
exec_filter = ExecutionFilter()
exec_filter.acctCode = "DU1234567"
exec_filter.time = "20260614-09:30:00"
app.reqExecutions(98302, exec_filter)

acctCode 应替换成自己的账户号。时间过滤只适合缩小当天或 TWS 可见范围内的成交,不适合当作长期历史成交接口使用。

EXEC_DETAILS_END=True
EXEC_ROWS=0

可见范围内没有成交时,只要收到 execDetailsEnd(),就说明这次查询正常结束。真正的错误通常会通过 error() 回调返回错误码和错误信息。

  1. 先用空过滤器查询,确认能收到 execDetailsEnd()
  2. 确认当天或 TWS 交易日志范围内确实有成交。
  3. 再增加 symbolsecTypeacctCode 等过滤条件。
  4. 如果使用多个 API 客户端,确认 clientId 过滤没有把成交排除掉。
  5. 如果订单只提交后撤单,没有成交,就不会返回 Execution