跳转到内容

5 秒线

5 秒线是 TWS API 提供的一种实时行情订阅。它把实时数据按 5 秒聚合成小 K 线,通过 realtimeBar() 回调持续推送。

它适合做盘中监控、轻量图表和实时策略状态更新,不适合回补历史数据。想一次性拿过去几天、几个月的 K 线,应使用历史 K 线接口 reqHistoricalData()

官方参考:5 Second Real Time Bars

项目说明
请求接口reqRealTimeBars()
回调接口realtimeBar()
取消接口cancelRealTimeBars()
固定周期只能是 5 秒
常用类型TRADESMIDPOINTBIDASK
权限要求通常需要对应品种和交易所的实时行情权限
订阅性质持续推送,占用行情行数,必须主动取消
场景是否适合
做盘中 5 秒级监控适合
做分钟级指标前的轻量聚合适合
回补过去几天的 5 秒数据不适合,用历史 K 线
没有实时行情权限的账户通常不适合,可能返回权限错误

历史 K 线是一次性返回过去数据,5 秒线是持续订阅未来数据。程序收到 5 秒线后,要自己决定写入数据库、更新图表或触发策略。

对比项实时 5 秒线历史 K 线
接口reqRealTimeBars()reqHistoricalData()
数据方向订阅之后的新数据指定时间段内的历史数据
周期固定 5 秒可选 1 秒、5 秒、1 分钟、1 天等
结束回调没有固定结束;持续推送historicalDataEnd()
取消方式cancelRealTimeBars(reqId)cancelHistoricalData(reqId)

实时 5 秒线同时受两类限制影响:

限制说明
行情行数每个活跃订阅都会占用市场数据行数,和 TWS 界面报价、其他 API 行情请求共享额度。
新请求频率官方要求 10 分钟内不要发起超过 60 个新的实时 5 秒线请求。批量切换合约、频繁重连时尤其要控制节奏。

如果需要看很多标的,不要为每个标的无限开启 5 秒线。更稳的做法是维护订阅池:用户看得见、策略正在用的合约才保持订阅;离开页面或策略停止时立即取消。

请求 AAPL 5 秒线时,TWS Socket 连接和请求发送正常,但账户缺少对应 API 行情权限:

CONNECTED=True
REQUEST_SENT=True
CANCEL_SENT=True
BAR_ROWS=0
ERROR=reqId=97201;code=420;msg=实时查询无效:No market data permissions for ISLAND STK. 请求的市场数据对于API来说需要额外订阅。点击“市场数据连接”对话框中的链接获取更多详情。
ERROR=reqId=97201;code=300;msg=无法使用tickerId找到EId::97201

这类结果说明调用链路是通的,真正缺的是市场数据权限。300 是取消未建立订阅时的跟随错误,不是根因。代码里必须同时处理 realtimeBar()error(),否则程序会一直等待 bar,看起来像“卡住”。