Python调用IB API/TWS出现ERROR 508重复ticker id报错如何解决
报错原因
Duplicate ticker id报错由重复使用同一reqId发起请求触发,你代码里的问题出在行情请求逻辑:
- 你将
reqMktData(508, spystock_contract, "", False, False, [])放在了while循环内部,只要spyprice还没拿到返回值,程序就会每隔0.5秒用同一个reqId=508重复发起行情请求 - IB API要求同一条连接下所有请求的reqId必须全局唯一,第一次请求已经占用了id 508,第二次请求直接触发重复id错误
- 你后续账户余额的请求逻辑也有同样的重复调用问题,只是暂时没触发报错
修复方案
将请求调用挪到循环外部,循环仅做等待返回的逻辑,不要重复发起请求,对应修改代码如下:
# 仅发起一次SPY行情请求 app.reqMktData(508, spystock_contract, "", False, False, []) while not getattr(app, 'spyprice', None): time.sleep(0.5) print("SPY的开盘价为:$" + str(app.spyprice)) # 仅发起一次账户余额请求 app.reqAccountSummary(131, "All", "$LEDGER:USD") while not getattr(app, 'USD_cash_balance', None): time.sleep(0.5) print("我的美元账户余额为:" + str(app.USD_cash_balance))
补充说明
- 后续新增其他IB API请求时,注意reqId不要和已使用的1、131、508重复即可
- 如果需要主动终止某个行情推送,可调用
cancelMktData(reqId)释放对应的reqId资源
内容的提问来源于stack exchange,提问作者Bryce Turner
相关产品推荐
相关产品推荐

