同一只苹果股票,同一个周六中午,三个“最新价”,1万股持仓估值差出 9,500 美元。12月6日起,美股将进入近23小时交易:夜盘数据的5个口径不说清,日K线、收益率、风控和对账都会悄悄算错。本文依据纳斯达克、SEC、DTCC、FINRA 等一手文件,加上30只美股(含9只中概股)的实测数据,给你四样东西:
- 一张“北京时间 × 美股夜盘”全景图(含11月1日夏令时切换前后)
- 5个口径逐条拆解:钱在哪里算错、为什么会错
- 一份可直接发给数据供应商的8问清单
- 3段可运行的 Python 代码
北京时间10月10日周六中午,我调了一次美股快照。苹果(AAPL)同时给了三个“最新价”:

- 336.64:周五常规盘16:00的收盘价
- 336.05:周五盘后19:59的最后一笔
- 337:夜盘价。听起来最新,其实最旧。它停在美东周五凌晨4点,也就是周四晚那段夜盘收尾的时刻;周五晚上没有夜盘,到我查询时它已经停了约20小时。
差几毛钱,有什么关系?换成钱看:
| 你的看板或系统取的是 | 1万股持仓的估值 | 当日涨跌幅(前收 340.42) |
|---|---|---|
| 常规盘收盘价 336.64 | 3,366,400 美元 | −1.11% |
| 盘后价 336.05 | 3,360,500 美元 | −1.28% |
| 夜盘价 337 | 3,370,000 美元 | −1.00% |
同一只票、同一个周六,估值差出 9,500 美元,涨跌幅有三个答案。三个数都没错,错的是不知道自己用的是哪一个。
(价格为作者实测,北京时间2026年10月10日11:55;估值按1万股假设持仓计算。)
取错价还算小事,更贵的是“算了不该算的数”。
2024年8月5日,美股夜盘成交激增。Blue Ocean 方面表示,取消了美东01:45至03:06之间的成交。据 Korea Times 援引韩国金融监督院的数据,被撤销的成交约6,300亿韩元,涉及约9万个账户。韩国券商随后暂停美股日间交易服务,18家券商到2025年11月4日才恢复,停了将近15个月。
这类问题,正在从少数人的问题变成所有人的问题。按计划,纳斯达克12月6日起开设美东21:00至次日04:00的交易时段。从那天起,周一晚上10点成交的一笔交易,要记到周二。
12月6日之后,美股的“一天”会变长。一个夜盘价格要进入你的收益率、估值、风控和对账,必须先答对5个问题,也就是标题里的5个口径(口径,即“这个数按什么规则算”)。答错任何一个,钱就会算错一次,而且系统不会报错。

下文分三部分:为什么是现在 → 5个问题逐个拆 → 怎么办。不写代码的读者,每节读到“先问供应商的一句话”就够了,技术细节可以直接转给技术同事。
第一部分|为什么是现在:美股交易所的一天,计划从16小时延长到近23小时
1. 一天被切成五段,“夜盘”有两个起点
很多数据系统里,美股的一天还是三段:盘前、常规盘、盘后,从美东凌晨4点到晚上8点,共16小时。
但夜盘早就在跑了。Blue Ocean 这类 ATS(另类交易系统)的官方 FAQ 写明,它的时段是周日到周四的美东20:00至次日04:00。按计划,纳斯达克从12月6日起开设21:00至04:00的时段;NYSE Arca、24X National Exchange、Cboe EDGX 也公布了夜盘计划。
于是一天变成五段,“夜盘”有两个起点:ATS 从20:00开始,交易所从21:00开始,中间这一小时是 SIP(美股合并行情)的暂停窗口。
| 时段 | 美东时间 | 北京时间(11月1日前 → 后) | 状态 |
|---|---|---|---|
| 盘前 | 04:00–09:30 | 16:00–21:30 → 17:00–22:30 | 已运行 |
| 常规盘 | 09:30–16:00 | 21:30–次日04:00 → 22:30–次日05:00 | 已运行 |
| 盘后 | 16:00–20:00 | 04:00–08:00 → 05:00–09:00 | 已运行 |
| ATS 夜盘 | 20:00–次日04:00 | 08:00–16:00 → 09:00–17:00 | 已运行 |
| SIP 暂停窗口 | 周一至周四 20:00–21:00 | — → 09:00–10:00 | 12月6日起 |
| 交易所夜盘 | 21:00–次日04:00 | — → 10:00–17:00 | 12月6日起(计划) |
读法:前四段今天就在你的数据里;后两段从12月6日开始,那时美国已结束夏令时,所以“11月1日前”一栏为空。(来源:Blue Ocean 官方 FAQ、纳斯达克通告 ETA2026-46、SEC 批准令 34-105779 / 34-105780;北京时间由作者换算,11月1日起美东比北京晚13小时,此前晚12小时。)
“夜盘”不是一个时段,是几个场所的几套规则。说“夜盘价格”之前,先说清是哪个场所、哪段时间。
对中国读者,这张表还有一层更直接的意思:

