什么是收盘竞价和收盘交叉
了解收盘竞价如何在美东时间下午4:00以一次撮合确定官方收盘价,以及收盘订单如何促成全天最大成交,并查看真实行情数据。
收盘竞价(Nasdaq称其为收盘交叉)是美东时间下午4:00进行的一笔巨额撮合交易,并据此确定每只股票的官方收盘价。上市交易所不会逐笔撮合买卖双方的订单,而是在整个下午收集收盘订单,随后以一个价格撮合全部订单,并生成一笔成交记录。这是开启交易日的开盘竞价的对应环节。在个股中,这笔交易的成交量通常是全天最大的。页面上的所有数据均来自综合行情记录,即所有美国股票交易的统一公开记录。每个面板均附有完整的 SQL 查询。
什么是收盘竞价?通俗定义
在大部分交易时段内,股票连续交易:订单不断到达、撮合并逐笔成交。在最活跃的股票中,每分钟可能成交数千次。收盘竞价是同一交易系统上的另一种机制。在当天交易的最后阶段,上市交易所会汇总所有标记为收盘交易的订单,计算出能够撮合最多股数的单一价格,并在美国东部时间下午 4:00 将全部订单汇总为一笔交易执行。
这笔成交会像其他交易一样显示在公开行情中,并带有专属标签,成交条件为 8“Closing Prints”。其价格将成为当晚各处引用的官方收盘价。连续交易市场与竞价并不是两个市场;它们属于同一交易系统,而竞价只是其中一笔规模巨大的成交。
为什么会有收盘竞价?
收盘价是市场的参考价格。共同基金根据官方收盘价计算每日净资产值,指数提供商据此计算基准指数,机构交易台也以此作为业绩评估基准,同时还会参考VWAP,即成交量加权平均价格等指标。投资者按收盘价成交,就能准确跟踪所有这些参考指标。收盘竞价正是确定该价格的机制。对大多数投资者而言,这是唯一能够确保按该价格成交的交易场所。
这种吸引力会进一步自我强化。买卖双方都会集中大额订单,由一次撮合以最大成交量完成交易。这样,大额订单可以按单一价格成交,而不必像在连续交易市场中那样逐档吃掉买卖价差。在连续交易市场中,做市商全天为买卖双方报价。
真实成交记录中的收盘竞价:单笔成交与中位数成交
下表采用2026年7月2日的数据。这是7月4日假期周末前的最后一个交易日,也是经核实的完整交易日(下一面板提供凭证)。下表将SPY、AAPL和NVDA的收盘竞价与其成交记录中的其他交易进行比较。“匹配成交量”是指根据成交记录自身的统计、计入合并成交量的股票数量;行政性重播(成交条件15、16和38)从所有分母中剔除,与我们的逐笔微观结构深度分析一致;下方的代码字典面板即为凭证。
| ticker | 竞价成交股数(百万) | 竞价时间(ET) | 竞价成交笔数 | 16:00竞价成交笔数 | 交易股数中位数 | 竞价与中位数(千倍) | 竞价成交量占比 | 最大其他交易(百万) | 竞价与最大其他交易倍数 |
|---|---|---|---|---|---|---|---|---|---|
| SPY | 1.65 | 16:00:00 | 1 | 1 | 25 | 66 | 2.9 | 2.5 | 0.66 |
| AAPL | 10.89 | 16:00:00 | 1 | 1 | 20 | 545 | 14.4 | 1.8 | 6.05 |
| NVDA | 17.38 | 16:00:00 | 1 | 1 | 5 | 3475 | 12.2 | 5.47 | 3.18 |
每个数字背后的完整 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 ET(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,并先对本文固定的每个日期进行交易时段检查:SPY 在6月16日、6月30日和7月2日的正常交易时段,分别记录了恰好 390、390 和 390 根分钟线。这三段9:30至16:00的完整交易时段均已核实,并非假定。
| SPY 6月16日交易时段K线 | SPY 6月30日交易时段K线 | SPY 7月2日交易时段K线 | 竞价成交笔数 | 竞价价格 | 竞价时间(ET) | 最后一笔价格 | 最后一笔时间(ET) | 竞价减最后一笔(美分) | 官方收盘价重报 | 上市场所重报 | 上市重报价差 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 390 | 390 | 390 | 1 | 308.63 | 16:00:00.373202 | 308.1 | 16:00:00.215052 | 53 | 2 | 1 | 0 |
每个数字背后的完整 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),这些消息均未增加成交量。交易在盘后交易时段继续进行四小时,但这些成交同样不会改变官方收盘价。
收盘竞价如何运作?收盘市价单与收盘限价单
两种专用收盘订单类型会进入竞价,与已在连续交易簿中挂出的普通限价单共同参与集合竞价:
- 收盘市价单(MOC)按竞价确定的任何价格成交。该订单没有价格保护,换取的是几乎可以保证按官方收盘价成交(如果股票在收盘铃响前停牌,集合竞价可能不会进行,收盘订单也可能无法成交)。
- 收盘限价单(LOC)仅在竞价价格等于或优于其限价时参与竞价。该订单具有价格保护,但也有完全无法参与集合竞价的风险。
这两类订单都会留在交易所,直到集合竞价进行;在此之前,二者都不会在连续交易市场中成交。交易所会在最后几分钟停止接受或修改收盘订单(具体截止时间因交易所而异,也会随时间调整),而大多数券商还会自行设定更早的截止时间。收盘铃响时,订单簿已锁定,并由一个价格完成撮合。
什么是收盘竞价失衡?
在集合竞价前,交易所会公布失衡数据:收盘时排队买入和卖出的股票数量,以及当时能够完成撮合的指示性价格。买方失衡一百万股,意味着截至当时仍有一百万股收盘买单未找到匹配卖单。连续交易市场的交易者会关注这些数据,并在最后几分钟据此建仓或调整仓位。
季末交易日放大收盘集合竞价
某些日历日的成交量会更多集中到收盘时段。指数再平衡、期权到期以及月末和季末基金资金流都以官方收盘价为依据,而这些资金流会在集合竞价中汇集。2026年6月30日是第二季度的最后一个交易日。下方面板将各 ticker 当天的收盘集合竞价与月中普通交易日6月16日进行比较;这两个交易日均已在上方的成交回执中确认是完整交易日。
| ticker | 6月16日竞价成交笔数 | 6月30日竞价成交笔数 | 6月16日竞价成交股数(百万) | 6月30日竞价成交股数(百万) | 6月30日与6月16日倍数 | 6月16日竞价占比 | 6月30日竞价占比 |
|---|---|---|---|---|---|---|---|
| SPY | 1 | 1 | 1.84 | 2 | 1.1 | 2.7 | 3.6 |
| AAPL | 1 | 1 | 7.49 | 21.71 | 2.9 | 18.8 | 33.2 |
| NVDA | 1 | 1 | 23.47 | 41.14 | 1.8 | 18.5 | 24.7 |
每个数字背后的完整 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日一样,各 ticker 每个交易日恰好有一笔集合竞价,两个成交笔数列就是成交回执。这个成交量模式正是相对成交量筛选器要识别的信号。SPY的集合竞价占比在两个交易日都很小(2.7%和3.6%)。如需查看完整交易日情况,请参阅我们对2026年6月30日市场的回顾;如需了解同一季末周的一项数据异常,请参阅未提交数据的季末交易日。
如何识别收盘竞价成交记录?成交条件代码
哪一笔成交是竞价成交?成交明细本身会说明。每笔交易都带有成交条件代码,代码字典也在同一数据源中提供。下面的回执是查询结果,不是断言。
| name | id | 计入成交量 |
|---|---|---|
| Closing Prints | 8 | 1 |
| Market Center Official Close | 15 | 0 |
| Market Center Official Open | 16 | 0 |
| Corrected Consolidated Close (per listing market) | 38 | 0 |
每个数字背后的完整 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)。上述每个竞价成交数值都依据这些代码筛选,而不是依据时钟时间;每个成交量分母都会剔除这三个管理性代码。
常见问题
收盘竞价在什么时间进行?
美东时间下午 4:00 后不久,常规交易时段结束时进行。在成交异常活跃的交易日,成交记录可能稍晚出现。2026 年 7 月 2 日,SPY、AAPL 和 NVDA 的竞价成交记录均精确标记为 16:00:00 ET。在预定提前收市日,竞价改在美东时间下午 1: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 而言,竞价成交通常占全天成交量的比例较小:2026 年 7 月 2 日,SPY 的竞价成交占其成交量的 2.9%,而 AAPL 为 14.4%。
以上每个数字均来自可存储并可检查的查询。展开任一面板下方的 SQL 即可审计。若要分析您关注的 ticker 的收盘竞价,可在 Strasmore 终端中用自然语言提出相同问题。