跳转到内容

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 断开后触发。
  • 每个回调都要用 reqIdorderIdpermIdexecId 关联回原请求。
  • error() 中既有错误,也有连接农场状态等信息码;不要看到 error() 就直接退出程序。
  • 回调可能分多次到达,并用 xxxEnd() 表示结束。
  • 回调里不要做耗时任务,建议把数据放入队列或缓存后再由业务线程处理。

Python API 中对应源码文件为 ibapi/wrapper.py