A股(09:30–11:30、13:00–15:00)和港股(09:30–12:00、13:00–16:00)的整个交易日,都落在美股夜盘里。你盯A股、看港股的时候,美股夜盘正开着。
我把港股阿里和美股阿里放在一起看过:同一次实测里,BABA.US 的夜盘数据停在北京时间10月9日16:00:00,9988.HK 的快照时间是16:08:08,只差8分8秒。
但它们是两套规则。BABA.US 的名称里写着“每份 ADS 代表8股普通股”,港股快照里则没有盘前、盘后、夜盘这类子对象。币种、交易日归属,甚至“一股”的含义都不一样。(这里只讲规则差异,不比较价格。)
2. 三块多米诺:清算已经倒了,行情和交易所定在同一天

美股延长交易时间,要倒三块多米诺:清算、行情、交易所。
- 清算:已上线。DTCC 2026年6月29日的新闻稿写明,旗下 NSCC 的24×5清算已经上线,运行时间为周日20:00至周五20:00(美东)。
- 行情:已批准,计划12月6日实施。SEC 在2026年6月发布批准令 34-105779(CTA/CQ)和 34-105780(UTP):SIP 周日21:00至周五20:00运行,周一至周四20:00至21:00暂停,前提是市场准备就绪。届时,夜盘将第一次有合并的最优报价和最新成交价;据行业分析,SIP 每天会多出约7小时数据。
- 交易所:计划12月6日。纳斯达克在 ETA2026-46 和之后的 ETA2026-56 中表示,计划开设21:00至04:00时段,目标是一周5天、每天近23小时;其 FAQ 也说明,实际上线取决于 SIP 准备情况和监管变更。
日期也可能会变。Risk.net 在2026年5月报道,LSEG 尚未收到 SIP 最终规格,有业内人士预计可能推迟到2027年初,年底代码冻结期也是原因之一;同一篇报道里,Cboe、纳斯达克、NYSE 对12月6日保持信心。
**日期可能会变,但规则问题不会跟着推迟。**ATS 夜盘今天就在跑,它的数据今天就在你的系统里。12月6日改变的,只是规模和复杂度。
3. 量不大,但离中国团队最近
最可能出现的反对意见是:夜盘量那么小,值得折腾吗?
NSCC 表示,夜间交易量目前约占其总量的1%,确实不大。但“不大”不等于“不重要”。我拿30只标的做了一次样本,用夜盘成交量除以日成交量:

| 分组 | 中位数 | 区间 | 例子 |
|---|---|---|---|
| 中概股 9 只 | 约 0.96% | 0.39%–3.30% | 理想 3.30%,百度 2.90%,阿里 2.65% |
| ETF 6 只 | 约 0.89% | 0.11%–1.56% | QQQ 1.29%,GLD 1.56% |
| 科技股 10 只 | 约 0.23% | 0.10%–0.69% | AAPL 0.21% |
| 中小盘 5 只 | 约 0.07% | 0.05%–0.25% | LCID 0.05% |
读法:组与组之间的差距比单个数字更有意义。这次样本里,中概股夜盘份额的中位数约是科技股的4倍。(作者2026年10月10日实测;夜盘成交量属于10月8日晚至9日凌晨,日成交量属于10月9日,两者不是同一会话,只看量级,不代表全市场。)
换成钱看:这30只票那一晚的夜盘成交额合计约7.2亿美元,其中 QQQ 约2亿美元,阿里约3,500万美元。
需求在哪里?据 Blue Ocean 的 CEO 表示,其日均成交约1.3亿股、约35亿美元,一年前日均约3,000万股;韩国占其业务的比例从约65%降到约35%,仍是亚洲最大市场;公司已设东京办公室,计划设香港办公室。
夜盘的时间,正是亚洲的白天,也是中国团队上班、盯A股和港股的时候。
近期值得放进日历的时间点:Netflix 10月20日、Tesla 10月21日均在美股收盘后发布财报;美联储10月27日至28日开会,28日公布决议;微软10月28日发布财报。这些事件之后的市场反应,会延续到盘后和夜盘,也就是北京时间的白天。(只说时间,不说方向。)
小结:不管12月6日是否如期,夜盘已经在你的数据里了;做中概股、做亚洲用户产品的团队,离它更近。下面看它会在哪5个地方把钱算错。
第二部分|5个问题逐个拆:钱在哪里算错
口径① 这笔成交算哪一天?同一笔夜盘成交,可能有两个日期
日期不是成交自带的,是规则给的。不同系统给同一笔成交的日期,可能差一天。
场景:美东周一22:00,夜盘里成交了一笔。你的日K线、日收益率、持仓日报,要把它归到周一还是周二?

