如何通过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




