EWrapper 接口参考
EWrapper 是接收 TWS / IB Gateway 回调的接口。几乎所有请求都不会直接返回业务数据,而是通过 EWrapper 的某个方法异步返回。
它负责接收行情、历史 K 线、合约详情、订单状态、成交、账户、扫描器、新闻、WSH、错误码等消息。写 TWS API 程序时,真正的业务逻辑通常从这些回调开始。
| 回调 | 触发时机 |
|---|---|
error(reqId: int, errorTime: int, errorCode: int, errorString: str, advancedOrderRejectJson='') | 错误、状态码和部分信息提示都会进入这里,不能只把它当异常处理。 |
connectAck() | 连接确认回调,异步连接流程中可能出现。 |
nextValidId(orderId: int) | 连接后或调用 reqIds() 后返回下一个可用订单 ID。 |
currentTime(time: int) | reqCurrentTime() 的返回。 |
tickPrice(reqId: int, tickType: int, price: float, attrib: ibapi.common.TickAttrib) | 一档价格 Tick 返回。 |
tickSize(reqId: int, tickType: int, size: decimal.Decimal) | 一档数量 Tick 返回。 |
tickString(reqId: int, tickType: int, value: str) | 字符串类 Tick 返回,例如部分新闻或交易所信息。 |
tickSnapshotEnd(reqId: int) | 快照行情结束。 |
historicalData(reqId: int, bar: ibapi.common.BarData) | 历史 K 线逐条返回。 |
historicalDataEnd(reqId: int, start: str, end: str) | 历史 K 线请求结束。 |
contractDetails(reqId: int, contractDetails: ibapi.contract.ContractDetails) | 合约详情逐条返回。 |
contractDetailsEnd(reqId: int) | 合约详情请求结束。 |
openOrder(orderId: int, contract: ibapi.contract.Contract, order: ibapi.order.Order, orderState: ibapi.order_state.OrderState) | 开放订单或提交订单后订单对象返回。 |
orderStatus(orderId: int, status: str, filled: decimal.Decimal, remaining: decimal.Decimal, avgFillPrice: float, permId: int, parentId: int, lastFillPrice: float, clientId: int, whyHeld: str, mktCapPrice: float) | 订单状态变化返回。 |
openOrderEnd() | 开放订单列表结束。 |
execDetails(reqId: int, contract: ibapi.contract.Contract, execution: ibapi.execution.Execution) | 成交明细返回。 |
execDetailsEnd(reqId: int) | 成交明细请求结束。 |
commissionAndFeesReport(commissionAndFeesReport: ibapi.commission_and_fees_report.CommissionAndFeesReport) | 成交费用报告返回,通常用 execId 和成交关联。 |
accountSummary(reqId: int, account: str, tag: str, value: str, currency: str) | 账户摘要字段逐条返回。 |
accountSummaryEnd(reqId: int) | 账户摘要请求结束。 |
position(account: str, contract: ibapi.contract.Contract, position: decimal.Decimal, avgCost: float) | 持仓逐条返回。 |
positionEnd() | 持仓请求结束。 |
scannerData(reqId: int, rank: int, contractDetails: ibapi.contract.ContractDetails, distance: str, benchmark: str, projection: str, legsStr: str) | 市场扫描器结果逐条返回。 |
scannerDataEnd(reqId: int) | 扫描器本轮返回结束。 |
newsProviders(newsProviders: list) | 新闻源列表返回。 |
historicalNews(requestId: int, time: str, providerCode: str, articleId: str, headline: str) | 历史新闻标题逐条返回。 |
historicalNewsEnd(requestId: int, hasMore: bool) | 历史新闻请求结束。 |
wshMetaData(reqId: int, dataJson: str) | WSH 元数据 JSON 返回。 |
wshEventData(reqId: int, dataJson: str) | WSH 事件数据 JSON 返回。 |
connectionClosed() | Socket 断开后触发。 |
- 每个回调都要用
reqId、orderId、permId或execId关联回原请求。 error()中既有错误,也有连接农场状态等信息码;不要看到error()就直接退出程序。- 回调可能分多次到达,并用
xxxEnd()表示结束。 - 回调里不要做耗时任务,建议把数据放入队列或缓存后再由业务线程处理。
Python API 中对应源码文件为 ibapi/wrapper.py。