| 日期规则 | 周一22:00这笔成交算哪天 | 依据 |
|---|---|---|
| TRF 日期 | 周一 | 按美东实际成交时刻的日历日期 |
| Blue Ocean 会话日期(FIX Tag 75) | 周二 | 跨过午夜的会话,按结束那天算 |
| 纳斯达克(12月6日起,计划) | 周二 | 21:00 至午夜的成交,归下一交易日 |
| SIP 处理边界 | 周二 | 前一日 20:00 至当日 20:00 算一天 |
读法:TRF 日期和会话日期差一天,不是谁错了,是规则不同。(来源:Blue Ocean 官方 FAQ、纳斯达克 ETA2026-46、SEC 34-105779,核验日期2026年10月10日。)
钱怎么算错:前面那一晚,30只票的夜盘成交额约7.2亿美元。这些钱记在周一还是周二,决定了两天的成交额、收益率和持仓盈亏。日期错一天,日收益、日报、对账就整体错一天,而且不会报错:数据看起来是连续的,只是日期标签和你的交易系统对不上。
先问供应商:“你们返回的日期,是 TRF 日期、会话日期,还是 SIP 的处理边界?”
给技术同事:来源方的日期字段和自己计算的会话日期都要存,不要互相覆盖;日K线用哪套规则写成明确配置,同一指标里不混用。交易日历要把常规交易日和半日市合并:我实测的交易日历接口把11月27日(半日市)放在单独的 half_trade_days 列表里,11月26日(感恩节)不在交易日里,漏掉半日市,日期归属又会错一次。
口径② “最新价”是哪个价?周六看到的夜盘价,是三个里最旧的
字段里有价格,不等于此刻有成交。判断新鲜度,要看每个价格自己的时间戳。
场景:我又拿30只标的检查了一遍:30只全部返回了夜盘数据,价格都不为空;但夜盘时间戳全部是同一刻,美东10月9日04:00,距离查询约20小时。同一批数据里,盘前价停在09:30前后,盘后价停在19:59前后,常规盘停在16:00。每个时段的价格,都停在自己那段时间的最后一刻。
钱怎么算错:开篇已经算过,同一只票、同一个周六,1万股估值能差出9,500美元。看板取错价,用户看到的盈亏就错了;风控取错价,止损线就画错了地方。
为什么:官方收盘价、基金净值和指数再平衡,仍以常规盘的9:30开盘和16:00收盘为准(FactSet 分析;纳斯达克 FAQ 也说明开盘、收盘竞价继续承担官方定价作用)。夜盘价再“新”,也不是官方定价。而一条行情记录里往往同时装着几个时段的数据,系统只取一个“最新价”字段,就会把它们混在一起。
先问供应商:“快照里夜盘价格的时间戳,是最后一笔成交的时刻,还是这个时段结束的时刻?”
给技术同事:价格、成交量、时间必须取自同一个时段对象;判断新鲜度看对象自己的时间戳。第三部分的代码2就是做这件事的。
口径③ 价格来自哪个场所?对不上时,先查场所,再谈对错
两个数据源的夜盘价格不一样,很可能不是谁错了,而是取自不同场所。
场景:你接了两家数据源,凌晨同一时刻两边的夜盘价格对不上,你先怀疑哪一家?
钱怎么算错:这里的钱是人力和时间。你可能花一整天排查,最后发现两个价格来自不同场所;更糟的是,把某一家 ATS 的价格当成“美股夜盘价”写进了对账文件。
为什么:现在美东夜里成交的主要是 Blue Ocean 等 ATS,12月6日以后纳斯达克等交易所计划加入。FINRA 的风险披露写明,延长时段流动性低、波动大、价差宽,不同交易系统显示的价格可能不同;FactSet 也指出,SIP 升级前盘后没有合并行情,ATS 的成交在合并行情之外。在合并行情覆盖夜盘之前,拿两个场所的价格互相对账,本身就不成立。
先问供应商:“这个夜盘价格来自哪个场所?是某一家 ATS、交易所,还是合并行情?”
给技术同事:每条夜盘价格都带上来源场所标签,不同场所的价格不直接比较。12月6日之后如果需要合并行情,先确认 SIP 是否已实际覆盖该时段。
口径④ 这笔成交算不算数?夜盘成交可以被撤销
数据层要能处理“成交了,又没了”。
场景:开篇的2024年8月5日就是例子:约9万个账户的夜盘成交被撤销,金额约6,300亿韩元。
钱怎么算错:如果数据层只会往上累加,撤销消息来了不处理,那笔“已经没了”的成交会一直留在成交量、VWAP(成交量加权均价)和交易信号里,下游的收益率、风控、对账全都带着它继续算。
为什么:迟到成交、撤销和更正都会改变结果,累计成交量还会在时段之间清零;没有修订消息时,聚合结果只能算“暂定”。去重也有坑:两笔真实成交完全可能时间、价格、数量一模一样,去重要靠稳定的事件 ID 或序列号。
先问供应商:“撤销和更正消息怎么发?我能不能在数据里看到一笔成交被撤销?”
给技术同事:区分“新增、撤销、更正”三类消息,聚合结果要能回滚;供应商不提供修订消息的,在报表上标“暂定”。
口径⑤ 时间有没有写死?11月1日起,北京时间的夜盘整体后移一小时
美东时间不是固定的“北京时间减12小时”。夏令时一切换,所有和北京时间挂钩的东西都会错一小时。
场景:你设了个定时任务,每天北京时间08:05抓一次“夜盘开盘后”的数据。11月1日前,ATS 夜盘北京时间08:00开始,没问题;11月1日后,夜盘09:00才开始,任务就抓到了开盘之前。
钱怎么算错:定时任务、看板刷新、值班排班全部错一小时,你还以为是数据源出了问题。
为什么:2026年11月1日美国结束夏令时,美东从比北京晚12小时变为晚13小时。例如:10月30日21:00(美东)是北京时间10月31日09:00;11月2日21:00(美东)是北京时间11月3日10:00。
先问供应商:“你们的时间戳是 UTC,还是带时区的本地时间?”
给技术同事:原始时间统一按 UTC 存,用 America/New_York 切分时段,区间左闭右开,并接交易日历(周末和休市日没有夜盘)。我用交易日历跑了13个边界用例,全部符合规则,例如:
- 周五21:00 → 休市(周六不是交易日)
- 感恩节前夜(11月25日)21:00 → 休市
- 感恩节当晚(11月26日)21:00 → 夜盘,会话日期为11月27日
- 纳斯达克规则下的20:30 → 暂停窗口
- ATS 规则下的20:00 → 夜盘,会话日期是第二天,日历日期是当天
给风控的附加题:没有新价格,有4种原因
价格偏离只进复核队列;“没有新价格”比“价格偏离”更容易误判。
夜里看到一个价格离收盘价很远,先别急着报警。按纳斯达克的计划,12月6日后它的夜盘有一道价格带:订单价格超出参考价上下20%会被拒绝,带宽最小3美元(股价不低于1美元时)或1美元(股价低于1美元时)。这是交易所拒单的边界,不是你的报警阈值。
更容易误判的是“没有新价格”。它在数据上长得一模一样,原因却有好几种:

