返回日期格式
formatDate 控制历史 K 线返回的日期格式。它影响 BarData.date 字段,也会影响你后续如何解析和保存 K 线。
formatDate | 含义 | 新手建议 |
|---|---|---|
1 | 返回可读字符串时间 | 调试时最直观 |
2 | 返回 Unix 时间戳风格 | 程序化存储更方便 |
使用 formatDate=1,AAPL 5 分钟线返回类似:
20260612 09:30:00 US/Eastern使用 formatDate=2 请求 AAPL 小时线,返回的是 Unix 秒级时间戳。本次验证中,2 D + 1 hour 返回 14 根 K 线:
BAR_TOTAL_COUNT=reqId=4102;name=aapl_1hour_unix;count=14BAR=reqId=4102;date=1781184600;open=293.71;high=293.95;low=290.37;close=291.59;volume=3422903;wap=292.438;barCount=30066日线或更大周期的 date 可能只包含日期,不一定带完整时间。代码里不要假设所有 bar 的日期格式完全一样。
def historicalData(self, reqId, bar): """接收历史 K 线,并保留 TWS 原始日期字符串。""" row = { "reqId": reqId, "date": bar.date, "open": float(bar.open), "high": float(bar.high), "low": float(bar.low), "close": float(bar.close), "volume": int(bar.volume), } print(row)第一版程序建议先保存原始 bar.date,再在清洗层统一转换时区。这样排查问题时可以对照 TWS 原始输出。
时区注意事项
Section titled “时区注意事项”历史 K 线时间通常和 TWS 登录、交易所、请求格式有关。不要简单用电脑所在时区覆盖返回值。对于美股这类跨时区品种,建议在入库时额外保存:
| 字段 | 作用 |
|---|---|
raw_date | TWS 原始返回 |
exchange_timezone | 交易所时区,例如 US/Eastern |
utc_time | 统一换算后的 UTC 时间 |
local_time | 页面展示时再换算成本地时间 |
这样后续做回测、画图和结果对照时不会混淆。