IBKR API Display Group与Jupyter Notebook对接逻辑问题求助
对接IBKR TWS Display Group 1到Jupyter Notebook的解决方案
修改后的完整代码
from ibapi.client import EClient from ibapi.wrapper import EWrapper import pandas as pd import threading import time class MyWrapper(EWrapper): def __init__(self): self.nextValidOrderId = None # 存储Display Group的合约信息 self.group_contracts = [] def nextValidId(self, orderId:int): print(f"设置nextValidOrderId: {orderId}") self.nextValidOrderId = orderId self.start() # 接收显示组列表回调 def displayGroupList(self, reqId: int, groups: str): print(f"DisplayGroupList. ReqId: {reqId} 所有显示组: {groups}") # 订阅Display Group 1的更新事件,reqId用20,groupID指定为1 app.subscribeToGroupEvents(20, 1) # 接收显示组更新回调 def displayGroupUpdated(self, reqId: int, contractInfo: str): print(f"DisplayGroupUpdated. ReqId: {reqId} 合约信息: {contractInfo}") # 解析合约信息(格式为conId=xxx;symbol=xxx;secType=xxx;...) contract_dict = {} for item in contractInfo.split(';'): if '=' in item: key, val = item.split('=', 1) contract_dict[key] = val self.group_contracts.append(contract_dict) # 可选:将解析后的合约转为DataFrame查看 df = pd.DataFrame(self.group_contracts) print("当前组内合约列表:\n", df) def error(self, reqId, errorCode, errorString): print(f"错误. Id: {reqId} 代码: {errorCode} 信息: {errorString}") def start(self): # 第一步:查询所有可用的显示组,reqId用10 app.queryDisplayGroups(10) # 初始化客户端和包装类 wrap = MyWrapper() app = EClient(wrap) # 连接TWS(实盘端口7496,模拟盘用7497,确保TWS已开启API) app.connect("127.0.0.1", 7496, clientId=123) # 启动API线程 threading.Thread(target=app.run).start() # 等待连接和回调执行 time.sleep(10)
关键逻辑说明
显示组查询与订阅流程
- 连接成功后,
nextValidId回调触发start方法,先调用queryDisplayGroups(10)查询所有显示组 - 通过
displayGroupList回调获取组列表,确认Display Group 1存在后,调用subscribeToGroupEvents(20, 1)订阅该组的更新事件(第二个参数1为目标组ID) - 当Display Group 1内合约发生变化(添加/移除)或数据更新时,
displayGroupUpdated回调会收到合约信息
- 连接成功后,
合约信息解析
contractInfo是分号分隔的键值对字符串,代码中将其解析为字典,方便后续处理- 解析后的数据可存储到列表或DataFrame中,用于后续数据分析或进一步请求行情数据
注意事项
- 确保TWS/IB Gateway的API设置已开启:在TWS中依次点击
编辑->全局配置->API->设置,勾选启用Active X和Socket客户端,并允许本地连接 - 模拟账户需将端口改为7497
- Display Group 1需在TWS中提前创建并添加合约,否则订阅后不会收到更新
- 确保TWS/IB Gateway的API设置已开启:在TWS中依次点击
内容的提问来源于stack exchange,提问作者dinosaurslayer
相关产品推荐
相关产品推荐

