開盤集合競價是什麼
紐約證交所9:30單筆撮合決定開盤價,為何開盤價常與第一筆成交不同?從SPY、AAPL、NVDA真實報價拆解機制。
開盤集合競價是美東時間上午9:30的一筆單一撮合成交,決定每檔股票的正式開盤價。開盤前,掛牌交易所會收集所有標示為開盤的委託單,計算出能配對最多股數的單一價格,然後將整批委託單以一筆成交執行——這正是結束當日交易的收盤集合競價的晨間對映。以下所有數據均來自綜合報價紀錄——也就是每一筆美股交易的公開記錄——每個面板都附有對應的精確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。NVDA的集合競價成交量為690千股,SPY則為122千股。僅開盤集合競價一項,就佔了該交易時段前五分鐘內AAPL所有撮合成交股數(1856千股)的17.4%,NVDA為13.8%,SPY為9.4%——然而,這三檔標的在全天總成交股數中的佔比僅分別為0.43%、0.48%與0.21%,均不到半個百分點。
最後兩欄是對應的收盤數據:AAPL當日的收盤集合競價撮合了10.89百萬股,是其開盤量的33.7倍;NVDA的倍數為25.2倍,SPY則為13.5倍。指數基金與以基準為導向的交易部門均按官方收盤價執行交易,這股資金流匯集於下午四點的集合競價;早盤並無對等的資金流。收盤集合競價是全天最大的交易——而開盤集合競價,則是官方交易日開始的地方。
為什麼官方開盤價可能與當日第一筆交易不同?
在集合競價啟動時,股票通常已經交易了數小時——盤前交易最早從美東時間凌晨4:00開始,而這些成交記錄都不會決定官方開盤價。下方這份單行收據涵蓋了AAPL在2026年7月1日至2日的數據,開頭便進行了交易時段檢查:SPY在7月2日精確產生了 390 根常規交易時段分鐘K線——這是一個完整的交易時段,是經過驗證而非假設的。
每個數據背後的精確 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 線:也就是從 9:30:00.000 到 9:30:59.999 之間,所有交易場所印出的每一筆成交——包含集合競價加上將近一分鐘的連續交易。這根 K 線的「開盤價」是這個時間窗內捕捉到的第一筆成交價,不一定是集合競價的價格。
每個數據背後的精確 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,成交量加權平均價格 中具有實質影響力。
開盤前後的全日交易樣貌為何?
將蘋果 7 月 2 日整日的逐筆成交,以 64 為單位劃分為每 15 分鐘一區間,從凌晨 4:00 至晚上 8:00,可看出開盤爆發量的背景:盤前區間的量幾乎微不足道,9:30 起成交量急遽放大,接近午盤時轉淡,並在收盤前再度堆量——當日最終以 10.89 百萬股蘋果的一筆巨額成交作收,與開盤時如出一轍。
每個數據背後的精確 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 成交紀錄。
我可以參與開盤集合競價嗎?
可以。開盤市價單和開盤限價單在多數券商都是標準委託單類型:開盤市價單會以競價產生的任何價格成交,開盤限價單則僅在其限價或更優價格時才會參與撮合。委託單輸入在 9:30 前不久截止,許多券商的截止時間更早。
為什麼股票開盤價會與昨日收盤價差距很大?
交易所收盤期間,委託單整晚累積,而集合競價會將這些累積的買賣意願一次撮合成交。在平靜的夜晚,價差會很小:2026 年 7 月 2 日,AAPL 的隔夜變動幅度為 -0.1%。
開盤集合競價的量會比收盤集合競價大嗎?
不會——收盤的量要大得多。2026 年 7 月 2 日,AAPL 的收盤撮合量是其開盤撮合量的 33.7 倍,NVDA 是 25.2 倍,SPY 是 13.5 倍。追蹤基準指數的資金流會在官方收盤價進行交易——收盤集合競價涵蓋了這個對應環節。
以上每個數字都來自儲存且可供檢視的查詢——展開任何面板下的 SQL 即可進行審計。若要剖析您所關注股票的開盤撮合細節,請在 Strasmore 終端機上用淺顯的英文提出相同問題。