IB Python API获取德国股票历史数据权限报错问题咨询
报错原因
你当前使用的SMART智能路由机制会自动将行情请求转发到对应股票流动性最优的交易场所,你报错中提到的BATEDE、CHIXDE等都是德国地区的另类交易系统,你仅订阅了Xetra/法兰克福交易所的权限,请求被路由到未订阅的交易场所就会触发权限不足的提示,和股票本身是否在你订阅的交易所上市无关。
解决方案
你需要主动指定你已经订阅权限的交易场所,不要使用SMART路由,对应配置规则如下:
- 若你订阅的是Xetra板块的行情:
contract.exchange字段填写IBIS(Interactive Brokers对Xetra的内部标识) - 若你订阅的是法兰克福证券交易所主板的行情:
contract.exchange字段填写FWB
除了交易所配置之外,你原有代码还存在几处错误需要同步修正:
contract.symbol = "DAI缺少闭合引号,修改为contract.symbol = "DAI"reqHistoricalData方法中传入的第二个参数是未定义的fx,需要替换为你定义的contract对象- 可以删除
contract.primaryExchange = "SMART"这行冗余配置
修正后的核心代码片段
def start(self): queryTime = "" contract = Contract() contract.symbol = "DAI" contract.secType = 'STK' contract.exchange = 'IBIS' # 若使用法兰克福主板行情则替换为FWB contract.currency = "EUR" app.reqHistoricalData(1, contract, queryTime, "1 D", "1 min", "MIDPOINT", 0, 1, True, [])
内容的提问来源于stack exchange,提问作者micastik
相关产品推荐
相关产品推荐

