Asta di apertura: come si apre un titolo
Cos’è l’asta di apertura, come un unico cross alle 9:30 Eastern fissa il prezzo ufficiale di ogni titolo e perché può differire dal primo trade della giornata.
L’asta di apertura è un’unica operazione incrociata alle 9:30 Eastern che determina il prezzo ufficiale di apertura di ogni titolo. Prima della campanella, la borsa di quotazione raccoglie tutti gli ordini destinati all’apertura, calcola il prezzo al quale si abbina il maggior numero di azioni ed esegue l’intero insieme in un unico print, il corrispettivo mattutino dell’asta di chiusura che conclude la giornata. Tutti i dati numerici riportati di seguito provengono dal consolidated tape, il registro pubblico di ogni operazione su azioni statunitensi, con la query SQL esatta allegata a ciascun pannello.
Che cos’è l’asta di apertura? Una definizione in linguaggio semplice
Le borse non si attivano semplicemente alle 9:30 abbinando gli ordini uno alla volta. Durante la notte e nella fase pre-market, la borsa di quotazione accumula gli ordini destinati all’apertura, oltre agli ordini limit resting idonei presenti nel book. Al suono della campanella, incrocia l’intero insieme in un’unica transazione a un solo prezzo. Quel print ha una propria etichetta della condizione di vendita (codice 17, "Market Center Opening Trade", ricevute nell’ultimo pannello), e il suo prezzo diventa l’official open: l’“open” nel registro dei prezzi della giornata, il riferimento alla base di “gapped up” e “gapped down”. L’asta e il mercato continuo fanno parte dello stesso tape; ciò che cambia all’apertura è il meccanismo.
L’asta di apertura sul tape reale: SPY, AAPL, NVDA
Il pannello seguente prende il 2 luglio 2026, una seduta completa verificata (la ricevuta è nel pannello successivo), e rapporta l’incrocio di apertura di SPY, AAPL e NVDA al resto della giornata. Il “matched volume” conta solo le azioni che il tape aggiunge al volume consolidato; i messaggi amministrativi (sale conditions 15, 16, 38) sono esclusi da ogni denominatore.
| ticker | azioni d’asta k | prezzo d’asta | ora d’asta ET | numero di eseguiti di apertura | eseguiti di apertura alle 09:30 | azioni del più piccolo eseguito di apertura | azioni dei primi 5 minuti k | asta % dei primi 5 minuti | asta % della giornata | azioni d’asta di chiusura m | chiusura vs apertura x |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
L'esatto SQL dietro ogni numero
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)Leggete prima la riga di AAPL: un incrocio di apertura di 323.3 migliaia di azioni a $294.1, con timestamp alle 09:30:00 ET. L’incrocio di NVDA ha interessato 690 migliaia di azioni, quello di SPY 122 migliaia. Il solo incrocio rappresentava 17.4% di tutte le azioni AAPL abbinate nei primi cinque minuti della seduta (1856 migliaia di azioni), 13.8% per NVDA e 9.4% per SPY; tuttavia, rispetto alle azioni scambiate nell’intera giornata, i valori erano appena 0.43%, 0.48% e 0.21%: meno della metà dell’uno per cento.
Le ultime due colonne mostrano il confronto: lo closing cross di AAPL, nello stesso giorno, ha abbinato 10.89 milioni di azioni, 33.7 volte il volume dell’apertura; quello di NVDA è stato 25.2 volte maggiore, quello di SPY 13.5 volte. I fondi indicizzati e i desk che operano in base ai benchmark effettuano le transazioni ai prezzi ufficiali di chiusura, e questo flusso si concentra nell’incrocio delle 16:00; al mattino non esiste un equivalente. L’asta di chiusura è la transazione più grande della giornata; l’asta di apertura è il punto in cui inizia ufficialmente la seduta.
Perché l’apertura ufficiale può differire dal primo trade della giornata?
Quando parte l’asta, il titolo viene solitamente scambiato da ore. La negoziazione pre-market inizia già alle 4:00 a.m. ET, ma nessuno di questi prints determina l’apertura ufficiale. La ricevuta a una riga qui sotto copre AAPL dall’1 al 2 luglio 2026 e si apre con un controllo della sessione: il 2 luglio SPY ha registrato esattamente 390 barre minuto della sessione regolare, una sessione completa verificata, non presunta.
| barre della sessione SPY 2 luglio | numero di eseguiti di chiusura del 1° luglio | prezzo di chiusura precedente | numero di eseguiti di apertura | prezzo d’asta | asta ET | gap overnight % | primo scambio ET | prezzo del primo scambio | scambi prima dell’apertura ufficiale | scambi da campanella a cross | messaggi di apertura ufficiale | messaggi di apertura della sede di quotazione | differenza di prezzo del messaggio di apertura della quotazione |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 390 | 1 | 294.38 | 1 | 294.1 | 09:30:00.491313 | -0.1 | 04:00:00 | 296.1 | 15832 | 173 | 2 | 1 | 0 |
L'esatto SQL dietro ogni numero
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'Il primo print di AAPL del 2 luglio conteggiato nei volumi è stato eseguito alle 04:00:00 ET al prezzo di $296.1. L’apertura ufficiale non è stata definita fino alle 09:30:00.491313 ET, quando il cross è stato eseguito a $294.1. A quel punto erano già stati registrati 15832 prints di AAPL, tra cui 173 nella frazione di secondo compresa tra le 9:30:00.000 e il cross: si tratta di trade continui su altre venue, che iniziano a eseguire gli ordini all’apertura. Poco dopo sono arrivati 2 messaggi “Market Center Official Open” (sale condition 16), cioè la registrazione dell’apertura ufficiale di ciascun market center, senza aggiungere volumi. Quelli dell’exchange di quotazione ripetono esattamente il prezzo dell’asta (differenza: 0).
La ricevuta misura anche il gap overnight. La chiusura ufficiale precedente di AAPL, esattamente il 1 closing print del primo luglio, era pari a $294.38. L’asta della mattina successiva è stata eseguita a $294.1, con una variazione overnight di -0.1%. Nella notte non è successo molto e il gap è stato contenuto. Quando gli utili o le notizie arrivano durante la notte, il pre-market incorpora per primo la nuova informazione; l’asta registra poi il movimento nel dato ufficiale.
Come funziona l’asta di apertura? Ordini market-on-open e limit-on-open
Due tipi di ordine dedicati alimentano l’apertura e rispecchiano i corrispondenti ordini per la chiusura:
- Un ordine market-on-open (MOO) viene eseguito al prezzo stabilito dall’asta, senza protezione sul prezzo, e garantisce quasi sempre la partecipazione all’apertura ufficiale.
- Un ordine limit-on-open (LOO) partecipa all’asta solo se il prezzo di apertura è pari o migliore del suo limite. Offre protezione sul prezzo, ma comporta il rischio di non essere eseguito nell’incrocio.
Entrambi restano presso l’exchange fino all’incrocio e non vengono negoziati nel pre-market durante l’attesa. Gli exchange smettono di accettare o modificare gli ordini di apertura poco prima delle 9:30; gli orari limite variano in base all’exchange e molti broker fissano scadenze anticipate.
Cos’è lo sbilanciamento dell’asta di apertura?
Nella fase che precede l’apertura, gli exchange pubblicano i dati sullo sbilanciamento dell’asta: il numero di azioni in coda per l’acquisto rispetto a quelle in vendita, oltre a un prezzo indicativo al quale l’incrocio si concluderebbe in quel momento. Uno sbilanciamento in acquisto di un milione di azioni significa che, fino a quel momento, un milione di azioni in acquisto all’apertura non ha trovato una controparte. I trader del pre-market monitorano questi flussi e prendono posizione di conseguenza.
La barra al minuto delle 9:30 non coincide nemmeno con l’apertura ufficiale
La maggior parte delle piattaforme grafiche include l’apertura nella prima candela a un minuto: tutti gli scambi eseguiti dalle 9:30:00.000 alle 9:30:59.999, su ogni venue, comprendendo l’asta e quasi un minuto di contrattazione continua. La sua “apertura” è il primo print rilevato nella finestra, non necessariamente quello dell’asta.
| ticker | apertura della barra 09:30 | apertura ufficiale | apertura barra meno ufficiale (centesimi) | volume barra 09:30 k | scambi barra 09:30 | volume barra 12:30 k | x 09:30 vs 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 |
L'esatto SQL dietro ogni numero
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)Il 2 luglio tutte e tre le barre delle 9:30 hanno aperto sopra l’apertura ufficiale: la barra di AAPL indica $294.12 contro i $294.1 ufficiali, con una differenza di 2 centesimi; SPY era 18 centesimi e NVDA 2 centesimi sopra i rispettivi prezzi di apertura. Un print precedente all’incrocio, eseguito su un’altra venue, è stato registrato per primo in ciascuna barra. Quando l’apertura indicata da un grafico differisce di pochi centesimi dall’apertura ufficiale, questo è solitamente il meccanismo.
Le colonne dei volumi mostrano il peso del primo minuto. La barra delle 9:30 di AAPL ha registrato 743 mila azioni in 14662 trade, 6.1 volte il volume della barra di mezzogiorno delle 12:30, pari a 121 mila azioni; il rapporto di NVDA è stato di 7.5 volte e quello di SPY di 3.6 volte. I minuti con volumi così elevati hanno un peso effettivo nel VWAP, il prezzo medio ponderato per i volumi.
Come si presenta l’intera giornata intorno all’apertura?
Raggruppando tutti gli scambi di AAPL del 2 luglio in intervalli di 64 quindici minuti, dalle 4:00 alle 20:00, il picco iniziale assume il giusto contesto: gli intervalli del pre-market registrano volumi appena percettibili, i volumi aumentano nettamente alle 9:30, si riducono verso la pausa pranzo e crescono fino alla chiusura, quando la giornata termina come era iniziata, con un unico scambio di 10.89 milioni di azioni AAPL.
| ora ET | azioni 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 |
L'esatto SQL dietro ogni numero
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_timeCome identificare il print dell’asta di apertura? Codici delle condizioni di vendita
Quale print corrisponde all’asta? Lo mostra il tape stesso; il dizionario dei codici è fornito nello stesso archivio e la ricevuta riportata sotto è una query, non un’affermazione.
| name | id | conteggia ai fini del volume |
|---|---|---|
| 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 |
L'esatto SQL dietro ogni numero
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 idConta un’asimmetria. La chiusura riceve un’unica etichetta consolidata (codice 8, «Closing Prints»); l’etichetta dell’apertura è invece specifica per venue: il codice 17, «Market Center Opening Trade», contrassegna il primo trade di ciascun market center, mentre quello della listing exchange è l’asta. Il tape di SPY del 2 luglio riporta 2 print di questo tipo: il cross da 122 mila azioni e un print da 4 azioni eseguito su un’altra venue. AAPL e NVDA ne mostrano invece esattamente uno ciascuna (1 e 1), tutti nella seconda delle 9:30:00 (la colonna open_prints_at_0930 lo conferma). Ogni dato d’asta riportato sopra è il print di questo tipo più grande della sessione. Il codice 16, «Market Center Official Open», è il relativo riscontro amministrativo privo di volume (0 nella colonna del volume) ed è escluso da ogni denominatore insieme ai codici 15 e 38.
Domande frequenti sull’asta di apertura
A che ora si svolge l’asta di apertura?
Alle 9:30 ET, con l’inizio della sessione regolare; i titoli meno liquidi possono incrociare gli ordini qualche istante più tardi. Il 2 luglio 2026 gli incroci di SPY, AAPL e NVDA sono stati tutti registrati alle 09:30:00 ET, con precisione al secondo. Nei giorni con chiusura anticipata programmata si accorcia il pomeriggio, non la mattina; l’asta di chiusura si sposta invece alle 13:00. Vedi festività di mercato e chiusure anticipate.
Qual è il prezzo ufficiale di apertura?
È il prezzo dell’asta di apertura sulla borsa di quotazione del titolo. Il 2 luglio 2026 l’incrocio di AAPL è stato eseguito a $294.1, il prezzo ufficiale di apertura della giornata, anche se 15832 eseguiti di AAPL erano stati registrati prima quella mattina.
Posso operare nell’asta di apertura?
Sì. Gli ordini market-on-open (MOO) e limit-on-open (LOO) sono standard presso la maggior parte dei broker: un MOO viene eseguito al prezzo stabilito dall’asta, mentre un LOO partecipa solo al proprio limite o a un prezzo migliore. L’inserimento degli ordini termina poco prima delle 9:30, e presso molti broker anche prima.
Perché un titolo ha aperto molto lontano dalla chiusura del giorno precedente?
Gli ordini si accumulano per tutta la notte mentre la borsa è chiusa, e l’asta incrocia quell’interesse accumulato in un unico eseguito. In una notte tranquilla il gap è ridotto: la variazione overnight di AAPL del 2 luglio 2026 è stata pari a -0.1%.
L’asta di apertura è più grande di quella di chiusura?
No, l’asta di chiusura ha dimensioni molto maggiori. Il 2 luglio 2026 l’incrocio di chiusura di AAPL è stato pari a 33.7 volte quello di apertura, quello di NVDA a 25.2 volte e quello di SPY a 13.5 volte. I flussi legati alla replica dei benchmark vengono eseguiti al prezzo ufficiale di chiusura; l’asta di chiusura copre quel punto di riferimento.
Tutti i dati riportati sopra vengono generati da una query archiviata e verificabile; espandi il codice SQL sotto ogni pannello per controllarlo. Per analizzare nel dettaglio l’incrocio di apertura di un ticker che segui, poni le stesse domande in inglese semplice sul terminale Strasmore.