什么是股票开盘集合竞价
了解美股如何通过 9:30 集合竞价确定官方开盘价,并对比 SPY、AAPL、NVDA 的真实交易数据。
开盘集合竞价于东部时间上午 9:30 进行,通过单一交叉交易确定每只股票的官方开盘价。在开盘前,上市交易所会收集所有标记为“开盘”的订单,计算出能实现最大成交量的一个价格,并一次性执行所有订单。这与当日结束时的 收盘集合竞价 机制类似。以下所有数据均来自综合报价系统(Consolidated Tape)——即美国股票交易的公开记录,每个面板均附有精确的 SQL 语句。
什么是开盘竞价?通俗定义
交易所不会在 9:30 直接开市并逐笔撮合订单。在隔夜及盘前阶段,上市交易所会累积所有指定的开盘订单,以及订单簿中符合条件的限价单。开盘钟声响起时,交易所会以单一价格对所有订单进行一次性撮合。该成交记录带有特定的成交条件标签(代码 17,即“Market Center Opening Trade”——见最后一行),其价格即为官方开盘价:它是当日价格记录中的“开盘价”,也是“跳空高开”或“跳空低开”的基准。竞价机制与连续交易机制属于同一套行情系统;开盘时发生的改变仅是交易机制的切换。
真实行情数据:SPY、AAPL、NVDA 开盘集合竞价
下表以 2026 年 7 月 2 日为例(完整交易日数据见下一表),对比了 SPY、AAPL 和 NVDA 的开盘集合竞价与全天交易规模。“成交量”仅计算计入合并成交量的股份;所有分母均已排除行政指令(销售条件 15、16、38)。
每个数字背后的完整 SQL
SELECT
ticker,
round(toFloat64(maxIf(size, has(conditions, 17))) / 1e3, 1) AS auction_shares_k,
toFloat64(argMaxIf(price, (size, sip_timestamp), has(conditions, 17))) AS auction_price,
formatDateTime(toTimeZone(argMaxIf(sip_timestamp, (size, sip_timestamp), has(conditions, 17)), 'America/New_York'), '%H:%i:%S') AS auction_time_et,
countIf(has(conditions, 17)) AS opening_print_count,
countIf(has(conditions, 17) AND formatDateTime(toTimeZone(sip_timestamp, 'America/New_York'), '%H:%i:%S') = '09:30:00') AS open_prints_at_0930,
minIf(size, has(conditions, 17)) AS smallest_open_print_shares,
round(toFloat64(sumIf(size, NOT hasAny(conditions, [15, 16, 38]) AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) >= 570 AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) < 575)) / 1e3) AS first5_shares_k,
round(100 * toFloat64(maxIf(size, has(conditions, 17))) / toFloat64(sumIf(size, NOT hasAny(conditions, [15, 16, 38]) AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) >= 570 AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) < 575)), 1) AS auction_pct_of_first5,
round(100 * toFloat64(maxIf(size, has(conditions, 17))) / toFloat64(sumIf(size, NOT hasAny(conditions, [15, 16, 38]))), 2) AS auction_pct_of_day,
round(toFloat64(maxIf(size, has(conditions, 8))) / 1e6, 2) AS closing_auction_shares_m,
round(toFloat64(maxIf(size, has(conditions, 8))) / toFloat64(maxIf(size, has(conditions, 17))), 1) AS close_vs_open_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 行:开盘集合竞价成交 323.3 千股,价格为 $294.1,时间为 09:30:00 ET。NVDA 的竞价成交量为 690 千股,SPY 为 122 千股。仅竞价环节的成交量就占该交易日前五分钟(1856 千股)AAPL 总成交量的 17.4,NVDA 占 13.8,SPY 占 9.4;但其占全天总成交量的比例仅为 0.43%、0.48% 和 0.21%,均不足 0.5%。
最后两列为对比项:AAPL 当日的收盘集合竞价成交 10.89 百万股,是其开盘成交量的 33.7 倍;NVDA 为 25.2 倍,SPY 为 13.5 倍。指数基金和基准指数交易通常按官方收盘价执行,这些资金流集中在下午 4 点的收盘竞价中;早盘则没有对应的交易机制。收盘竞价是全天规模最大的交易,而开盘竞价则是官方交易日的开始。
为什么官方开盘价可能与当日首笔成交价不同?
在开盘竞价开始前,股票通常已交易数小时。盘前交易最早从东部时间凌晨 4:00 开始,但这些成交记录均不计入官方开盘价。下方的单行记录涵盖了 AAPL 在 2026 年 7 月 1 日至 2 日的数据,并包含交易会检查:SPY 在 7 月 2 日产生了 390 交易时段分钟线——这是经过验证的完整交易时段,而非推测值。
每个数字背后的完整 SQL
WITH
(
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 argMax(sip_timestamp, (size, sip_timestamp))
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' AND has(conditions, 17)
) AS auction_ts,
(
SELECT argMax(exchange, (size, sip_timestamp))
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' AND has(conditions, 17)
) AS listing_exchange
SELECT
bars_jul02 AS spy_session_bars_jul02,
countIf(has(conditions, 8) AND sip_timestamp < '2026-07-02 00:00:00') AS jul01_close_print_count,
toFloat64(argMaxIf(price, (size, sip_timestamp), has(conditions, 8) AND sip_timestamp < '2026-07-02 00:00:00')) AS prior_close_price,
countIf(has(conditions, 17) AND sip_timestamp >= '2026-07-02 00:00:00') AS opening_print_count,
toFloat64(argMaxIf(price, (size, sip_timestamp), has(conditions, 17) AND sip_timestamp >= '2026-07-02 00:00:00')) AS auction_price,
formatDateTime(toTimeZone(auction_ts, 'America/New_York'), '%H:%i:%S.%f') AS auction_et,
round(100 * (toFloat64(argMaxIf(price, (size, sip_timestamp), has(conditions, 17) AND sip_timestamp >= '2026-07-02 00:00:00')) - toFloat64(argMaxIf(price, (size, sip_timestamp), has(conditions, 8) AND sip_timestamp < '2026-07-02 00:00:00'))) / toFloat64(argMaxIf(price, (size, sip_timestamp), has(conditions, 8) AND sip_timestamp < '2026-07-02 00:00:00')), 2) AS overnight_gap_pct,
formatDateTime(toTimeZone(minIf(sip_timestamp, sip_timestamp >= '2026-07-02 00:00:00' AND NOT hasAny(conditions, [15, 16, 38])), 'America/New_York'), '%H:%i:%S') AS first_trade_et,
toFloat64(argMinIf(price, (sip_timestamp, sequence_number), sip_timestamp >= '2026-07-02 00:00:00' AND NOT hasAny(conditions, [15, 16, 38]))) AS first_trade_price,
countIf(sip_timestamp >= '2026-07-02 00:00:00' AND sip_timestamp < auction_ts AND NOT hasAny(conditions, [15, 16, 38])) AS trades_before_official_open,
countIf(sip_timestamp >= toDateTime('2026-07-02 09:30:00', 'America/New_York') AND sip_timestamp < auction_ts AND NOT hasAny(conditions, [15, 16, 38])) AS bell_to_cross_trades,
countIf(has(conditions, 16) AND sip_timestamp >= '2026-07-02 00:00:00') AS official_open_msgs,
countIf(has(conditions, 16) AND sip_timestamp >= '2026-07-02 00:00:00' AND exchange = listing_exchange) AS listing_venue_open_msgs,
round(toFloat64(anyIf(price, has(conditions, 16) AND sip_timestamp >= '2026-07-02 00:00:00' AND exchange = listing_exchange)) - toFloat64(argMaxIf(price, (size, sip_timestamp), has(conditions, 17) AND sip_timestamp >= '2026-07-02 00:00:00')), 4) AS listing_open_msg_price_difference
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL' AND sip_timestamp >= '2026-07-01 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'AAPL 在 7 月 2 日的第一笔计量成交发生在东部时间 04:00:00,价格为 $296.1。官方开盘价直到东部时间 09:30:00.491313 才产生,当时竞价成交价为 $294.1。在此之前,AAPL 已有 15832 笔成交记录,其中包括在 9:30:00.000 与竞价之间极短时间内产生的 173 笔成交——这些是其他交易场所在开盘瞬间开始撮合的连续交易。随后出现了 2 笔“Market Center Official Open”消息(销售条件 16)——这是各市场中心对其自身官方开盘价的记录,不增加成交量;上市交易所的记录则与竞价价格完全一致(差额:0)。
该记录还衡量了隔夜跳空情况。AAPL 前一交易日的官方收盘价(即 7 月 1 日的 1 收盘价)为 $294.38;次日早晨的竞价成交价为 $294.1,隔夜变动幅度为 -0.1%。夜间交易清淡,跳空幅度较小。当财报或新闻在隔夜发布时,盘前交易会首先进行重新定价;随后竞价会将该波动记录在官方数据中。
开盘竞价机制如何运作?开盘市价单与开盘限价单
有两种专门用于开盘阶段的订单类型,其逻辑与收盘订单类似:
- 开盘市价单 (MOO):以竞价确定的价格成交。该订单不设价格保护,几乎可以保证在官方开盘时参与交易。
- 开盘限价单 (LOO):仅当开盘价达到或优于其限价时,该订单才会参与竞价。该订单具有价格保护,但可能无法成交。
这两种订单都会在撮合前保留在交易所,且在盘前交易阶段不会成交。交易所通常会在 9:30 前不久停止接受或修改开盘订单(具体截止时间视交易所而定),许多经纪商会设置更早的截止时间。
什么是开盘竞价失衡?
在开盘前,交易所会公布开盘失衡数据:包括待买入与待卖出的股票数量,以及按当前状态计算的预估成交价。例如,100 万股的买入失衡意味着目前有 100 万股买单尚未匹配。盘前交易者会密切关注这些数据并据此进行仓位布局。
9:30 分 K 线并非官方开盘价
大多数图表平台会将开盘价归入第一根 1 分钟 K 线:即包含所有交易场所从 9:30:00.000 到 9:30:59.999 的成交数据——包括集合竞价及近一分钟的连续交易。其“开盘价”是该时间窗口内的第一笔成交价,并不一定是竞价成交价。
每个数字背后的完整 SQL
WITH auctions AS (
SELECT ticker, toFloat64(argMax(price, (size, sip_timestamp))) AS official_open
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'
AND has(conditions, 17)
GROUP BY ticker
)
SELECT
b.ticker AS ticker,
toFloat64(anyIf(b.open, b.window_start = toDateTime('2026-07-02 09:30:00', 'America/New_York'))) AS bar_0930_open,
a.official_open AS official_open,
round(100 * (toFloat64(anyIf(b.open, b.window_start = toDateTime('2026-07-02 09:30:00', 'America/New_York'))) - a.official_open), 0) AS bar_open_minus_official_cents,
round(sumIf(b.volume, b.window_start = toDateTime('2026-07-02 09:30:00', 'America/New_York')) / 1e3) AS bar_0930_vol_k,
anyIf(b.transactions, b.window_start = toDateTime('2026-07-02 09:30:00', 'America/New_York')) AS bar_0930_trades,
round(sumIf(b.volume, b.window_start = toDateTime('2026-07-02 12:30:00', 'America/New_York')) / 1e3) AS bar_1230_vol_k,
round(sumIf(b.volume, b.window_start = toDateTime('2026-07-02 09:30:00', 'America/New_York')) / sumIf(b.volume, b.window_start = toDateTime('2026-07-02 12:30:00', 'America/New_York')), 1) AS x_0930_vs_1230
FROM global_markets.delayed_stocks_minute_aggs AS b
INNER JOIN auctions AS a ON a.ticker = b.ticker
WHERE b.ticker IN ('SPY', 'AAPL', 'NVDA')
AND b.window_start >= toDateTime('2026-07-02 00:00:00', 'America/New_York')
AND b.window_start < toDateTime('2026-07-03 00:00:00', 'America/New_York')
GROUP BY b.ticker, a.official_open
ORDER BY indexOf(['SPY', 'AAPL', 'NVDA'], b.ticker)7 月 2 日,三根 9:30 K 线的开盘价均高于官方开盘价:AAPL 的 K 线显示为 $294.12,而官方开盘价为 $294.1——相差 2 美分;SPY 高出 18 美分,NVDA 高出 2 美分。这是因为其他交易场所的盘前成交价先于竞价进入了每根 K 线;当图表开盘价与官方开盘价有几美分的偏差时,通常是由此机制导致的。
成交量柱状图显示了第一分钟的权重。AAPL 的 9:30 K 线在 14662 笔交易中成交了 743 千股——是其 12:30 午间 K 线(121 千股)的 6.1 倍;NVDA 的倍数是 7.5 倍,SPY 为 3.6 倍。成交量如此巨大的分钟线对 VWAP(成交量加权平均价) 有重要影响。
开盘前后全天走势如何?
将 AAPL 7 月全天的逐笔数据按 64 刻度进行分组(时间跨度为凌晨 4:00 至晚上 8:00),可以更清晰地观察开盘阶段的爆发情况:盘前交易量极低;9:30 开盘后成交量大幅上升;午间成交量萎缩;随后在收盘前再次放大——全天最终以 10.89 百万股 AAPL 的成交量结束。
每个数字背后的完整 SQL
SELECT
formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 15 MINUTE), '%H:%i') AS et_time,
round(sum(volume) / 1e6, 2) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'AAPL'
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')
GROUP BY et_time
ORDER BY et_time如何识别开盘集合竞价成交价?成交条件代码
哪笔成交属于集合竞价?行情数据本身会给出答案;代码字典与其随附,下文提供的收据仅为查询结果,而非结论。
每个数字背后的完整 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, 17, 38)
ORDER BY id存在一个不对称性。收盘价只有一个统一标签(代码 8,“Closing Prints”);而开盘标签则按交易场所划分:代码 17,“Market Center Opening Trade”标记各交易中心的开盘成交,上市交易所的成交即为集合竞价。SPY 在 7 月 2 日的行情包含 2 笔此类成交——包括 122 千股的交叉盘以及来自另一场所的 4 股成交——而 AAPL 和 NVDA 各仅显示一笔(1 和 1),均发生在 9:30:00 秒内(由 open_prints_at_0930 列确定)。上述每个竞价成交量均为该交易日的此类最大成交额。代码 16,“Market Center Official Open”是无成交量的行政记录(成交量列显示为 0),在计算包含代码 15 和 38 的各项指标时均会被排除。
开盘集合竞价常见问题解答
开盘集合竞价在什么时间进行?
在东部时间上午 9:30 正式交易开始时进行;流动性较低的股票可能会稍后进行撮合。2026 年 7 月 2 日,SPY、AAPL 和 NVDA 的撮合时间均为东部时间 09:30:00。在安排了早盘收市的交易日,交易时间缩短的是下午而非上午——收盘集合竞价将提前至下午 1:00 进行;请参阅 市场节假日与早盘收市。
官方开盘价是什么?
指股票在上市交易所通过集合竞价确定的价格。2026 年 7 月 2 日,AAPL 的撮合价为 $294.1 —— 即当日官方开盘价,尽管 15832 AAPL 的成交价在当天早些时候就已经出现。
我可以在开盘集合竞价中交易吗?
可以。大多数经纪商都提供市场开盘指令 (MOO) 和限价开盘指令 (LOO):MOO 会按集合竞价确定的价格成交,LOO 仅在达到或优于其限价时成交。订单提交截止时间在 9:30 前不久,许多经纪商的截止时间更早。
为什么股票的开盘价与昨日收盘价差距很大?
在交易所休市期间,订单会整夜累积,集合竞价会将这些累积的意向通过一次撮合来完成。在市场波动较小的夜晚,价差会很小:2026 年 7 月 2 日 AAPL 的隔夜涨跌幅为 -0.1%。
开盘集合竞价的规模比收盘集合竞价大吗?
不——收盘竞价的规模要大得多。2026 年 7 月 2 日,AAPL 的收盘撮合规模是开盘撮合的 33.7 倍,NVDA 是 25.2 倍,SPY 是 13.5 倍。追踪基准指数的资金流在官方收盘时进行交易 —— 收盘集合竞价 涵盖了这一环节。
以上所有数据均由存储且可审计的查询生成 —— 您可以展开任何面板下的 SQL 语句进行审计。若要分析您关注的股票的开盘撮合情况,请直接在 Strasmore 终端使用英文提问。