什麼是開盤競價?股票如何開盤
了解開盤競價如何運作,以及美東時間上午9:30的一筆撮合如何決定股票正式開盤價,並說明開盤價為何可能不同於當日第一筆成交價。
開盤競價是美東時間上午 9:30 的單一撮合交易,用來決定各股票的正式開盤價。開盤鈴響前,掛牌交易所會收集所有指定於開盤時執行的委託單,計算出可撮合最多股數的單一價格,並以一筆成交完成整批委託。這是結束當日交易的收盤競價在早盤的對應形式。以下所有數字均來自 consolidated tape,也就是記錄美國所有股票交易的公開資料;每個圖表面板均附有完整 SQL。
什麼是開盤競價?白話定義
交易所並不是在9:30一到就直接開市,逐筆撮合訂單。隔夜及盤前期間,上市交易所會累積指定於開盤成交的訂單,以及掛在其訂單簿上、符合資格的限價單。開盤鐘響時,交易所會將整個訂單池以單一價格一次撮合成交。這筆成交會帶有專屬的成交條件標籤(代碼 17,「Market Center Opening Trade」,最後一個面板中的成交紀錄),其成交價也會成為官方開盤價:即當日價格紀錄中的「開盤價」,也是「跳空上漲」與「跳空下跌」所依據的參考價。開盤競價與連續交易屬於同一條成交行情;開盤鐘響時改變的是撮合機制。
開盤競價的真實成交:SPY、AAPL、NVDA
下表採用2026年7月2日這個經驗證的完整交易日(下一節附有收據),比較 SPY、AAPL 與 NVDA 的開盤集合競價成交量,以及其占當日成交量的比重。「撮合成交量」只計入成交紀錄新增至合併成交量的股數;行政訊息(成交條件 15、16、38)不納入任何分母。
| 股票代號 | 集合競價股數(千股) | 集合競價價格 | 集合競價時間(ET) | 開盤成交筆數 | 09:30 開盤成交筆數 | 最小開盤成交股數 | 前5分鐘股數(千股) | 集合競價占前5分鐘(%) | 集合競價占全日(%) | 收盤集合競價股數(百萬股) | 收盤/開盤倍數 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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,並先進行交易時段檢查:SPY 在7月2日這個完整交易日中,確實產生了 390 根正規交易時段分鐘K線,而非僅憑假設認定交易時段完整。
| 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%。夜間市場平靜,因此跳空幅度不大。若財報或新聞在隔夜公布,盤前交易會先反映價格;競價則將這一變動正式記錄為官方開盤價。
開盤集合競價如何運作?開盤市價單與開盤限價單
有兩種專用委託類型會參與開盤集合競價,其功能類似收盤端的對應委託:
- 開盤市價單(market-on-open,MOO)會以集合競價決定的任何價格成交,不提供價格保護,但幾乎可以確定參與正式開盤。
- 開盤限價單(limit-on-open,LOO)只有在開盤價等於或優於指定限價時才會參與集合競價,具備價格保護,但可能無法成交。
這兩類委託都會留在交易所,直到集合競價撮合完成。在此之前,不會於盤前交易時段成交。交易所通常會在9:30前不久停止接受或修改開盤委託,但各交易所的截止時間不同,許多券商也會設定更早的截止時間。
什麼是開盤集合競價失衡?
開盤前,交易所會公布開盤失衡資料,包括排隊買進與賣出的股數,以及當下若進行集合競價撮合,可能達成成交的指示價格。買方失衡達一百萬股,表示截至目前有一百萬股開盤買進委託尚未找到對手方。盤前交易者會觀察這些資料,並據此調整部位。
9:30分K線也不是官方開盤價
多數圖表平台會將開盤價納入第一根一分鐘K線:該K線涵蓋9:30:00.000至9:30:59.999期間、所有交易場所的成交資料,包括集合競價以及將近一分鐘的連續交易。這根K線的「開盤價」是該時間窗口內擷取到的第一筆成交價,不一定是集合競價價格。
| 股票代號 | 09:30 K線開盤價 | 正式開盤價 | K線開盤價減正式開盤價(美分) | 09:30 K線成交量(千股) | 09:30 K線成交筆數 | 12:30 K線成交量(千股) | 09:30/12:30 倍數 |
|---|---|---|---|---|---|---|---|
| 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倍。成交量如此龐大的分鐘K線,會對VWAP(成交量加權平均價)產生實質影響。
開盤前後的全天交易概況如何?
將 AAPL 7月2日全天的逐筆成交資料,按每64 15分鐘分箱,從凌晨4:00統計至晚上8:00,可看出開盤初段在全天中的位置:盤前各時段的成交量幾乎不顯著,9:30成交量大幅上升,接近午盤時逐步轉淡,並在收盤前再次增加。當天最後以一筆10.89百萬股 AAPL 的交叉交易作收,與開盤時的情況相呼應。
| ET 時間 | 股數(百萬股) |
|---|---|
| 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 terminal 以自然語言提出相同問題。