- 休市:如11月26日感恩节。按纳斯达克规则,周一至周四的法定休市日当晚21:00,可以开启下一交易日的夜盘。
- 暂停窗口:12月6日起,SIP 在周一至周四20:00至21:00暂停。
- 停牌:部分公司行动会触发停牌,纳斯达克用代码“M1”标注。
- 断流:问题出在你自己的连接上。
- 没有成交:排除以上之后剩下的情况,市场开着,只是没人成交。
先问供应商:“停牌、暂停窗口、休市和没有成交,在你们的数据里分别怎么表示?”
给技术同事:先用交易日历和时段标签排除休市、暂停窗口,再看停牌标记,剩下的才是“没有成交”。“无更新”和“断流”要结合连接状态和其他活跃标的分开判断,别把市场的沉默当成自己的断线。
5个问题,一张表收齐
| 问题 | 一句话答案 | 先问供应商 |
|---|---|---|
| ① 算哪一天 | 同一笔成交可能有两个日期 | 返回的是哪种日期? |
| ② 哪个最新价 | 看每个价格自己的时间戳 | 时间戳是最后成交还是时段结束? |
| ③ 哪个场所 | 对不上先查场所 | 价格来自哪个场所? |
| ④ 算不算数 | 要能处理撤销和更正 | 撤销消息怎么发? |
| ⑤ 时间写死没 | UTC 存储,按美东时区切分 | 时间戳是不是 UTC? |
第三部分|怎么办:12月6日前要做完的三件事
1. 每个角色要做的决定不一样
| 角色 | 12月6日前要决定的事 |
|---|---|
| 老板 | 现有行情合同是否覆盖延长时段;数据量怎么扩容(SIP 每天多出约7小时数据);夜间值班人力怎么排;按“可能推迟”准备两套计划 |
| 产品经理 | 看板“最新价”显示哪一个;夜盘价要不要标时间;非夜盘时段显示旧值还是留空 |
| 量化和投研 | 日K线用哪套日期规则;收益率按哪个收盘价算;回测交易日历是否包含半日市和节假日前夜 |
| 风控 | 夜盘价格偏离怎么复核;撤销和更正怎么进监控;休市、暂停窗口、停牌、没有成交怎么区分 |
| 商务和采购 | 供应商能否讲清日期规则和来源场所;合同里的时段覆盖写到什么程度;答不清的条款能否进生产环境 |
读法:找到自己那一行,每一行都是一个要拍板的决定。(依据:纳斯达克 ETA2026-46、SEC 34-105779 / 34-105780、DTCC 新闻稿、Risk.net 报道,核验日期2026年10月10日。)
老板那一行最容易漏的是“两套计划”。12月6日可能如期,也可能推迟;按推迟准备不是悲观,而是让数据系统在日期变化时不用推倒重来。
还要算一笔账。自己搭一套能区分时段的数据系统,要持续维护这些事:
- 两种夜盘起点(20:00 和 21:00),以及 SIP 的 20:00 日界
- 交易日历,包括节假日前夜和半日市
- 每年两次的夏令时切换
- 撤销和更正消息
- 每个时段各自的时间戳和成交量
- 12月6日之后还会继续变化的规则和场所
这不是写一次就完的代码。规则还在变,场所还在加,日期还可能推迟,每一次变化都要有人跟。
2. 发给供应商的8个问题:答不清的条款不进生产环境
合同里写一句“覆盖美股行情”,不等于写清了夜盘怎么算。下面8个问题,可以直接复制给供应商:
| 要问的方面 | 我会这样问 | 答不清的后果 |
|---|---|---|
| 标的范围 | 夜盘覆盖哪些标的?全部美股,还是部分? | 以为全覆盖,实际有一批标的没有夜盘数据 |
| 夜盘起点和节假日 | 夜盘从20:00还是21:00开始?节假日前夜怎么安排? | 日期归属错一天,节假日出现空数据 |
| 日期规则 | 返回的是 TRF 日期、会话日期,还是 SIP 处理边界? | 日K线、日收益率、对账整体错一天 |
| 来源场所 | 夜盘价格来自哪个 ATS、哪个交易所,还是合并行情? | 拿不同场所的价格对账,排查方向全错 |
| 快照还是逐笔 | 给的是快照还是逐笔成交?时间戳代表哪一刻? | 把旧值当最新价 |
| 撤销和更正 | 撤销和更正消息怎么发?能否看到一笔成交被撤销? | 成交量、VWAP、信号里留着已撤销的成交 |
| 非夜盘时段 | 非夜盘时段返回旧值、空值,还是不返回? | 缺失被当成零成交,覆盖率虚高 |
| 合同覆盖 | 现有合同是否覆盖延长时段?扩容怎么计费? | 上线后才发现合同不覆盖,临时补条款 |
读法:答不清的那一行,就是你的风险点。不要求每项都答“支持”,但要求每项都答得清楚。(依据:FINRA 延长时段风险披露、Blue Ocean 官方 FAQ、纳斯达克 ETA2026-46、SEC 34-105779 / 34-105780。)
验收时可以用一个覆盖率公式:预期有夜盘数据的标的集合记为 U,实际通过检查的集合记为 V,覆盖率 = U∩V ÷ U。没有可靠的预期清单时,覆盖率应显示“不可计算”,而不是默认100%。
3. 三段代码,把时段、日期和新鲜度写进数据系统
以下内容建议转给技术同事。
TickDB 为开发者和 AI 应用提供统一的全球行情数据接口,让团队通过一套接入获取多市场实时与历史数据,更快构建行情、分析和监控产品。
前面这些检查,我用 TickDB 的快照接口跑了一遍。快照返回的 data 是列表;美股的盘前、盘后、夜盘数据分别在 pre_market_quote、post_market_quote、overnight_quote 三个对象里。夜盘对象的子字段有 last_done(字符串)、timestamp(13位毫秒整数)、volume(整数)、quote_volume(字符串)、high、low、prev_close。顶层没有标注时段的字段,不能靠顶层判断一条数据属于哪个时段。
| 能做到的 / 边界 | 怎么验证 |
|---|---|
| 盘前、盘后、夜盘分成三个独立对象,各带自己的时间戳 | 周六调一次美股快照,看三个对象的时间 |
| 美股夜盘和港股用同一个快照接口 | 分别调用 BABA.US 和 9988.HK,对比时间戳 |
| 边界:这次30只标的的夜盘时间戳全部精确等于美东 04:00:00.000,连当晚只成交3,324股的 LCID 也一样(盘前、盘后时间戳则各不相同)。夜盘时间戳更像时段结束时刻,而非最后一笔成交时刻 | 用它判断新鲜度可以;推断最后成交时间前,先向供应商确认 |
| 边界:文档未说明夜盘数据来自哪个场所;本文只验证了快照接口 | — |
读法:前两行是这次实测能证明的,后两行是边界;不要据此推断全市场、全时段的数据完整,也不要据此判断价格最优。(作者2026年10月10日实测,标的包括 AAPL、BABA.US、9988.HK 等30余只。)
做与不做的差别:不做,日K线错一天、白查一个不存在的故障、错误日期流进收益、风控和对账;做了,代码2用对象自己的时间戳判断新鲜度,代码3把时段标签和会话日期写进信号层,上一节的8个问题让每家供应商按同一套标准回答。
一个场景:一位做中概股看板的产品经理,工作日北京时间晚上11点多(美股常规盘正在交易)用代码2一查,发现看板上的“夜盘价”还停在下午4点,已经是将近8小时前的数,于是把显示改成“夜盘(截至16:00)”。这个场景来自2026年10月9日23:48的一次实测:夜盘对象停在北京时间16:00,比顶层时间早约7.8小时。
代码1:拉取美股快照,同时检查 HTTP 状态和业务返回码
import os
import requests
API_KEY = os.environ["TICKDB_API_KEY"] # 不要把 key 写死在代码里
resp = requests.get(
"//api.tickdb.ai/v1/market/ticker",
params={"symbols": "AAPL.US,MSFT.US,NVDA.US", "type": "stock"}, # 单次最多50个
headers={"X-API-Key": API_KEY},
timeout=10,
)
resp.raise_for_status()
body = resp.json()
if body.get("code") != 0:
raise RuntimeError(f"业务返回异常: {body}")
items = body.get("data") or []
代码2:区分“不存在、为空、为零”,并算出夜盘数据距今多少小时
import time
OVERNIGHT_FIELDS = {"price": "last_done", "time": "timestamp", "volume": "volume"}
def read_field(obj, key):
if not isinstance(obj, dict) or key not in obj:
return "MISSING", None
value = obj[key]
if value is None or value == "":
return "EMPTY", None
try:
if float(value) == 0: # last_done 是字符串,volume 是整数
return "ZERO", value
except (TypeError, ValueError):
return "INVALID", value
return "VALUE", value
def age_hours(obj, now_ms):
state, ts = read_field(obj, "timestamp")
return round((now_ms - ts) / 3_600_000, 1) if state == "VALUE" else None
now_ms = int(time.time() * 1000)
for item in items:
overnight = item.get("overnight_quote")
for name, key in OVERNIGHT_FIELDS.items():
print(item.get("symbol"), name, *read_field(overnight, key))
print(item.get("symbol"), "夜盘数据距今(小时)", age_hours(overnight, now_ms))
代码3:按场所打时段标签,同时给出“会话日期”和“日历日期”
from datetime import datetime, time, timedelta, timezone
from zoneinfo import ZoneInfo
NY = ZoneInfo("America/New_York")
# 不同场所的夜盘起点不同:ATS 常见 20:00,纳斯达克计划 21:00
VENUE_OVERNIGHT_START = {"ATS_2000": time(20, 0), "NASDAQ_2100": time(21, 0)}
def label(ts_ms, venue, trading_days):
"""返回 (时段, 会话日期, 日历日期)。
trading_days:按交易日历生成的日期集合(常规交易日和半日市要合并)。
半日市提前收盘未处理,生产环境需补上。"""
t = datetime.fromtimestamp(ts_ms / 1000, tz=timezone.utc).astimezone(NY)
c, d = t.time(), t.date()
if c >= VENUE_OVERNIGHT_START[venue]:
nd = d + timedelta(days=1) # 晚间这段属于"下一个日历日"的夜盘
return ("OVERNIGHT", nd, d) if nd in trading_days else ("CLOSED", None, d)
if d not in trading_days:
return ("CLOSED", None, d)
if c < time(4, 0):
return ("OVERNIGHT", d, d)
if c < time(9, 30):
return ("PRE", d, d)
if c < time(16, 0):
return ("REGULAR", d, d)
if c < time(20, 0):
return ("POST", d, d)
return ("GAP", None, d) # 例如纳斯达克规则下的 20:00–21:00 暂停窗口
以上代码只检查接入层行为,结果只说明本次调用的情况,不代表全市场、全时段的数据完整,也不代表价格最优;代码3是示范,不是交易所、SIP、TRF、ATS 通用的正式算法。
常见问题
1. 美股夜盘是北京时间几点?
ATS 夜盘为美东20:00至次日04:00,11月1日前对应北京时间08:00–16:00,之后对应09:00–17:00。纳斯达克计划的21:00至04:00,12月6日起对应北京时间10:00–17:00。具体以各场所规则为准。
2. 12月6日以后,美股是24小时交易吗?
不是。纳斯达克计划的是一周5天、每天近23小时:周一至周四20:00至21:00是 SIP 暂停窗口,周末不交易。实际上线取决于 SIP 准备情况和监管变更。
3. 夜盘成交算哪一天的交易?
看规则。纳斯达克计划把21:00至午夜的成交归下一交易日;TRF 日期按美东实际成交时刻算;Blue Ocean 会话日期按会话结束那天算;SIP 处理边界是前一日20:00至当日20:00。
4. 夜盘价格可以当收盘价用吗?
不建议。官方收盘价、基金净值和指数再平衡,仍以常规盘16:00收盘为准。夜盘价格可能来自不同场所,流动性低、价差宽,不同系统显示的价格可能不同。
5. 选美股夜盘数据,要先问供应商什么?
先问六件事:日期规则、来源场所、快照还是逐笔、撤销和更正怎么处理、非夜盘时段返回什么、合同是否覆盖延长时段。答不清的条款,不进生产环境。
最后一个问题
12月6日也许会推迟,但“一个交易日是什么”这个问题,不会再回到过去。
你们团队现在的日K线,切在哪个时间点?
今天就能做的一件事:找一个工作日,北京时间上午10点和晚上11点各调一次你们数据源的美股快照,看看两次的“夜盘价”,时间戳分别是哪一刻。
参考资料
访问日期均为2026年10月9–10日。
- Nasdaq Trader,ETA2026-46、ETA2026-56
- Nasdaq,23/5 Trading FAQ
- SEC,Release 34-105779(CTA/CQ)、34-105780(UTP)
- DTCC,NSCC 延长清算时间新闻稿(2026-06-29)
- Blue Ocean,官方 FAQ(运行时段;除息日前后的会话日期与 TRF 日期)
- FINRA,延长时段交易风险披露
- FactSet,24/5 交易对数据系统的影响
- Risk.net,关于24小时交易上线日期的报道(2026年5月)
- Korea Times,2024年8月8日、2025年11月4日相关报道;Markets Media,2024年8月相关报道
- 美联储2026年议息日历;Netflix、Tesla、微软投资者关系页
- TickDB,行情快照接口文档及作者实测记录

