EClient 类参考
EClient 是 Python TWS API 中负责发送请求的客户端类。开发时通常让自己的应用类同时继承 EWrapper 和 EClient:EClient 负责发请求,EWrapper 负责接回调。
它把 Python 方法调用编码成 TWS API Socket 消息,并发送给 TWS 或 IB Gateway。连接、行情、历史数据、账户、订单、扫描器、新闻、WSH 和设置管理请求都从这里发出。
| 方法 | 作用 |
|---|---|
connect(host, port, clientId) | 连接 TWS 或 IB Gateway 的 Socket 地址与端口。 |
disconnect() | 断开 API Socket 连接。 |
isConnected() | 检查客户端是否仍保持 Socket 连接。 |
run() | 进入消息循环,持续解码并分发 TWS 回调。 |
reqCurrentTime() | 请求服务器时间,常用作最小连通性测试。 |
reqMktData(reqId: int, contract: ibapi.contract.Contract, genericTickList: str, snapshot: bool, regulatorySnapshot: bool, mktDataOptions: list) | 请求一档行情或快照行情。 |
cancelMktData(reqId: int) | 取消一档行情订阅。 |
reqMarketDataType(marketDataType: int) | 切换实时、冻结、延迟、延迟冻结行情类型。 |
reqHistoricalData(reqId: int, contract: ibapi.contract.Contract, endDateTime: str, durationStr: str, barSizeSetting: str, whatToShow: str, useRTH: int, formatDate: int, keepUpToDate: bool, chartOptions: list) | 请求历史 K 线。 |
cancelHistoricalData(reqId: int) | 取消历史 K 线持续更新请求。 |
reqHistoricalTicks(reqId: int, contract: ibapi.contract.Contract, startDateTime: str, endDateTime: str, numberOfTicks: int, whatToShow: str, useRth: int, ignoreSize: bool, miscOptions: list) | 请求历史逐笔数据。 |
reqContractDetails(reqId: int, contract: ibapi.contract.Contract) | 查询合约详情,验证 Contract 是否唯一。 |
placeOrder(orderId: int, contract: ibapi.contract.Contract, order: ibapi.order.Order) | 提交、修改或预检查订单。 |
cancelOrder(orderId: int, orderCancel: ibapi.order_cancel.OrderCancel) | 取消指定订单。 |
reqGlobalCancel(orderCancel: ibapi.order_cancel.OrderCancel) | 取消该用户的全部开放订单,使用前必须非常谨慎。 |
reqOpenOrders() | 查询该 clientId 关联的开放订单。 |
reqAllOpenOrders() | 查询所有 API clientId 的开放订单。 |
reqAutoOpenOrders(bAutoBind: bool) | 自动绑定 TWS 手工订单,通常只建议 Master Client ID 使用。 |
reqCompletedOrders(apiOnly: bool) | 查询已完成订单。 |
reqExecutions(reqId: int, execFilter: ibapi.execution.ExecutionFilter) | 按过滤器查询成交。 |
reqIds(numIds: int) | 请求下一个可用订单 ID。 |
reqAccountSummary(reqId: int, groupName: str, tags: str) | 请求账户摘要字段。 |
cancelAccountSummary(reqId: int) | 取消账户摘要订阅。 |
reqPositions() | 请求所有账户持仓。 |
cancelPositions() | 取消持仓订阅。 |
reqScannerParameters() | 请求市场扫描器 XML 参数定义。 |
reqScannerSubscription(reqId: int, subscription: ibapi.scanner.ScannerSubscription, scannerSubscriptionOptions: list, scannerSubscriptionFilterOptions: list) | 发起市场扫描器订阅。 |
cancelScannerSubscription(reqId: int) | 取消市场扫描器订阅。 |
reqNewsProviders() | 请求可用新闻源。 |
reqHistoricalNews(reqId: int, conId: int, providerCodes: str, startDateTime: str, endDateTime: str, totalResults: int, historicalNewsOptions: list) | 请求历史新闻标题。 |
reqNewsArticle(reqId: int, providerCode: str, articleId: str, newsArticleOptions: list) | 请求新闻正文。 |
reqWshMetaData(reqId: int) | 请求 Wall Street Horizon 元数据。 |
reqWshEventData(reqId: int, wshEventData: ibapi.common.WshEventData) | 请求 Wall Street Horizon 事件数据。 |
reqConfigProtoBuf(configRequestProto: ConfigRequest_pb2.ConfigRequest) | 请求 TWS API 配置。新版 Python API 使用 Protobuf 请求对象。 |
cancelWshMetaData(reqId: int) | 取消 WSH 元数据请求。 |
cancelWshEventData(reqId: int) | 取消 WSH 事件数据请求。 |
reqId用于把请求和回调配对;orderId只用于订单,必须按nextValidId()管理。- 发送请求成功不等于业务成功,真正结果要看
EWrapper回调和error()。 - 订阅类请求要保存
reqId,后续用对应 cancel 方法取消。 - 下单前应先跑
reqContractDetails()和 WhatIf 预检查。
Python API 中对应源码文件为 ibapi/client.py。其他语言可能把发送类命名为 EClientSocket,但请求/回调模型一致。