什么是收盘集合竞价?美股官方收盘价如何确定
收盘集合竞价是什么、为什么美东时间下午 4:00(夏令时对应北京时间次日 04:00)的一笔成交就确定了官方收盘价,以及 MOC 收盘市价单如何汇集成全天最大的一笔交易 —— 全部测自真实成交记录。
收盘集合竞价(closing auction,纳斯达克称之为 closing cross)是美东时间下午 4:00(夏令时对应北京时间次日 04:00)的一笔巨大的集中撮合成交,它确定每只股票的官方收盘价。上市交易所不再逐笔撮合买卖双方,而是整个下午收集标记为收盘的订单,再以同一个价格、在同一笔成交里把整个订单池一次性撮合完毕 —— 与开启一天的开盘集合竞价首尾呼应 —— 而这一条成交记录,在个股上通常就是全天最大的一笔交易。本页的每一个数字都测自合并成交记录(consolidated tape,即全部美股成交的统一公开记录),每个面板都附有生成它的 SQL。
什么是收盘集合竞价?一个大白话定义
在交易时段的大部分时间里,股票是连续交易的:订单到达、撮合、逐笔打印 —— 在最活跃的股票上,每分钟成千上万次。收盘集合竞价是同一条成交记录上的另一套机制。在交易日的最后阶段,上市交易所把所有标记为收盘的订单汇集起来,计算出能让最多股数配对成交的那一个价格,并在美东时间下午 4:00 以一笔交易执行整个订单池。
它像其他任何成交一样打印在公开成交记录上,并带有属于自己的标签 —— 成交条件代码 8,“Closing Prints” —— 而它的价格就成为当晚各处引用的官方收盘价。连续交易市场与集合竞价并不是两个市场;它们是同一条成交记录,而集合竞价是记录上那一行巨大的成交。
收盘集合竞价为什么存在?
收盘价是市场的参考价格。共同基金按官方收盘价计算每日净值,指数公司据此计算基准指数,机构交易台也以它为考核标尺 —— 与VWAP(成交量加权平均价)等指标并列。以收盘价成交的投资者能够精确跟上这些参考基准 —— 而集合竞价正是这个价格被确定的地方:对多数投资者来说,它是唯一一个能确保按该价格成交的场所。
这种吸引力会自我强化。大额订单在买卖两侧聚集,一次集中撮合以最大规模把它们配对,一笔大单以单一价格成交,而不必在连续交易市场里穿越买卖价差 —— 在那里做市商整天双边报价。
真实成交记录上的收盘集合竞价:一笔成交对比中位数成交
下面的面板取 2026 年 7 月 2 日 —— 7 月 4 日假日长周末前的最后一个交易日,一个经过核验的完整交易日(凭证见下一个面板)—— 衡量 SPY、AAPL 和 NVDA 的收盘集合竞价相对于它们成交记录上其余全部成交的规模。“计量成交量”指成交记录自身的记账规则计入合并成交量的股数;行政性重播报文(成交条件 15、16 和 38)在每一个分母中都被剔除,与我们的逐笔微观结构深度解析保持一致;下方的代码字典面板就是凭证。
每个数字背后的完整 SQL
SELECT
ticker,
round(toFloat64(maxIf(size, has(conditions, 8))) / 1e6, 2) AS auction_shares_m,
formatDateTime(toTimeZone(argMaxIf(sip_timestamp, size, has(conditions, 8)), 'America/New_York'), '%H:%i:%S') AS auction_time_et,
countIf(has(conditions, 8)) AS auction_print_count,
countIf(has(conditions, 8) AND formatDateTime(toTimeZone(sip_timestamp, 'America/New_York'), '%H:%i:%S') = '16:00:00') AS auction_prints_at_1600,
round(quantileDeterministicIf(0.5)(toFloat64(size), toUInt64(sip_timestamp), NOT has(conditions, 8) AND NOT hasAny(conditions, [15, 16, 38]))) AS median_trade_shares,
round(toFloat64(maxIf(size, has(conditions, 8))) / quantileDeterministicIf(0.5)(toFloat64(size), toUInt64(sip_timestamp), NOT has(conditions, 8) AND NOT hasAny(conditions, [15, 16, 38])) / 1000) AS auction_vs_median_thousand_x,
round(100 * toFloat64(maxIf(size, has(conditions, 8))) / toFloat64(sumIf(size, NOT hasAny(conditions, [15, 16, 38]))), 1) AS auction_pct_of_volume,
round(toFloat64(maxIf(size, NOT has(conditions, 8) AND NOT hasAny(conditions, [15, 16, 38]))) / 1e6, 2) AS biggest_other_trade_m,
round(toFloat64(maxIf(size, has(conditions, 8))) / toFloat64(maxIf(size, NOT has(conditions, 8) AND NOT hasAny(conditions, [15, 16, 38]))), 2) AS auction_vs_biggest_other_x
FROM global_markets.stocks_trades
WHERE ticker IN ('SPY', 'AAPL', 'NVDA')
AND sip_timestamp >= '2026-07-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'
GROUP BY ticker
ORDER BY indexOf(['SPY', 'AAPL', 'NVDA'], ticker)先看 AAPL 这一行。当天 AAPL 的成交中位数为 20 股。收盘集合竞价在一笔成交里撮合了 10.89 百万股 —— 大约是中位数的 545 千倍 —— 占当天(含延长交易时段)AAPL 全部计量成交量的 14.4%。NVDA 的竞价与中位数之差还要悬殊 —— 成交中位数 5 股,对应一笔 17.38 百万股的集中撮合,是其中位数的 3475 千倍 —— 同时承载了它当天成交量的 12.2%。每只标的都恰好只有一笔集合竞价成交 —— auction_print_count 一列就是凭证 —— 时间戳精确到秒,为美东时间 16:00:00(auction_prints_at_1600 一列固定了这一时点)。
标题里的说法自带凭证。在两只个股上,集中撮合都是全天最大的一笔交易:AAPL 连续交易中最大的一笔为 1.8 百万股,集合竞价是它的 6.05 倍;NVDA 最大的一笔为 5.47 百万股,集中撮合是它的 3.18 倍。SPY 是例外:一笔 2.5 百万股的大宗成交超过了它 1.65 百万股的集中撮合 —— 在成交极其活跃的 ETF 上,单笔大宗交易可以压过集合竞价。SPY 的集合竞价占比也是三者中最小的,为 2.9% —— 但即便如此,它的集中撮合仍是其 25 股成交中位数的 66 千倍。
官方收盘价来自集合竞价,而不是最后一笔跳动
一个常见的误解是:收盘价就是收盘钟声前的最后一笔成交。成交记录并不这么说。下面这份单行凭证覆盖 2026 年 7 月 2 日的 AAPL,并以本文引用的每一个日期的交易时段核验开头:6 月 16 日、6 月 30 日和 7 月 2 日,SPY 分别恰好打印了 390、390 和 390 根常规交易时段分钟 K 线 —— 三个从上午 9:30 到下午 4:00 的完整交易时段,经过核验,而非假定。
每个数字背后的完整 SQL
WITH
(
SELECT countIf(window_start >= toDateTime('2026-06-16 09:30:00', 'America/New_York') AND window_start < toDateTime('2026-06-16 16:00:00', 'America/New_York'))
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-06-16 00:00:00', 'America/New_York') AND window_start < toDateTime('2026-06-17 00:00:00', 'America/New_York')
) AS bars_jun16,
(
SELECT countIf(window_start >= toDateTime('2026-06-30 09:30:00', 'America/New_York') AND window_start < toDateTime('2026-06-30 16:00:00', 'America/New_York'))
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-06-30 00:00:00', 'America/New_York') AND window_start < toDateTime('2026-07-01 00:00:00', 'America/New_York')
) AS bars_jun30,
(
SELECT countIf(window_start >= toDateTime('2026-07-02 09:30:00', 'America/New_York') AND window_start < toDateTime('2026-07-02 16:00:00', 'America/New_York'))
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-07-02 00:00:00', 'America/New_York') AND window_start < toDateTime('2026-07-03 00:00:00', 'America/New_York')
) AS bars_jul02,
(
SELECT maxIf(sip_timestamp, has(conditions, 8))
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL' AND sip_timestamp >= '2026-07-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'
) AS auction_ts,
(
SELECT argMaxIf(exchange, size, has(conditions, 8))
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL' AND sip_timestamp >= '2026-07-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'
) AS listing_exchange
SELECT
bars_jun16 AS spy_session_bars_jun16,
bars_jun30 AS spy_session_bars_jun30,
bars_jul02 AS spy_session_bars_jul02,
countIf(has(conditions, 8)) AS auction_print_count,
toFloat64(argMaxIf(price, size, has(conditions, 8))) AS auction_price,
formatDateTime(toTimeZone(auction_ts, 'America/New_York'), '%H:%i:%S.%f') AS auction_et,
toFloat64(argMaxIf(price, (sip_timestamp, sequence_number), sip_timestamp < auction_ts AND NOT has(conditions, 8) AND NOT hasAny(conditions, [15, 16, 38]))) AS last_tick_price,
formatDateTime(toTimeZone(maxIf(sip_timestamp, sip_timestamp < auction_ts AND NOT has(conditions, 8) AND NOT hasAny(conditions, [15, 16, 38])), 'America/New_York'), '%H:%i:%S.%f') AS last_tick_et,
round((toFloat64(argMaxIf(price, size, has(conditions, 8))) - toFloat64(argMaxIf(price, (sip_timestamp, sequence_number), sip_timestamp < auction_ts AND NOT has(conditions, 8) AND NOT hasAny(conditions, [15, 16, 38])))) * 100, 1) AS auction_minus_last_tick_cents,
countIf(has(conditions, 15)) AS official_close_reprints,
countIf(has(conditions, 15) AND exchange = listing_exchange) AS listing_venue_reprints,
round(toFloat64(anyIf(price, has(conditions, 15) AND exchange = listing_exchange)) - toFloat64(argMaxIf(price, size, has(conditions, 8))), 4) AS listing_reprint_price_difference
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL' AND sip_timestamp >= '2026-07-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'连续交易一直持续到集中撮合触发的那一刻 —— 在这一天,是 16:00:00 之后的零点几秒。AAPL 在集中撮合之前最后一笔计入成交量的连续成交打印于美东时间 16:00:00.215052,价格 308.1 美元;美东时间 16:00:00.373202,集合竞价以 308.63 美元集中撮合成交 —— 比最后那笔跳动高 53 美分。当晚的官方收盘价取自集合竞价的价格,而不是最后一笔跳动。随后成交记录上还出现了 2 条“Market Center Official Close”报文(成交条件 15)—— 它们是各家报送场所对自身官方收盘的记录,而不是对合并收盘价的重播;不同场所可以报出不同的价格。上市交易所的那条报文与集合竞价成交完全一致(差额实测为 0),而且这些报文都不增加成交量。此后交易还会在盘后时段持续四个小时;那些成交同样不会改变官方收盘价。
收盘集合竞价如何运作?收盘市价单与收盘限价单
有两种专用的收盘订单类型为集合竞价供单 —— 此外,已经挂在连续交易订单簿上的普通限价单也可以参与集中撮合:
- 收盘市价单(market-on-close,MOC) 按集合竞价最终确定的价格成交。没有价格保护 —— 这是换取几乎必然以官方收盘价成交的代价(如果一只股票在收盘钟声前处于停牌状态,集中撮合可能不会举行,收盘订单也可能无法成交)。
- 收盘限价单(limit-on-close,LOC) 只有在集合竞价价格达到其限价或更优时才参与集中撮合。有价格保护,但要承担完全错过集中撮合的风险。
两者在集中撮合之前都存放在交易所,在此期间都不在连续交易市场成交。交易所在最后几分钟停止接受或修改收盘订单(具体截止时间因交易所而异,且会随时间调整),多数券商还会自行设定更早的截止时间。到收盘钟声时,订单簿已经锁定,一个价格出清全部订单。
什么是收盘集合竞价失衡(imbalance)?
在集中撮合之前的这段时间里,交易所会发布失衡数据:有多少股在收盘排队买入、多少股排队卖出,以及一个假如此刻撮合会得到的指示性价格。一百万股的买入失衡,意味着有一百万股收盘买单目前尚未配对。连续交易市场的交易者会盯着这些数据,并在最后几分钟据此布局。
季末交易日让收盘集合竞价规模倍增
某些日历日会把当天更多的成交集中到收盘。指数再平衡、到期日,以及月末和季末的基金流动,全都以官方收盘价为准,而这些资金流在集合竞价里相遇。2026 年 6 月 30 日是第二季度的最后一个交易日。下面的面板把每只标的当天的收盘集合竞价,与一个普通的月中交易日 6 月 16 日作对比 —— 两天都已在上面的凭证里核验为完整交易时段。
每个数字背后的完整 SQL
SELECT
ticker,
countIf(has(conditions, 8) AND sip_timestamp < '2026-06-17 00:00:00') AS jun16_auction_print_count,
countIf(has(conditions, 8) AND sip_timestamp >= '2026-06-30 00:00:00') AS jun30_auction_print_count,
round(toFloat64(maxIf(size, has(conditions, 8) AND sip_timestamp < '2026-06-17 00:00:00')) / 1e6, 2) AS jun16_auction_shares_m,
round(toFloat64(maxIf(size, has(conditions, 8) AND sip_timestamp >= '2026-06-30 00:00:00')) / 1e6, 2) AS jun30_auction_shares_m,
round(toFloat64(maxIf(size, has(conditions, 8) AND sip_timestamp >= '2026-06-30 00:00:00')) / toFloat64(maxIf(size, has(conditions, 8) AND sip_timestamp < '2026-06-17 00:00:00')), 1) AS jun30_vs_jun16_x,
round(100 * toFloat64(maxIf(size, has(conditions, 8) AND sip_timestamp < '2026-06-17 00:00:00')) / toFloat64(sumIf(size, NOT hasAny(conditions, [15, 16, 38]) AND sip_timestamp < '2026-06-17 00:00:00')), 1) AS jun16_auction_pct,
round(100 * toFloat64(maxIf(size, has(conditions, 8) AND sip_timestamp >= '2026-06-30 00:00:00')) / toFloat64(sumIf(size, NOT hasAny(conditions, [15, 16, 38]) AND sip_timestamp >= '2026-06-30 00:00:00')), 1) AS jun30_auction_pct
FROM global_markets.stocks_trades
WHERE ticker IN ('SPY', 'AAPL', 'NVDA')
AND ((sip_timestamp >= '2026-06-16 00:00:00' AND sip_timestamp < '2026-06-17 00:00:00')
OR (sip_timestamp >= '2026-06-30 00:00:00' AND sip_timestamp < '2026-07-01 00:00:00'))
GROUP BY ticker
ORDER BY indexOf(['SPY', 'AAPL', 'NVDA'], ticker)AAPL 的季末集合竞价撮合了 21.71 百万股 —— 是它 6 月 16 日那笔 7.49 百万股集合竞价的 2.9 倍 —— 而这一笔成交就占了 AAPL 全天计量成交量的 33.2%。一个交易时段三分之一的成交,在一笔交易里、以一个价格完成。NVDA 的集合竞价从 23.47 百万股增至 41.14 百万股,达到其当天成交量的 24.7%。与 7 月 2 日一样,每只标的每个交易时段都恰好打印一笔集合竞价成交 —— 两列成交笔数就是凭证。这种规模形态,正是相对成交量筛选器存在的意义。SPY 的集合竞价占比在两天都不高(2.7% 和 3.6%)。想看当天完整的交易时段全貌,见我们的 2026 年 6 月 30 日市场复盘;同一个季末周还有一处数据上的怪事,见那个没有报送的季末。
如何识别收盘集合竞价的那笔成交?成交条件代码
哪一笔成交是集合竞价?成交记录自己会说。每一笔成交都带有成交条件代码,而代码字典就存放在同一个数据仓库里 —— 下面的凭证是一条查询,不是一句断言。
每个数字背后的完整 SQL
SELECT
name,
id,
toUInt8(JSONExtractBool(update_rules, 'consolidated', 'updates_volume')) AS counts_toward_volume
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks' AND type = 'sale_condition' AND id IN (8, 15, 16, 38)
ORDER BY id代码 8,“Closing Prints”,标记的就是集合竞价成交本身,字典显示它计入合并成交量(counts_toward_volume = 1)。代码 15,“Market Center Official Close”,是各交易场所对自身官方收盘的行政性报送;字典将其标记为不更新成交量(0)。代码 16 和 38 —— “Market Center Official Open”和“Corrected Consolidated Close (per listing market)” —— 是同一类的开盘记账与更正记账,同样被剔除(0 和 0)。上文的每一个集合竞价数字都按这些代码筛选,而不是按时钟时间;每一个成交量分母都剔除了这三个行政性代码。
FAQ
美股收盘集合竞价几点开始?北京时间是几点?
在美东时间下午 4:00 常规交易时段结束后的片刻,也就是夏令时的北京时间次日 04:00、冬令时的次日 05:00;成交异常繁忙的日子里,这笔成交可能更晚才落地。2026 年 7 月 2 日,SPY、AAPL 和 NVDA 的集合竞价成交时间戳精确到秒,都是美东时间 16:00:00。在排定的提前收盘日,集合竞价改在美东时间下午 1:00 进行(夏令时对应北京时间次日 01:00,冬令时为次日 02:00)—— 日历见美股假日与提前收盘。
什么是 MOC 收盘市价单?
一种按收盘集合竞价最终确定的价格买入或卖出的订单 —— 参与官方收盘几乎是确定的(除非该股在收盘钟声前停牌),但没有价格控制。收盘限价单(LOC)则加上一个限价,只有在集合竞价价格达到该限价或更优时才参与集中撮合。
美股收盘价是当天最后一笔成交价吗?
不是。官方收盘价是集合竞价的价格。2026 年 7 月 2 日,AAPL 在集中撮合之前最后一笔连续成交的价格为 308.1 美元,而集合竞价成交在 308.63 美元 —— 相差 53 美分。盘后时段的成交同样不会改变官方收盘价。
美股为什么临近收盘成交量特别大?
指数基金、共同基金和对标基准的机构按官方收盘价成交,它们的订单汇集到同一次集中撮合。2026 年 7 月 2 日,仅一笔集合竞价成交就占了 AAPL 当天计量成交量的 14.4%;在 6 月 30 日这个季末交易日,同一指标达到 33.2%。
ETF 也有收盘集合竞价吗?
有 —— 每一只挂牌股票和 ETF 都在自己的上市交易所举行集合竞价。集中撮合在 ETF 当天成交中所占的比例往往更小:SPY 在 2026 年 7 月 2 日的集合竞价占其计量成交量的 2.9%,而 AAPL 为 14.4%。
以上每一个数字都由一条已存储、可查验的查询渲染而来 —— 展开任意面板下方的 SQL 即可审核。想把您关注的某只股票的收盘集合竞价拆开来看,可以在 Strasmore 终端上用日常语言提出同样的问题。