You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Interactive Brokers TWS API Python获取交易日信息?

获取Interactive Brokers TWS API的交易日与交易时段信息

嘿,我来帮你搞定这个问题——新版TWS API确实能获取交易所的休市状态和具体交易时段,只是这块内容在官方文档里不算特别显眼,我给你梳理几个实用的方法:

方法1:用reqMarketHours()获取指定日期的交易时段

这个API方法是专门用来查询单个或多个日期的市场交易时段的,还能直接判断当日是否休市。

核心逻辑:

  • 先通过reqContractDetails()获取目标合约的conId(合约ID),或者直接构造完整的合约对象
  • 调用reqMarketHours(),传入合约ID、起始日期和结束日期(格式为YYYYMMDD
  • 返回的MarketHours对象里会包含:
    • 当日是否休市的标识
    • 不同交易时段的开始/结束时间(注意是UTC时区,需要自行转换为当地时间)

Python(ib_insync库)示例代码:

from ib_insync import IB, Contract

# 连接TWS(注意端口号要和你的TWS设置一致,实盘账户用7496)
ib = IB()
ib.connect('127.0.0.1', 7497, clientId=1)

# 构造目标合约(这里以CME的标普500期货为例)
es_contract = Contract()
es_contract.symbol = 'ES'
es_contract.secType = 'FUT'
es_contract.exchange = 'CME'
es_contract.currency = 'USD'
es_contract.lastTradeDateOrContractMonth = '202409'

# 获取2024年8月1日的市场时段
market_hours = ib.reqMarketHours(es_contract.conId, '20240801', '20240801')

# 解析返回结果
for date, hours in market_hours.items():
    if hours.isOpen:
        print(f"{date} 开市,交易时段(UTC):")
        for session in hours.sessions:
            print(f"- {session.start} 至 {session.end}")
    else:
        print(f"{date} 休市")

ib.disconnect()

方法2:用reqHolidayList()获取交易所假期列表

如果需要批量查询某段时间内的所有休市日期,可以用这个方法,直接拿到指定交易所的假期清单。

示例代码(Python):

from ib_insync import IB

ib = IB()
ib.connect('127.0.0.1', 7497, clientId=2)

# 查询CME交易所2024年全年的假期
holiday_list = ib.reqHolidayList('CME', '20240101', '20241231')

print("CME 2024年休市日期:")
for holiday in holiday_list:
    print(f"- {holiday.date}:{holiday.description}")

ib.disconnect()

注意事项:

  • 确保你的TWS软件和API客户端是较新版本,旧版本可能不支持这些方法
  • 在TWS的API设置里,要开启“Active X and Socket Clients”权限,并且允许本地连接
  • 所有返回的时间都是UTC时区,记得根据你的需求转换为当地时间(比如用pytz库处理)
  • 不同交易所的合约参数要准确填写,否则会返回错误的时段信息

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

火山引擎 最新活动