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

使用Interactive Brokers无法获取外汇历史数据求助

解决IB获取EUR/USD历史数据的Error 162问题

错误原因分析

你碰到的Error 162是IB提示无对应合约的历史数据,核心问题出在这几个细节:

  • whatToShow='ADJUSTED_LAST':这个参数是给股票复权收盘价设计的,外汇现金合约(CASH)不支持该选项
  • useRTH=True:外汇是24小时交易品种,常规交易时间(RTH)覆盖范围极小,开启后会导致大部分时间段无数据
  • 部分barSize与duration的组合可能不在IB历史数据的覆盖范围内

修复后的代码

直接调整关键参数,同时保留正确的合约设置,修改后代码如下:

import datetime
from ib_insync import *

if __name__ == '__main__':
    ib = IB()
    # 连接IB网关/TWS,注意端口:实盘用7496,模拟盘用7497
    ib.connect('127.0.0.1', port=7497, clientId=1)
    
    # EUR/USD现金合约设置无需修改
    contract = Contract()
    contract.symbol = "EUR"
    contract.secType = "CASH"
    contract.currency = "USD"
    contract.exchange = "IDEALPRO"

    # 修正历史数据请求参数
    data = ib.reqHistoricalData(
        contract=contract,
        endDateTime='',  # 为空默认取最新数据
        durationStr='100 D',
        barSizeSetting='30 mins',
        useRTH=False,  # 关闭常规交易时间限制,获取24小时全时段数据
        whatToShow='LAST',  # 外汇可选LAST/BID/ASK,按需选择
        keepUpToDate=False  # 不需要实时更新时设为False
    )
    
    # 打印前5条数据验证结果
    if data:
        print(data[:5])
    ib.disconnect()

额外注意事项

  • 若仍报错,先检查IB Gateway/TWS是否已登录,且账户具备外汇数据访问权限(模拟账户默认开通,实盘需确认是否订阅对应数据)
  • 避免使用冷门的barSize+duration组合,比如1分钟数据对应duration建议不超过7天,IB对不同周期的数据保留时长有明确限制
  • 可尝试将whatToShow替换为BID或ASK,确认是否能正常获取数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:01:18