跳转到内容

EClient 类参考

EClient 是 Python TWS API 中负责发送请求的客户端类。开发时通常让自己的应用类同时继承 EWrapperEClientEClient 负责发请求,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,但请求/回调模型一致。