Dimensioni del feed delle quotazioni OPRA
Analisi del volume del feed OPRA: confrontiamo il numero di aggiornamenti NBBO registrati nel nostro warehouse con l'intero tape delle quotazioni azionarie.
Il feed delle quotazioni delle opzioni è il flusso di market data più ampio negli Stati Uniti: ogni contratto option quotato ha il proprio best bid e best ask, e OPRA — l'Options Price Reporting Authority, il consolidated tape per le opzioni quotate negli USA — pubblica ogni aggiornamento per ognuno di essi. Su 2026-07-13, una singola sessione ordinaria, il nostro warehouse ha registrato 8.23 miliardi di aggiornamenti delle quotazioni delle opzioni — 16.8 volte la dimensione dell'intero tape delle quotazioni azionarie dello stesso giorno. Questa pagina misura direttamente questo flusso massivo, con la query esatta che genera ogni numero.
Perché il feed delle quotazioni delle opzioni è così vasto?
Un'azione ha un unico NBBO — un unico bid-ask spread da aggiornare. Una catena di opzioni moltiplica questo valore: ogni contratto quotato — per ogni combinazione di data di scadenza, strike price e call o put — riporta il proprio NBBO. In 2026-07-13, solo lo SPY ha generato 9156 contratti distinti con quotazioni attive, considerando solo le scadenze del 2026.
La moltiplicazione non si ferma al numero dei contratti. Il valore di un'opzione oscilla con il titolo sottostante; quando il prezzo dell'azione cambia, i market maker aggiornano le quotazioni su tutta la catena — per ogni strike e ogni scadenza, simultaneamente, indipendentemente dall'esecuzione di scambi su tali contratti. Questo è il calcolo che determina i dati riportati di seguito: miliardi di aggiornamenti delle quotazioni per sessione e 776 aggiornamenti delle quotazioni per ogni operazione sulle opzioni eseguita.
Un giorno di tape delle opzioni, conteggiato
Quanti dati si generano in pratica? Il pannello sottostante conta ogni aggiornamento delle quotazioni delle opzioni memorizzato nel nostro warehouse per 2026-07-13 — ovvero l'ultima sessione completata almeno cinque giorni solari fa, secondo la regola spiegata nella sezione sulla scarsità — e lo confronta con il tape completo delle quotazioni azionarie della stessa sessione, lo stesso confronto diretto utilizzato nel riepilogo di mercato del 7 luglio per il tape di lunedì. Entrambi i conteggi coprono l'intero giorno solare, secondo l'orario universale (UTC), che comprende l'intera sessione delle opzioni negli Stati Uniti.
L'esatto SQL dietro ogni numero
WITH (
SELECT max(toDate(toTimeZone(window_start, 'America/New_York')))
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime(today() - 10)
AND window_start < toDateTime(today() - 4)
) AS session_day,
(
SELECT (count(), uniqExact(ticker))
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= toDateTime(session_day)
AND sip_timestamp < toDateTime(session_day + 1)
) AS stock_tape,
(
SELECT (count(), uniqExact(ticker))
FROM global_markets.options_trades
WHERE sip_timestamp >= toDateTime(session_day)
AND sip_timestamp < toDateTime(session_day + 1)
) AS option_trades_t,
(
SELECT toUInt32(max(sip_timestamp)) - toUInt32(min(sip_timestamp))
FROM global_markets.cache_options_quotes
WHERE ticker >= 'O:SPY26' AND ticker < 'O:SPY27'
AND sip_timestamp >= toDateTime(session_day)
AND sip_timestamp < toDateTime(session_day + 1)
) AS spy_span_seconds
SELECT
toString(session_day) AS session_date,
round(count() / 1e9, 2) AS option_quote_updates_bn,
round(stock_tape.1 / 1e6, 0) AS stock_quote_updates_m,
stock_tape.2 AS stock_symbols_quoted,
round(count() / stock_tape.1, 1) AS option_to_stock_ratio,
round(option_trades_t.1 / 1e6, 1) AS option_trades_m,
round(option_trades_t.2 / 1e3, 0) AS option_contracts_traded_k,
round(count() / option_trades_t.1, 0) AS quote_updates_per_trade,
round(count() / spy_span_seconds / 1e3, 0) AS avg_updates_per_second_k
FROM global_markets.cache_options_quotes
WHERE sip_timestamp >= toDateTime(session_day)
AND sip_timestamp < toDateTime(session_day + 1)L'intero tape delle opzioni ha raggiunto 8.23 miliardi di aggiornamenti NBBO. Solo 338 mila contratti distinti sono stati effettivamente SCAMBIATI quel giorno — il flusso delle quotazioni riprezza molti più strumenti rispetto a quelli che cambiano effettivamente di mano. Il tape azionario della stessa giornata — ogni aggiornamento delle quotazioni consolidate per ogni titolo e ETF quotato, incluso il premarket e il after-hours — ha registrato 491 milioni di aggiornamenti su 12958 simboli. Il rapporto è il dato principale: il flusso delle quotazioni delle opzioni è stato 16.8 volte più grande del flusso delle quotazioni azionarie.
Altri due dati derivanti dalla stessa scansione definiscono la struttura del feed. Calcolati sulla media dell'arco temporale di quotazione della sessione (misurati sulla catena di SPY, la più profonda del tape), gli aggiornamenti sono arrivati a 339 mila al secondo. E il mercato delle opzioni ha registrato 10.6 milioni di trade effettivi quel giorno — ovvero 776 aggiornamenti delle quotazioni per ogni singolo trade. È la quotazione, e non il trading, a saturare la banda.
Una sezione di un sottostante: la option chain di SPY in un giorno
Analizzare l'intero flusso di dati è complesso e costoso in termini di elaborazione; per questo è necessario isolare una sezione. Il pannello sottostante conta ogni aggiornamento delle quotazioni per i contratti option di SPY con scadenza nel 2026, riferito alla stessa sessione e allo stesso giorno secondo il fuso UTC: la chain di un singolo sottostante, estratta dal flusso massivo tramite un intervallo di ticker.
L'esatto SQL dietro ogni numero
WITH (
SELECT max(toDate(toTimeZone(window_start, 'America/New_York')))
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime(today() - 10)
AND window_start < toDateTime(today() - 4)
) AS session_day
SELECT
toString(session_day) AS session_date,
round(count() / 1e6, 1) AS spy_quote_updates_m,
uniqExact(ticker) AS spy_contracts_quoted,
round(count() / uniqExact(ticker) / 1e3, 1) AS avg_updates_per_contract_k,
uniqExactIf(ticker, substring(ticker, 6, 6) = formatDateTime(session_day, '%y%m%d')) AS same_day_expiry_contracts,
round(100.0 * countIf(substring(ticker, 6, 6) = formatDateTime(session_day, '%y%m%d')) / count(), 1) AS same_day_expiry_pct_of_updates,
quantileExactWeightedIf(0.5)(toInt32(round(toFloat64(ask_price - bid_price) * 100)), 1, bid_price > 0 AND ask_price >= bid_price AND substring(ticker, 6, 6) = formatDateTime(session_day, '%y%m%d')) AS same_day_median_width_cents,
quantileExactWeightedIf(0.5)(toInt32(round(toFloat64(ask_price - bid_price) * 100)), 1, bid_price > 0 AND ask_price >= bid_price) AS all_spy_median_width_cents,
round(countIf(NOT (bid_price > 0 AND ask_price >= bid_price)) / 1e3, 0) AS dropped_invalid_quotes_k,
formatDateTime(toTimeZone(min(sip_timestamp), 'America/New_York'), '%H:%i') AS spy_first_quote_et,
formatDateTime(toTimeZone(max(sip_timestamp), 'America/New_York'), '%H:%i') AS spy_last_quote_et,
toHour(toTimeZone(min(sip_timestamp), 'America/New_York')) * 60 + toMinute(toTimeZone(min(sip_timestamp), 'America/New_York')) AS spy_first_quote_et_minute,
toHour(toTimeZone(max(sip_timestamp), 'America/New_York')) * 60 + toMinute(toTimeZone(max(sip_timestamp), 'America/New_York')) AS spy_last_quote_et_minute
FROM global_markets.cache_options_quotes
WHERE ticker >= 'O:SPY26' AND ticker < 'O:SPY27'
AND sip_timestamp >= toDateTime(session_day)
AND sip_timestamp < toDateTime(session_day + 1)Un singolo sottostante ha generato 337.1 milioni di aggiornamenti delle quotazioni delle option in una sola giornata: 9156 contratti quotati, con una media di 36.8 mila aggiornamenti per contratto. Per confronto, l'intero flusso azionario nel pannello superiore — che include ogni azione e ETF quotato — ha registrato 491 milioni di aggiornamenti in quella sessione.
Le scadenze in giornata offrono un quadro più preciso. Le option 0DTE — contratti scambiati nel proprio giorno di scadenza — dominano il trading delle option; la tabella analizzata più avanti mostra i cinque contratti SPY più attivi della sessione con scadenza nello stesso giorno. Nel flusso delle quote, invece, rappresentano solo una frazione: i 334 contratti in scadenza in giornata hanno rappresentato il 4.5% degli aggiornamenti delle quotazioni di SPY. I market maker mantengono la quotazione di l'intera chain: gli strike di dicembre si aggiornano per tutta la sessione, indipendentemente dalla presenza di scambi.
Anche l'ampiezza dello spread è un parametro rilevante. Tra i suddetti contratti SPY in scadenza in giornata, lo spread mediano quotato — differenza tra ask e bid, calcolata su ogni aggiornamento NBBO valido — è stato di 3¢; per l'intera chain con scadenza nel 2026, la stessa mediana è stata di 4¢. (197 mila aggiornamenti unidirezionali o incrociati sono stati esclusi dalle mediane dello spread e conteggiati nel pannello.)
Come leggere un ticker di un'opzione (simbologia OCC)
Ogni contratto in questi pannelli è identificato da un simbolo di opzione OCC — il formato standard gestito dalla Options Clearing Corporation. Il nostro database lo precede con O:. Prendiamo O:SPY261218C00700000 come esempio pratico:
- Root —
SPY: la root dell'opzione, fino a sei caratteri, solitamente il ticker del sottostante. - Expiration —
261218: la data di scadenza in formato YYMMDD — 18 dicembre 2026. - Type —
Cper una call,Pper una put. - Strike —
00700000: il prezzo di strike moltiplicato per 1.000 e completato con zeri fino a otto cifre — $700.00.
Questo formato fisso permette di estrarre la chain di una root tramite un semplice intervallo di ticker: ogni contratto SPY con scadenza nel 2026 è compreso tra O:SPY26 e O:SPY27, ovvero il filtro esatto nel pannello sopra. Ecco i cinque contratti SPY più scambiati della sessione con il simbolo analizzato:
L'esatto SQL dietro ogni numero
WITH (
SELECT max(toDate(toTimeZone(window_start, 'America/New_York')))
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime(today() - 10)
AND window_start < toDateTime(today() - 4)
) AS session_day
SELECT ticker AS occ_ticker,
any(underlying_symbol) AS root,
concat('20', substring(ticker, 6, 2), '-', substring(ticker, 8, 2), '-', substring(ticker, 10, 2)) AS expiry_parsed,
if(any(option_type) = 'C', 'call', 'put') AS call_or_put,
any(toFloat64(strike_price)) AS strike_usd,
round(sum(size) / 1e3, 1) AS contracts_traded_k,
if(substring(ticker, 6, 6) = formatDateTime(session_day, '%y%m%d'), 1, 0) AS expires_same_day
FROM global_markets.options_trades
WHERE sip_timestamp >= toDateTime(session_day)
AND sip_timestamp < toDateTime(session_day + 1)
AND ticker >= 'O:SPY26' AND ticker < 'O:SPY27'
GROUP BY ticker
ORDER BY contracts_traded_k DESC, ticker
LIMIT 5La parte superiore della tabella dei volumi riguarda esclusivamente il traffico giornaliero: tutti e cinque i contratti sono scaduti il 2026-07-13, la data della sessione stessa. Il più scambiato tra questi — O:SPY260713P00749000, un contratto put con strike a $749 — ha registrato 732.2 mila contratti. Confrontando questo dato con il pannello delle quotazioni precedente, si nota che il trading si concentra all'inizio della chain, con spread presenti su tutta la serie.
Perché i dati sulle quotazioni delle opzioni sono scarsi
Archiviare questo feed comporta l'aggiunta di un giorno come quello misurato sopra — per ogni sessione, indefinitamente. Questo riassume la questione economica. La maggior parte dei prodotti di market-data, sia retail che professional, include i prezzi delle azioni e talvolta i trades delle opzioni; la cronologia completa delle quote delle opzioni è rara in qualsiasi catalogo, a qualsiasi prezzo. Il nostro warehouse contiene la cronologia delle quote equity fino al 2003 e la cronologia dei trade delle opzioni fino al 2014, mentre la tabella delle quote delle opzioni inizia nel 2022 — la cronologia tick più recente che conserviamo, e di gran lunga la tabella più grande che gestiamo.
Una nota informativa deve essere resa esplicita: le quote delle opzioni sono anche il dataset più lento ad arrivare tra quelli che gestiamo. Le nuove sessioni arrivano tipicamente con uno o due giorni di ritardo rispetto al calendario — a volte di più — mentre le quote equity si stabilizzano solitamente entro un giorno. Ogni pannello in questa pagina si riferisce alla sessione completata più recente con almeno cinque giorni solari di ritardo (2026-07-13 nell'esecuzione attuale), e il refresh settimanale riesegue ogni query seguendo la stessa regola, mantenendo ogni numero misurato su un giorno interamente ingerito invece di un margine iniziale parzialmente caricato.
FAQ
Qual è il volume giornaliero del feed delle opzioni OPRA?
Misurato nei nostri database: 8.23 miliardi di aggiornamenti delle quotazioni delle opzioni in 2026-07-13 — una media di 339 mila aggiornamenti al secondo durante l'arco della sessione. Il feed OPRA grezzo include messaggi di trading e amministrativi oltre alle quotazioni, e il conteggio ufficiale dei messaggi è ancora superiore.
Il feed delle quotazioni delle opzioni è più grande del feed delle quotazioni azionarie?
Sì — di molte volte, non in percentuale. Nella sessione misurata sopra, gli aggiornamenti delle quotazioni delle opzioni sono stati 16.8 volte superiori al numero degli aggiornamenti delle quotazioni azionarie: 8.23 miliardi contro 491 milioni. Ogni azione mantiene un unico NBBO aggiornato; la sua catena di opzioni ne mantiene centinaia o migliaia.
Perché i dati di mercato delle opzioni sono così costosi?
La scala è l'aspetto visibile: un feed misurato in miliardi di aggiornamenti per sessione richiede un'infrastruttura reale per la ricezione, l'archiviazione e l'interrogazione, con costi che si ripetono ogni giorno di trading. Le commissioni di licenza degli exchange si aggiungono ai costi di ingegneria. I pannelli sopra mostrano esattamente cosa deve gestire un dataset completo di quotazioni delle opzioni.
Quanti contratti di opzioni vengono quotati in una giornata normale?
Molto più degli scambi, con un ampio margine. In 2026-07-13, 338 mila contratti distinti hanno registrato almeno un trade, mentre la sola catena di SPY con scadenza 2026 ha mantenuto 9156 contratti in quotazione — e l'intero universo quotato copre ogni sottostante proprio come la catena di SPY copre i suoi strike. (Contare ogni singolo contratto distinto nel flusso di quotazioni giornaliero richiede una scansione così vasta che la escludiamo da una pagina aggiornata settimanalmente — l'unico numero che qui non pubblichiamo deliberatamente.)
Le opzioni vengono quotate dopo la chiusura del mercato?
Le opzioni azionarie statunitensi quotate seguono gli orari della borsa. Nella sessione misurata sopra, la prima quotazione di SPY è avvenuta alle 09:30 ET e l'ultima alle 16:15 ET — nessuna sessione overnight. Il tape azionario, per confronto, fornisce quotazioni durante il premarket e l'after-hours.
Ogni pannello sopra include l'esatta query SQL che lo ha generato — espandine una, sostituisci un sottostante o una data e dimensiona la porzione di feed che effettivamente scambi sulla terminale Strasmore.