什么是开盘集合竞价?股票如何开盘
了解开盘集合竞价如何通过东部时间上午9:30的一次集中撮合,确定每只股票的官方开盘价,以及为何开盘价可能不同于当日首笔成交价。
开盘集合竞价是东部时间上午 9:30 的一次集中撮合交易,用于确定每只股票的官方开盘价。开盘铃响前,上市交易所汇总所有标记为开盘交易的订单,计算出能够撮合最多股票的单一价格,并通过一笔成交一次性执行全部订单。这是结束当日交易的收盘集合竞价在早晨的对应环节。以下所有数字均来自合并行情系统,即记录每笔美国股票交易的公开数据库;每个图表均附有完整的 SQL 查询。
什么是开盘集合竞价?通俗定义
交易所并不是在9:30简单开市,然后逐笔撮合订单。在隔夜时段和盘前交易期间,上市交易所会汇集指定在开盘时执行的订单,以及簿记系统中尚未成交且符合条件的限价单。开盘铃响时,交易所会以一个价格将全部订单一次性撮合成交。这笔成交带有专属的成交条件标签(代码 17,“Market Center Opening Trade”,收据见最后一个面板),其价格成为官方开盘价:即当日价格记录中的“开盘价”,也是“跳空高开”和“跳空低开”所依据的参考价格。集合竞价与连续交易属于同一条行情记录;开盘铃响时改变的是交易机制。
真实成交记录中的开盘集合竞价:SPY、AAPL、NVDA
下方面板选取了2026年7月2日这一完整且已核验的交易日(下一面板提供凭证),并将SPY、AAPL和NVDA的开盘集合竞价规模与当日其余交易进行比较。“匹配成交量”仅统计成交记录计入合并成交量的股票数量;行政消息(成交条件 15、16、38)不计入任何分母。
| 股票代码 | 竞价股数 k | 竞价价格 | 竞价时间 ET | 开盘成交笔数 | 0930 开盘成交 | 最小开盘成交股数 | 前5分钟股数 k | 竞价占前5分钟比例 | 竞价占全天比例 | 收盘竞价股数 m | 收盘/开盘倍数 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| SPY | 122 | 747.22 | 09:30:00 | 2 | 2 | 4 | 1295 | 9.4 | 0.21 | 1.65 | 13.5 |
| AAPL | 323.3 | 294.1 | 09:30:00 | 1 | 1 | 323338 | 1856 | 17.4 | 0.43 | 10.89 | 33.7 |
| NVDA | 690 | 197.12 | 09:30:00 | 1 | 1 | 690026 | 5006 | 13.8 | 0.48 | 17.38 | 25.2 |
每个数字背后的完整 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 千股。仅开盘集合竞价,就占AAPL开盘前五分钟全部匹配成交量的 17.4%(1856 千股);NVDA为 13.8%,SPY为 9.4%。但它们占全天成交股数的比例仅为 0.43%、0.48% 和 0.21%:均不足百分之一的一半。
最后两列显示了开盘与收盘的对比:AAPL当日收盘集合竞价成交 10.89 百万股,为开盘成交量的 33.7 倍;NVDA为 25.2 倍,SPY为 13.5 倍。指数基金和基准投资团队会按官方收盘价进行交易,这些交易集中在下午4点的收盘集合竞价中;早盘没有对应的交易流。收盘集合竞价是当天最大的一笔交易,开盘集合竞价则标志着正式交易日的开始。
为什么官方开盘价可能不同于当天第一笔交易?
竞价开始时,该股票通常已经交易数小时。盘前交易最早可于美国东部时间凌晨 4:00 开始,但这些成交都不会形成官方开盘价。下面这张单行凭证涵盖 2026 年 7 月 1 日至 2 日的 AAPL,并先进行交易时段核验:7 月 2 日,SPY 正好有 390 根常规交易时段分钟线,这是一个完整交易日,经过核实而非推定。
| SPY 7月2日交易时段K线 | 7月1日收盘成交笔数 | 前收盘价 | 开盘成交笔数 | 竞价价格 | 竞价 ET | 隔夜跳空比例 | 首笔交易时间 ET | 首笔交易价格 | 正式开盘前交易笔数 | 开盘铃至竞价交易笔数 | 正式开盘消息数 | 上市场所开盘消息数 | 上市开盘消息价差 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 390 | 1 | 294.38 | 1 | 294.1 | 09:30:00.491313 | -0.1 | 04:00:00 | 296.1 | 15832 | 173 | 2 | 1 | 0 |
每个数字背后的完整 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 成交。届时,已有 15832 笔 AAPL 成交记录在案,其中包括 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前不久停止接受或修改开盘订单,具体截止时间因交易所而异。许多券商设定的截止时间更早。
什么是开盘集合竞价失衡?
临近开盘时,交易所会公布开盘失衡数据:排队买入的股票数量与排队卖出的股票数量,以及当时撮合成交所对应的指示性价格。买方失衡达到一百万股,意味着截至当时有一百万股买入订单尚未找到匹配的卖出订单。盘前交易者会关注这些数据,并据此调整仓位。
9:30分钟K线也不是官方开盘价
大多数图表平台会将开盘价纳入第一根一分钟K线:该K线涵盖9:30:00.000至9:30:59.999期间、所有交易场所的成交,包括集合竞价以及接近一分钟的连续交易。其“开盘价”是时间窗口内记录到的第一笔成交价,不一定是集合竞价成交价。
| 股票代码 | 0930 K线开盘价 | 正式开盘 | K线开盘价减正式开盘价(美分) | 0930 K线成交量 k | 0930 K线交易笔数 | 1230 K线成交量 k | 0930/1230 倍数 |
|---|---|---|---|---|---|---|---|
| SPY | 747.4 | 747.22 | 18 | 479 | 8632 | 133 | 3.6 |
| AAPL | 294.12 | 294.1 | 2 | 743 | 14662 | 121 | 6.1 |
| NVDA | 197.14 | 197.12 | 2 | 1688 | 36319 | 226 | 7.5 |
每个数字背后的完整 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线成交量为743千股,成交14662笔,是其12:30午间K线121千股的6.1倍;NVDA的这一比例为7.5倍,SPY为3.6倍。成交量如此巨大的分钟具有重要权重,尤其是在计算成交量加权平均价格VWAP时。
开盘前后全天的交易情况如何?
将 AAPL 7 月 2 日全天的成交明细按 64 个 15 分钟时段分组,覆盖凌晨 4:00 至晚间 8:00,可以看清开盘时段的背景:盘前时段的成交量几乎可以忽略,9:30 成交量大幅上升,午盘前后趋于清淡,临近收盘又逐步放大。当天最终以一笔 10.89 百万股 AAPL 的交叉交易收尾,与开盘时的情况相呼应。
| ET 时间 | 股数 m |
|---|---|
| 04:00 | 0.1 |
| 04:15 | 0.01 |
| 04:30 | 0 |
| 04:45 | 0 |
| 05:00 | 0.01 |
| 05:15 | 0 |
| 05:30 | 0.01 |
| 05:45 | 0.01 |
| 06:00 | 0.01 |
| 06:15 | 0.01 |
| 06:30 | 0.01 |
| 06:45 | 0 |
| 07:00 | 0.02 |
| 07:15 | 0.01 |
| 07:30 | 0.01 |
| 07:45 | 0.01 |
| 08:00 | 0.02 |
| 08:15 | 0.02 |
| 08:30 | 0.04 |
| 08:45 | 0.03 |
每个数字背后的完整 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如何识别开盘竞价成交记录?成交条件代码
哪一笔成交是竞价成交?逐笔成交数据本身会给出答案;代码字典也在同一数据源中,下面的收据是查询结果,而非断言。
| name | id | 计入成交量 |
|---|---|---|
| Closing Prints | 8 | 1 |
| Market Center Official Close | 15 | 0 |
| Market Center Official Open | 16 | 0 |
| Market Center Opening Trade | 17 | 1 |
| 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, 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 前不久截止,许多券商的截止时间会更早。
为什么股票开盘价会大幅偏离昨日收盘价?
交易所闭市期间,订单会整夜累积。开盘集合竞价会通过一笔成交撮合这些累积订单。交易清淡时,价差通常较小:AAPL 2026 年 7 月 2 日的隔夜变动为 -0.1%。
开盘集合竞价的规模是否大于收盘集合竞价?
不是,收盘集合竞价的规模要大得多。2026 年 7 月 2 日,AAPL 的收盘集合竞价规模是开盘集合竞价的 33.7 倍,NVDA 为 25.2 倍,SPY 为 13.5 倍。跟踪基准的资金流会在官方收盘价成交,收盘集合竞价则负责完成这一端的交易撮合。
以上每个数据均来自已存储且可检查的查询。您可以展开任一面板下方的 SQL 进行核查。若要分析您关注的股票代码的开盘集合竞价,请在 Strasmore 终端中用普通英语提出同样的问题。