You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

关键逻辑说明

  1. 显示组查询与订阅流程

    • 连接成功后,nextValidId回调触发start方法,先调用queryDisplayGroups(10)查询所有显示组
    • 通过displayGroupList回调获取组列表,确认Display Group 1存在后,调用subscribeToGroupEvents(20, 1)订阅该组的更新事件(第二个参数1为目标组ID)
    • 当Display Group 1内合约发生变化(添加/移除)或数据更新时,displayGroupUpdated回调会收到合约信息
  2. 合约信息解析

    • contractInfo是分号分隔的键值对字符串,代码中将其解析为字典,方便后续处理
    • 解析后的数据可存储到列表或DataFrame中,用于后续数据分析或进一步请求行情数据
  3. 注意事项

    • 确保TWS/IB Gateway的API设置已开启:在TWS中依次点击编辑->全局配置->API->设置,勾选启用Active X和Socket客户端,并允许本地连接
    • 模拟账户需将端口改为7497
    • Display Group 1需在TWS中提前创建并添加合约,否则订阅后不会收到更新

内容的提问来源于stack exchange,提问作者dinosaurslayer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:23:33