ITPub博客

首页 > IT职业 > IT生活 > 美股api的流式推送中,如何区分盘中、盘后和盘前交易时段

美股api的流式推送中,如何区分盘中、盘后和盘前交易时段

原创 IT生活 作者:数据日志簿 时间:2026-06-26 18:24:12 0 删除 编辑

做美股行情接入几年,我发现流式推送的 tick 数据里,最容易被忽略的其实是交易时段。刚开始接入美股api时,看到一堆连续跳动的价格,不清楚是盘前还是盘后,导致策略回测和实时处理出现偏差。慢慢地,我摸索出一些方法,把不同交易阶段区分开,既可以保证数据使用的准确性,也方便做多标的同时订阅和处理。

美股交易时段结构

美股市场的交易阶段主要分为盘前、盘中和盘后三类,每个时段的行为特征都不一样。在流式行情里,这些界限不会自动标注,需要自己通过时间或状态字段判断。

时段

美东时间

行为特征

盘前

04:00 - 09:30

成交稀疏,价格跳动明显

盘中

09:30 - 16:00

成交密集,价格连续

盘后

16:00 - 20:00

事件驱动,波动不均

这些时间区间是最基础的参考,结合实际 tick 数据,可以给每条行情打上对应的阶段标签。

流式数据里的识别字段

大部分美股api在推送 tick 数据时,会带时间戳,部分接口还会提供交易状态字段。时间戳是最通用的方式,把 UTC 转成美东时间后直接判断时段就可以。交易状态字段则更直观,例如 PRE、REGULAR、AFTER,看到字段就能知道当前 tick 所属阶段。在实践中,我通常用状态字段做优先判断,再用时间戳校验,避免跨时区带来的误差。

实战代码示例

以AllTick API为例,WebSocket 推送里每条 tick 都有时间戳和价格字段,可以直接用时间戳做阶段归类:

import websocket
import json
from datetime import datetime, timezone, timedelta

def classify (ts):
    est = datetime.fromtimestamp(ts, timezone(timedelta(hours= -5 )))
    h = est.hour + est.minute / 60
    if 4 <= h < 9.5 :
        return "pre-market"
    if 9.5 <= h < 16 :
        return "regular"
    return "after-hours"

def on_message (ws, message):
    data = json.loads(message)
    ts = int(data[ "timestamp" ])
    period = classify(ts)
    print(data[ "symbol" ], data[ "price" ], period)

ws = websocket.WebSocketApp(
    "wss://apis.alltick.co/stock-websocket-api/transaction-quote-subscription" ,
    >
)
ws.run_forever()

这种方式无需依赖额外字段,只靠时间戳就能完成基础分段,适合多标的同时订阅,保持逻辑一致。

时区和夏令时影响

美股时间看似固定,但夏令时会让 UTC 偏移变化。如果直接写死 -5 小时,部分月份会出现误差。使用时区库映射美东时间,可以让系统自动处理偏移。在多市场接入场景下,这一点尤其重要,不然 tick 数据对齐容易出偏差。

不同阶段的行情特征

盘前成交稀少,价格跳动明显,但连续性差。盘中成交密集,价格连续,是大多数策略的核心数据源。盘后更多受新闻或事件驱动,价格波动不均。把这些阶段拆开处理,可以分别应用不同逻辑,而不是统一计算。

行情流里的规律

流式美股api数据看起来只是不断推送价格,其实背后每个阶段的“行为结构”差异很大。同一个标的在不同交易阶段,波动模式、成交密度、价格连续性都不一样。把时段识别嵌进去之后,后续指标或策略触发会更稳定。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70048654/viewspace-3174701/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2025-12-10

  • 博文量
    47
  • 访问量
    46179