Cos'è l'Average Daily Volume ADV
L'ADV indica le azioni scambiate mediamente ogni giorno. È il denominatore per i days to cover e il valore chiave per il relative volume e ogni screener.
L'Average Daily Volume — ADV — è il dato più utilizzato ma raramente definito: rappresenta il numero tipico di azioni scambiate giornalmente per un titolo, calcolato su una media di un determinato periodo di tempo. È il denominatore utilizzato per calcolare i giorni per coprire la posizione, il valore di riferimento per il volume relativo e il test di liquidità in ogni screener. Ciò significa che ognuno di questi indicatori dipende dalle scelte implicite dell'ADV: quale periodo temporale utilizzare, quali sessioni includere, se contare le azioni o il valore in dollari. Questa pagina fornisce una definizione precisa, illustra il calcolo matematico e analizza l'impatto di ogni scelta sui dati di mercato reali.
Volume medio giornaliero, misurato
Venti sessioni in orario regolare — dall'11 giugno al 10 luglio 2026 — quattro nomi noti più uno deliberatamente poco liquido. Azioni, dollari e (per un momento successivo) la quota del volume totale di ogni nome scambiata fuori dall'orario regolare:
L'esatto SQL dietro ogni numero
WITH per_day AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
sumIf(toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') >= '09:30'
AND formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') < '16:00') AS rth_shares,
sumIf(toFloat64(close) * toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') >= '09:30'
AND formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') < '16:00') AS rth_dollars,
sum(toFloat64(volume)) AS all_shares
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'AAPL', 'MU', 'KO', 'CATO')
AND window_start >= toDateTime('2026-06-11 00:00:00', 'America/New_York')
AND window_start < toDateTime('2026-07-11 00:00:00', 'America/New_York')
GROUP BY ticker, et_date
)
SELECT ticker,
round(avg(rth_shares) / 1e6, 2) AS adv_shares_m,
round(avg(rth_dollars) / 1e9, 2) AS adv_dollars_bn,
round(100 * (sum(all_shares) - sum(rth_shares)) / sum(all_shares), 1) AS extended_hours_pct,
count() AS sessions
FROM per_day
GROUP BY ticker
ORDER BY adv_shares_m DESCLa tabella contiene l'intero argomento di questa pagina. MU e AAPL scambiano quasi lo stesso numero di azioni ogni giorno — 42.01M contro 41.47M — ma la colonna dei dollari li separa nettamente: $44.49B contro $12.24B al giorno. Le azioni misurano l'attività; i dollari misurano il denaro. La classifica si inverte persino in cima: SPY guida per azioni (46.01M in 20 sessioni) mentre MU guida questa tabella per dollari. E in fondo, CATO scambia 0.05 milioni di azioni al giorno — così poco denaro che la colonna dei miliardi mostra 0 a questa scala. È il tipo di mercato in cui un singolo ordine istituzionale rappresenta il volume della giornata, e dove i costi di trading appartengono a un universo diverso.
Come calcolare l'average daily volume
Il calcolo è volutamente semplice: sommare i volumi giornalieri delle azioni nell'arco del periodo scelto e dividere per il numero di giorni. Ecco una settimana intera di scambi di Coca-Cola durante l'orario regolare (6–10 luglio 2026), con il totale progressivo e la media calcolati nella stessa query:
L'esatto SQL dietro ogni numero
SELECT session_date,
shares_m,
round(sum(shares_m) OVER (), 1) AS five_day_total_m,
round(avg(shares_m) OVER (), 1) AS adv_m,
round(avg(shares_m) OVER () * 0.01 * 1000, 0) AS one_pct_of_adv_k
FROM (
SELECT formatDateTime(toDate(toTimeZone(window_start, 'America/New_York')), '%Y-%m-%d') AS session_date,
round(sumIf(toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') >= '09:30'
AND formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') < '16:00') / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'KO'
AND window_start >= toDateTime('2026-07-06 00:00:00', 'America/New_York')
AND window_start < toDateTime('2026-07-11 00:00:00', 'America/New_York')
GROUP BY session_date
)
ORDER BY session_dateSomma i cinque giorni — 10.7 + 12.1 + 10.7 + 11 + 8.3 milioni di azioni — e il totale è 52.8M. Dividi per cinque: 10.6M di azioni, l'ADV di KO su 5 sessioni. Un ADV su 20 sessioni segue lo stesso calcolo su 20 righe — ovvero il valore presente nella prima tabella. Nota cosa nasconde la media: 2026-07-07 ha registrato 12.1M e 2026-07-10 ha registrato 8.3M, oscillazioni giornaliere che l'ADV smussa in un unico valore. L'ultima colonna anticipa il position sizing: l'uno per cento dell'ADV di KO corrisponde a circa 106 mila azioni — la scala alla quale un singolo ordine inizia a rappresentare una quota rilevante dei volumi giornalieri.
La finestra temporale è una scelta e determina la velocità con cui l'ADV viene aggiornato
La convenzione comune prevede venti sessioni (un mese di trading); tuttavia si utilizzano anche dieci, trenta, sessantacinque e novanta. La finestra temporale determina la velocità con cui l'ADV viene aggiornato. MU rappresenta l'esempio attuale per il 2026: un titolo il cui tape ha subito un re-rating così forte a metà anno che l'ADV dell'ultimo mese e l'ADV dell'ultimo trimestre hanno fornito dati contrastanti durante la primavera, come dimostrato dalla sua analisi approfondita di giugno. Ecco lo stesso titolo nell'arco degli stessi sette mesi, misurato con entrambe le finestre contemporaneamente:
L'esatto SQL dietro ogni numero
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
sum(toFloat64(volume)) AS day_shares
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'MU'
AND window_start >= toDateTime('2025-08-01 00:00:00', 'America/New_York')
AND window_start < toDateTime('2026-07-11 00:00:00', 'America/New_York')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY et_date
),
rolled AS (
SELECT et_date,
avg(day_shares) OVER (ORDER BY et_date ROWS BETWEEN 19 PRECEDING AND CURRENT ROW) AS adv20,
avg(day_shares) OVER (ORDER BY et_date ROWS BETWEEN 89 PRECEDING AND CURRENT ROW) AS adv90,
row_number() OVER (ORDER BY et_date) AS rn,
count() OVER () AS total_rows
FROM daily
)
SELECT formatDateTime(et_date, '%Y-%m-%d') AS date,
round(adv20 / 1e6, 1) AS adv_20_session_m,
round(adv90 / 1e6, 1) AS adv_90_session_m
FROM rolled
WHERE rn > 90 AND (rn % 3 = total_rows % 3)
ORDER BY et_dateIn 2025-12-10 le due finestre concordavano: 21.3M sul conteggio di 20 sessioni, 19.9M su quello di 90. Entro 2026-04-14 si erano separate a 45.6M contro 31.9M: due ADV "ufficiali" per un singolo titolo in un unico giorno. Ogni screener, dato sui days-to-cover o lettura del volume relativo impostata su una finestra discordava rispetto allo stesso strumento impostato sull'altra. Entro 2026-07-10 le due erano tornate a convergere (42M contro 41.9M): il livello di volume post re-rating era diventato rilevante anche per la finestra temporale più lunga. Quando due fonti discordano sull'ADV di un titolo, la finestra temporale è il primo sospettato; l'inclusione o meno dei volumi durante l'extended-hours è il secondo.
Cosa accade ad ADV subito dopo uno shock di volume
Il grafico sopra lo suggerisce; qui è misurato. Prendiamo lo shock di volume più intenso di MU nel 2026 — la sessione che ha superato maggiormente il proprio ADV a 20 sessione mobile — e confrontiamo l'ADV rilevato da uno screener prima di quel giorno con quello rilevato un mese dopo:
L'esatto SQL dietro ogni numero
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
sum(toFloat64(volume)) AS day_shares
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'MU'
AND window_start >= toDateTime('2025-11-01 00:00:00', 'America/New_York')
AND window_start < toDateTime('2026-07-11 00:00:00', 'America/New_York')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY et_date
),
ranked AS (
SELECT et_date, day_shares,
day_shares / avg(day_shares) OVER (ORDER BY et_date ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS shock_ratio,
row_number() OVER (ORDER BY et_date) AS rn
FROM daily
),
biggest AS (
SELECT et_date, day_shares, shock_ratio
FROM ranked
WHERE rn > 20 AND et_date >= toDate('2026-01-01')
ORDER BY shock_ratio DESC, et_date ASC
LIMIT 1
),
before AS (
SELECT avg(day_shares) AS adv FROM (
SELECT day_shares FROM daily WHERE et_date < (SELECT et_date FROM biggest) ORDER BY et_date DESC LIMIT 20
)
),
after AS (
SELECT avg(day_shares) AS adv FROM (
SELECT day_shares FROM daily WHERE et_date >= (SELECT et_date FROM biggest) ORDER BY et_date ASC LIMIT 20
)
)
SELECT formatDateTime((SELECT et_date FROM biggest), '%Y-%m-%d') AS event_date,
round((SELECT day_shares FROM biggest) / 1e6, 1) AS event_day_shares_m,
round((SELECT adv FROM before) / 1e6, 1) AS adv_20_before_m,
round((SELECT shock_ratio FROM biggest), 1) AS event_vs_prior_adv_x,
round((SELECT adv FROM after) / 1e6, 1) AS adv_20_after_m,
round(100 * ((SELECT adv FROM after) / (SELECT adv FROM before) - 1), 0) AS adv_shift_pctIl 2026-03-19, MU ha registrato 64.7M azioni rispetto a un ADV precedente di 28.7M — ovvero 2.3x il proprio valore di base. Nelle 20 sessioni successive, l'ADV mobile è stato mediamente di 45M: un salto di 57% nel denominatore. Ogni valore derivato dall'ADV è variato di conseguenza — i valori di volume relativo sono diminuiti (poiché la base è cresciuta) e i days to cover sono diminuiti (poiché il denominatore è cresciuto), senza che fosse necessario alcun cambiamento nelle posizioni reali. Nel caso di MU, l'elevata attività di trading è persistita — lo shock ha segnato un re-rating, non un evento di un solo giorno — ma la meccanica è identica in entrambi i casi: dopo un periodo di forte intensità, l'ADV misura l'evento piuttosto che le abitudini del titolo per esattamente la durata di una finestra temporale.
Definizione di liquidità misurata
"Milioni di dollari al giorno" è la formula generica usata per indicare la commerciabilità. Ecco la distribuzione reale: ogni simbolo quotato negli USA con almeno quindici sessioni identiche su venti, classificati per ADV in dollari:
L'esatto SQL dietro ogni numero
WITH per_ticker AS (
SELECT ticker, avg(day_dollars) AS adv_dollars
FROM (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
sumIf(toFloat64(close) * toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') >= '09:30'
AND formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') < '16:00') AS day_dollars
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= toDateTime('2026-06-11 00:00:00', 'America/New_York')
AND window_start < toDateTime('2026-07-11 00:00:00', 'America/New_York')
AND match(ticker, '^[A-Z]+$')
GROUP BY ticker, et_date
)
GROUP BY ticker
HAVING count() >= 15
)
SELECT count() AS names,
round(quantileDeterministic(0.25)(adv_dollars, cityHash64(ticker)) / 1e6, 2) AS p25_m,
round(quantileDeterministic(0.50)(adv_dollars, cityHash64(ticker)) / 1e6, 1) AS median_m,
round(quantileDeterministic(0.75)(adv_dollars, cityHash64(ticker)) / 1e6, 1) AS p75_m,
round(quantileDeterministic(0.90)(adv_dollars, cityHash64(ticker)) / 1e6, 1) AS p90_m,
round(quantileDeterministic(0.99)(adv_dollars, cityHash64(ticker)) / 1e6, 0) AS p99_m,
countIf(adv_dollars >= 1e6) AS names_above_1m,
countIf(adv_dollars >= 10e6) AS names_above_10m,
countIf(adv_dollars >= 100e6) AS names_above_100m,
countIf(adv_dollars >= 1e9) AS names_above_1bn
FROM per_tickerSu 10864 simboli, il valore mediano è di 2.2M al giorno — la metà del mercato USA scambia meno di tale cifra. Un quarto scambia meno di 0.33M. Il 75° percentile è a 20.4M, il 90° a 113.7M, il 99° a 1333M. Analizzando le soglie tonde: 6515 nomi superano 1M al giorno, 3535 superano 10M, 1166 superano 100M — e solo 130 superano 1B. I titoli oggetto di copertura finanziaria operano quasi interamente all'interno di quest'ultimo gruppo; il titolo quotato mediano è uno strumento completamente diverso.
Dove l'ADV decide silenziosamente altri valori
- Days to cover = short interest ÷ ADV. Un picco di volume riduce il rapporto senza variazioni della posizione short — la causa è il denominatore.
- Relative volume = volume odierno ÷ ADV. Stesso valore, ruolo opposto: qui l'ADV è il benchmark da superare.
- Liquidity screens ("solo titoli con ADV superiore a 1M") — ogni backtest e screener ne include uno, e il survivorship bias ne è la conseguenza: i titoli entrano in tali screener durante le loro settimane di maggiore volatilità.
- Position sizing — l'abitudine istituzionale di scambiare solo una piccola percentuale dell'ADV giornaliero è il motivo per cui i grandi fondi non possono detenere determinati small cap: servirebbero settimane di volume totale per costruire o chiudere una posizione.
Il caso dei days-to-cover merita un'analisi con dati reali, poiché anche il dato "ufficiale" dipende dalla scelta dell'ADV effettuata da terzi. FINRA pubblica i days to cover utilizzando il proprio denominatore di volume (ogni sede ha la propria finestra di reporting, con un limite minimo di 1.0 — vedi come arrivano questi dati); ricalcolando lo stesso rapporto con l'ADV delle sessioni regolari di venti sessioni di questa pagina, il risultato cambia:
L'esatto SQL dietro ogni numero
WITH our_adv AS (
SELECT ticker, avg(day_shares) AS adv
FROM (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
sumIf(toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') >= '09:30'
AND formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') < '16:00') AS day_shares
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('MU', 'KO')
AND window_start >= toDateTime('2026-06-11 00:00:00', 'America/New_York')
AND window_start < toDateTime('2026-07-11 00:00:00', 'America/New_York')
GROUP BY ticker, et_date
)
GROUP BY ticker
),
si AS (
SELECT ticker,
max(short_interest) AS short_interest,
max(avg_daily_volume) AS finra_adv,
max(days_to_cover) AS finra_dtc
FROM global_markets.stocks_short_interest
WHERE settlement_date = '2026-06-30' AND ticker IN ('MU', 'KO')
GROUP BY ticker
)
SELECT si.ticker AS ticker,
round(si.short_interest / 1e6, 1) AS shares_short_m,
round(si.finra_adv / 1e6, 1) AS finra_adv_m,
round(si.finra_dtc, 2) AS finra_days_to_cover,
round(our_adv.adv / 1e6, 1) AS rth_adv_20_session_m,
round(si.short_interest / our_adv.adv, 2) AS days_to_cover_recomputed
FROM si
INNER JOIN our_adv ON si.ticker = our_adv.ticker
ORDER BY tickerStesso short interest, due denominatori. Per KO, FINRA riporta 2.06 giorni sul proprio volume di 24.1M share; rispetto all'ADV delle sessioni regolari di 12.4M di questa pagina, la stessa posizione short di 49.6M share corrisponde a 4 giorni — quasi il doppio. Per MU, il dato pubblicato è pari al limite minimo riportato di 1; ricalcolato, è di 0.75 giorni. Nessun dato è errato — entrambi rispondono utilizzando denominatori diversi. La lezione è generale: qualsiasi rapporto che includa l'ADV sta citando silenziosamente le scelte di finestra temporale e sessione di qualcuno.
L'ADV è applicabile alle opzioni?
I trader di opzioni utilizzano lo stesso concetto con una variante: il volume viene conteggiato in contratti, e ogni contratto standard su azioni controlla 100 azioni. Stesse venti sessioni, quattro tape di opzioni, con il numero di contratti convertito in esposizione equivalente in azioni:
L'esatto SQL dietro ogni numero
WITH daily AS (
SELECT multiIf(ticker LIKE 'O:SPY2%', 'SPY', ticker LIKE 'O:AAPL2%', 'AAPL', ticker LIKE 'O:MU2%', 'MU', 'KO') AS underlying,
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
sum(toFloat64(volume)) AS contracts
FROM global_markets.options_minute_aggs
WHERE (ticker LIKE 'O:SPY2%' OR ticker LIKE 'O:AAPL2%' OR ticker LIKE 'O:MU2%' OR ticker LIKE 'O:KO2%')
AND window_start >= toDateTime('2026-06-11 00:00:00', 'America/New_York')
AND window_start < toDateTime('2026-07-11 00:00:00', 'America/New_York')
GROUP BY underlying, et_date
)
SELECT underlying,
round(avg(contracts) / 1e3, 1) AS avg_daily_contracts_k,
round(avg(contracts) * 100 / 1e6, 1) AS share_equivalent_m,
count() AS sessions
FROM daily
GROUP BY underlying
ORDER BY avg_daily_contracts_k DESCLe differenze di scala superano qualsiasi dato nella tabella delle azioni. Il tape delle opzioni di SPY ha registrato una media di 12543.2 mila contratti al giorno — 1254.3M di azioni di esposizione equivalente, un multiplo elevato rispetto all'ADV di SPY pari a 46.01M di azioni. KO segue la tendenza opposta: 64.6 mila contratti (6.5M di azioni equivalenti), valore inferiore al suo ADV di 12.4M di azioni. La liquidità delle opzioni si concentra in pochi sottostanti e si dirada ulteriormente tra gli strike e le scadenze; un dato aggregato come questo sovrastima il volume di ogni singolo contratto, pertanto il volume per contratto e l'open interest devono essere verificati prima di dimensionare un ordine di opzioni.
Leggere l'ADV come un professionista
Tre abitudini colmano il divario tra la conoscenza della definizione e il suo utilizzo pratico. Affiancare l'ADV al dollar ADV — la prima tabella mostra due titoli con quote quasi identiche ma con valori monetari molto distanti; la colonna relativa al denaro è quella che interessa realmente a un ordine. Diffidare dell'ADV subito dopo eventi significativi — il pannello degli shock ha fornito un dato concreto: un forte movimento ha spostato il denominatore del 57% in un mese, deflazionando meccanicamente il volume relativo e i giorni per coprire fino a quando il picco esce dalla finestra temporale. Confrontare l'ADV con il calendario — i venerdì di scadenza, i giorni di rebalance e le date di variazione degli indici aumentano il volume di tutti contemporaneamente (soprattutto i [[what-is-triple-witching|witching days]), quindi un giorno di forte volume su tutto il mercato non dice nulla sulla dinamica di un singolo titolo.
FAQ sull'Average daily volume
Qual è un buon average daily volume?
Misurato su 10864 simboli US nell'arco di 20 sessioni, il valore mediano dell'ADV in dollari è stato di $2.2M; 3535 titoli hanno scambiato 10 milioni di dollari al giorno e solo 130 hanno superato il miliardo di dollari. Per gli ordini di dimensioni retail, il limite utile è espresso in dollari e non in azioni — i titoli nel gruppo superiore ai 10 milioni di dollari scambiano senza che un piccolo ordine ne sposti il prezzo.
Come si calcola l'average daily volume?
Si sommano i volumi giornalieri delle azioni nell'arco della finestra temporale scelta e si divide per il numero di giorni. Le cinque sessioni di KO dal 6 al 10 luglio 2026 sommano 52.8M azioni; divise per cinque, l'ADV è di 10.6M. Un ADV a 20 giorni segue lo stesso calcolo su 20 sessioni.
Su quale finestra temporale viene misurato l'ADV?
Più comunemente su 20 sessioni di trading (circa un mese), ma circolano anche versioni a 10, 30, 65 e 90 giorni — e i valori divergono sensibilmente dopo ogni shock di volume. Il 2026-04-14, l'ADV a 20 sessioni di MU era di 45.6M, mentre il suo ADV a 90 sessioni era di 31.9M nello stesso giorno. Verificate la finestra temporale prima di confrontare le fonti.
L'ADV include i volumi premarket e after-hours?
Dipende dalla fonte — i dati di questa pagina si riferiscono solo alle ore regolari. Misurati sulle stesse 20 sessioni, le sessioni estese hanno rappresentato il 18.3% del volume totale di SPY, il 6.9% di AAPL e il 0.2% del sottile volume di CATO — la guida alle sessioni estese analizza nel dettaglio le sessioni.
L'ADV si riferisce alle azioni o ai dollari?
Tradizionalmente si riferisce alle azioni, ma l'ADV in dollari è una misura di liquidità migliore per i titoli azionari. Nelle stesse 20 sessioni, MU e AAPL hanno scambiato rispettivamente 42.01M e 41.47M azioni al giorno — quasi a pari merito — mentre i loro ADV in dollari erano di $44.49B e $12.24B. Stesso numero di azioni, volumi monetari molto diversi.
Ogni dato è il risultato di una query salvata e versionata — è possibile espandere la SQL sotto ogni pannello, oppure calcolare qualsiasi finestra temporale per qualsiasi ticker sulla terminale Strasmore.