Comprendre l'enchère d'ouverture boursière
Découvrez le mécanisme de l'enchère d'ouverture qui fixe le prix officiel des titres à 9h30 et pourquoi ce cours diffère parfois du premier trade de la séance.
L'enchère d'ouverture est une transaction croisée unique à 9h30 (heure de l'Est) qui fixe le cours d'ouverture officiel de chaque action. Avant l'ouverture, la bourse de cotation collecte toutes les ordres marqués pour l'ouverture, calcule le prix unique permettant de jumeler le plus grand nombre d'actions, et exécute l'ensemble du pool en une seule transaction — le reflet matinal de l'enchère de clôture qui termine la journée. Toutes les données ci-dessous proviennent de la consolidated tape — le registre public de chaque transaction boursière aux États-Unis — avec le code SQL exact associé à chaque panneau.
Qu'est-ce que l'enchère d'ouverture ? Une définition simple
Les bourses ne se contentent pas de s'activer à 9h30 pour apparier les ordres un par un. Pendant la nuit et durant la pré-ouverture, la bourse de cotation accumule les ordres destinés à l'ouverture, ainsi que les ordres à cours limité éligibles présents dans son carnet. À la cloche, elle croise l'ensemble du pool en une seule transaction à un prix unique. Cette transaction porte son propre code de condition de vente (code 17, "Market Center Opening Trade" — voir les reçus dans le dernier panneau), et son prix devient l'ouverture officielle : le prix d'ouverture du relevé quotidien, la référence pour les termes "gap up" ou "gap down". L'enchère et le marché continu font partie du même flux ; seul le mécanisme change à la cloche.
The opening auction on real tape: SPY, AAPL, NVDA
The panel below takes July 2, 2026 — a verified full session (receipt in the next panel) — and sizes the opening cross for SPY, AAPL, and NVDA against the rest of their day. "Matched volume" counts only shares the tape adds to consolidated volume; administrative messages (sale conditions 15, 16, 38) are excluded from every denominator.
Le SQL exact derrière chaque chiffre
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)Read AAPL's row first: an opening cross of 323.3 thousand shares at $294.1, stamped 09:30:00 ET. NVDA's cross ran 690 thousand shares, SPY's 122 thousand. The cross alone carried 17.4% of all AAPL shares matched in the session's first five minutes (1856 thousand shares), 13.8% for NVDA, 9.4% for SPY — yet the full-day shares were just 0.43%, 0.48%, and 0.21%: under half of one percent.
The last two columns are the bookend: AAPL's closing cross that same day matched 10.89 million shares — 33.7 times its open; NVDA's ran 25.2 times, SPY's 13.5 times. Index funds and benchmarked desks transact at official closing prices, and that flow pools in the 4 p.m. cross; the morning has no equivalent. The closing auction is the day's biggest trade — the opening auction is where the official day begins.
Why can the official open differ from the first trade of the day?
By the time the auction fires, the stock has usually been trading for hours — pre-market trading runs from as early as 4:00 a.m. ET, and none of those prints set the official open. The one-row receipt below covers AAPL across July 1-2, 2026, opening with a session check: SPY printed exactly 390 regular-session minute bars on July 2 — a complete session, verified rather than assumed.
Le SQL exact derrière chaque chiffre
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's first volume-counting print of July 2 hit the tape at 04:00:00 ET at $296.1. The official open did not exist until 09:30:00.491313 ET, when the cross printed at $294.1 — by then 15832 AAPL prints were already on the tape, including 173 in the fraction of a second between 9:30:00.000 and the cross — continuous trades on other venues that begin matching at the bell. Moments later came 2 "Market Center Official Open" messages (sale condition 16) — each market center's record of its own official open, adding no volume; the listing exchange's repeats the auction price exactly (difference: 0).
The receipt also measures the overnight gap. AAPL's prior official close — exactly 1 closing print on July 1 — was $294.38; the next morning's auction printed at $294.1, an overnight change of -0.1%. Quiet night, small gap. When earnings or news land overnight, the pre-market reprices first; the auction stamps the move into the official record.
Comment fonctionne l'enchère d'ouverture ? Ordres Market-on-open et limit-on-open
Deux types d'ordres dédiés alimentent l'ouverture, fonctionnant comme leurs équivalents de clôture :
- Un ordre market-on-open (MOO) s'exécute au prix fixé par l'enchère — sans protection de prix, avec une participation quasi garantie à l'ouverture officielle.
- Un ordre limit-on-open (LOO) ne participe à l'enchère que si le prix d'ouverture est égal ou supérieur à sa limite — il offre une protection de prix, mais présente un risque de ne pas être exécuté lors du cross.
Ces ordres restent sur la plateforme de l'échange jusqu'au cross et ne sont jamais négociés en pré-marché. Les bourses cessent d'accepter ou de modifier les ordres d'ouverture peu avant 9h30 (les délais varient selon l'échange), et de nombreux courtiers fixent des échéances plus précoces.
Qu'est-ce qu'un déséquilibre d'enchère d'ouverture (imbalance) ?
Avant l'ouverture, les bourses publient les données d'imbalance pour l'ouverture : le volume d'actions en attente à l'achat par rapport à la vente, ainsi qu'un prix indicatif qui serait celui du cross à cet instant. Un déséquilibre acheteur d'un million d'actions signifie qu'un million d'actions à l'achat ne sont pas encore appariées. Les traders du pré-marché surveillent ces flux pour ajuster leurs positions.
La bougie de 9h30 n'est pas non plus l'ouverture officielle
La plupart des plateformes de graphiques intègrent l'ouverture dans la première bougie d'une minute : tout ce qui est enregistré entre 9h30:00.000 et 9h30:59.999 sur toutes les places de marché — l'enchère plus près d'une minute de trading continu. Son « open » correspond à la première transaction enregistrée dans cet intervalle, et non nécessairement à l'enchère.
Le SQL exact derrière chaque chiffre
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)Le 2 juillet, les trois bougies de 9h30 ont ouvert au-dessus de l'ouverture officielle : la bougie d'AAPL affiche 294.12 contre 294.1 pour l'ouverture officielle — soit un écart de 2 cents — avec SPY à 18 cents et NVDA à 2 cents au-dessus de leurs points de croisement. Une transaction pré-croisement sur une autre place de marché a été enregistrée en premier dans chaque bougie ; c'est généralement le mécanisme responsable lorsqu'un open de graphique diffère de l'ouverture officielle de quelques cents.
Les colonnes de volume indiquent l'importance de la première minute. La bougie de 9h30 d'AAPL a atteint 743 mille actions sur 14662 transactions — soit 6.1 fois son volume de la bougie de 12h30 (pause déjeuner) qui était de 121 mille ; le ratio de NVDA était de 7.5 fois, et celui de SPY de 3.6 fois. Les minutes présentant une telle intensité ont un impact réel sur le VWAP, le prix moyen pondéré par le volume.
Quel est l'aspect de la journée autour de l'ouverture ?
Le découpage de l'intégralité du tape d'AAPL pour le mois de juillet en créneaux de 15 minutes de 64, de 4h00 à 20h00, permet de contextualiser la poussée de l'ouverture : les créneaux du pre-market sont négligeables, le volume augmente fortement à 9h30, s'affaiblit vers le déjeuner, puis remonte vers la clôture — où la journée se termine comme elle a commencé, avec un cross de 10.89 millions d'actions AAPL.
Le SQL exact derrière chaque chiffre
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_timeComment identifier le print de l'enchère d'ouverture ? Les codes de condition de vente
Quel print correspond à l'enchère ? Le tape fournit la réponse ; le dictionnaire des codes est fourni avec, et le reçu ci-dessous est une requête et non une affirmation.
Le SQL exact derrière chaque chiffre
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 idUne asymétrie est importante. La clôture bénéficie d'un label consolidé (code 8, "Closing Prints") ; le label de l'ouverture dépend de la plateforme : le code 17, "Market Center Opening Trade", identifie la transaction d'ouverture propre à chaque centre de marché, et celle de la bourse de cotation est l'enchère. Le tape du SPY pour le 2 juillet contient 2 de ces prints — le cross de mille actions 122 ainsi qu'un print de 4 actions provenant d'une autre plateforme — tandis qu'AAPL et NVDA n'en affichent qu'un seul chacun (1 et 1), tous durant la seconde 9:30:00 (la colonne open_prints_at_0930 le confirme). Chaque numéro d'enchère ci-dessus représente le print de ce type le plus important de la session. Le code 16, "Market Center Official Open", est l'écho administratif sans volume (0 dans la colonne volume), exclu de tous les dénominateurs avec les codes 15 et 38.
Opening auction FAQ
What time is the opening auction?
At 9:30 a.m. ET, as the regular session begins; less liquid names can cross moments later. On July 2, 2026 the SPY, AAPL, and NVDA crosses were all stamped 09:30:00 ET to the second. Scheduled early-close days shorten the afternoon, not the morning — the closing auction moves to 1:00 p.m. instead; see market holidays and early closes.
What is the official opening price?
The opening auction's price on the stock's listing exchange. On July 2, 2026 AAPL's cross printed at $294.1 — the day's official open, even though 15832 AAPL prints traded earlier that morning.
Can I trade in the opening auction?
Yes. Market-on-open (MOO) and limit-on-open (LOO) orders are standard at most brokers: MOO fills at whatever price the auction sets, LOO joins only at its limit or better. Order entry cuts off shortly before 9:30, earlier at many brokers.
Why did a stock open far from yesterday's close?
Orders accumulate all night while the exchange is closed, and the auction crosses that accumulated interest in one print. On a quiet night the gap is small: AAPL's July 2, 2026 overnight change measured -0.1%.
Is the opening auction bigger than the closing auction?
No — the close runs far larger. On July 2, 2026 AAPL's closing cross was 33.7 times its opening cross, NVDA's 25.2 times, SPY's 13.5 times. Benchmark-tracking flow transacts at the official close — the closing auction covers that bookend.
Every figure above renders from a stored, inspectable query — expand the SQL under any panel to audit it. To take the opening cross apart on a ticker you follow, ask the same questions in plain English on the Strasmore terminal.