无法通过Interactive Brokers API获取历史数据,报200合约定义错误求助
问题解决:IB API获取历史数据报错200(无合约定义)
核心问题:用了过期的合约代码
你代码里写的localSymbol = "ESZ7"是2017年12月到期的ES期货合约,早就退市了,IB系统里已经没有这个合约的记录,所以报了"无合约定义"的错误。
修复方案
方案1:替换为当前活跃合约代码
查IB的合约列表,找到当前正在交易的ES合约(比如2024年12月的是ESZ4),把localSymbol换成这个代码:contract.localSymbol = "ESZ4" # 改成当前有效的合约代码方案2:让IB自动匹配合约(更省心)
不用手动写localSymbol,而是指定合约到期年月,IB会自动帮你找到正确的合约:contract = Contract() contract.symbol = "ES" contract.secType = "FUT" contract.exchange = "GLOBEX" contract.currency = "USD" contract.lastTradeDateOrContractMonth = "202412" # 格式是YYYYMM,比如2024年12月就写202412方案3:用IB的合约工具确认参数
在TWS或者IB Gateway里,打开「合约搜索」工具,找到ES期货的准确参数,确保代码、到期日这些信息完全正确。
关于授权的疑问
你能看实时数据,说明期货数据的基础授权已经开通,历史数据不需要额外激活授权,这次报错和授权没关系,就是合约代码错了。
内容的提问来源于stack exchange,提问作者Django
相关产品推荐
相关产品推荐

