Cos'è il Relative Volume e come leggere l'RVOL
Scopri cos'è il RVOL e come analizzare il volume relativo di un titolo. Impara a confrontare il volume attuale con la media delle ultime venti sessioni.
Il volume relativo (RVOL) misura l'intensità degli scambi di un titolo rispetto alla sua normalità recente: il volume di azioni della sessione diviso per il volume medio giornaliero del titolo, solitamente calcolato sulle ultime venti sessioni. Un RVOL pari a uno indica una giornata ordinaria, 2 significa che sono state scambiate il doppio delle azioni abituali, mentre 0.5 indica una sessione che procede a metà velocità. Ogni dato presente in questa pagina è misurato tramite dati del mercato statunitense a livello di minuto, con la query esatta associata a ogni pannello.
Cos'è il relative volume? Una definizione semplice
Il volume grezzo ha poco valore da solo: cinque milioni di azioni rappresentano una giornata di calma piatta per una mega-cap, mentre un evento annuale per una small-cap. Il relative volume rende esplicito il confronto con la normalità del titolo stesso:
RVOL = volume giornaliero ÷ volume medio giornaliero del titolo (tipicamente le ultime 20 sessioni)
Un esempio ipotetico: un titolo che scambia mediamente 10 milioni di azioni al giorno e ne registra 25 milioni alla chiusura ha un RVOL di 2.5. (Un print è un'operazione riportata sul consolidated tape — il registro delle esecuzioni dell'intero mercato — e "the tape" è il termine tecnico usato dai trader per indicare tale registro.) L'analisi sulle 20 sessioni è una convenzione: le piattaforme utilizzano anche 10, 30 o 50 giorni; corrisponde approssimativamente a un mese solare di trading. La finestra temporale risente anche delle peculiarità del calendario borsistico: una mezza giornata festiva aggiunge alla media solo una frazione del volume di una sessione normale; festività di mercato e chiusure anticipate indica quando avvengono tali eventi.
Perché i trader monitorano il volume relativo?
L'RVOL è un indicatore di partecipazione, non di direzione. I giorni con RVOL elevato si concentrano attorno a eventi identificabili: utili, aggiunte agli indici, notizie principali. Un movimento di prezzo registrato con volumi elevati indica il supporto di una massa di operatori; lo stesso movimento con un RVOL di 0.3 può essere causato da un numero esiguo di ordini. L'attività è legata alla liquidità: tra i titoli, quelli meno scambiati presentano i bid-ask spreads più ampi, stabiliti dai market makers che quotano entrambi i lati per tutto il giorno; per ogni singolo titolo, le quotazioni tendono ad essere più ampie nelle sessioni più tranquille rispetto a quelle più intense. (Il volume sostiene anche il VWAP, il volume-weighted average price — l'altro importante riferimento basato sul volume.)
Come calcolare il volume relativo — e la trappola dell'orario
Il calcolo sull'intera giornata consiste in una singola divisione: il volume totale della sessione ÷ la media dei volumi giornalieri delle ultime venti sessioni. Il dato è affidabile solo dopo la chiusura. L'errore consiste nel calcolarlo a metà sessione: alle 10:30 il totale parziale è naturalmente una frazione di qualsiasi valore giornaliero completo, quindi anche un mattino con forte volatilità risulterà poco attivo. Il volume intraday segue un andamento a forma di U durante la giornata, e ogni RVOL intraday deve basarsi su tale modello.
Di seguito è riportato il modello, misurato su SPY, l'ETF sull'S&P 500: mediana delle azioni scambiate al minuto per ogni intervallo di 30 minuti durante le ultime trenta sessioni completate, inclusi gli orari estesi (dalle 4:00 alle 20:00 Eastern Time).
L'esatto SQL dietro ogni numero
SELECT formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
round(quantileDeterministic(0.5)(toFloat64(volume), toUInt64(toUnixTimestamp(window_start))) / 1000, 1) AS median_minute_volume_k
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= now() - INTERVAL 30 DAY
AND toDate(toTimeZone(window_start, 'America/New_York')) < toDate(toTimeZone(now(), 'America/New_York'))
GROUP BY et_time
HAVING et_time >= '04:00' AND et_time < '20:00'
ORDER BY et_timeL'intervallo delle 9:30 — la prima mezz'ora di trading regolare — ha registrato una mediana di 136 mila azioni al minuto, contro le 3.5 mila dell'intervallo premarket delle 9:00 appena precedente. Il ritmo scende a 49.5 mila nell'intervallo delle 12:30, per poi aumentare verso la chiusura: 168.3 mila nell'intervallo delle 15:30, in vista della asta di chiusura e ben al di sopra del minimo registrato durante l'ora di pranzo. Dopo il segnale delle 16:00, il ritmo al minuto crolla drasticamente durante l'after-hours trading.
Volume relativo intraday: correzione per l'orario
La correzione modifica il denominatore: il totale cumulativo odierno viene confrontato con il totale cumulativo medio alla stessa ora. Ciò richiede di conoscere la quota di volume di una giornata normale già completata in ogni momento della giornata — misurata qui sulle ultime venti sessioni completate di SPY:
L'esatto SQL dietro ogni numero
WITH per_min AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') AS et_min,
sum(toFloat64(volume)) AS v
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= now() - INTERVAL 45 DAY
AND toDate(toTimeZone(window_start, 'America/New_York')) < toDate(toTimeZone(now(), 'America/New_York'))
GROUP BY et_date, et_min
),
last20 AS (
SELECT DISTINCT et_date FROM per_min ORDER BY et_date DESC LIMIT 20
)
SELECT checkpoint AS et_checkpoint,
round(avg(share) * 100, 1) AS avg_pct_of_day_volume_done
FROM (
SELECT et_date,
checkpoint,
sumIf(v, et_min < checkpoint) / sum(v) AS share
FROM (
SELECT et_date, et_min, v, arrayJoin(['10:00', '12:00', '14:00', '15:30', '16:00']) AS checkpoint
FROM per_min
WHERE et_date IN (SELECT et_date FROM last20)
)
GROUP BY et_date, checkpoint
)
GROUP BY checkpoint
ORDER BY checkpointEntro le 10:00, mezz'ora dopo l'apertura del trading regolare, SPY ha tipicamente registrato solo il 12.4% del suo volume totale giornaliero; entro mezzogiorno il 34.8%, entro le 14:00 il 51.1%, entro le 15:30 ancora solo il 67.3%. Anche alla chiusura delle 16:00 il totale è pari al 85.7% — tutto il resto viene riportato alle 16:00 o successivamente, e la maggior parte avviene nei primi minuti dopo la chiusura, quando l'asta di chiusura e altri trade di fine giornata vengono registrati; la sessione after-hours è invece molto meno liquida. Questo è coerente con il crollo nel grafico sopra: il ritmo al minuto precipita alla chiusura, anche se una parte significativa del totale giornaliero viene ancora registrata. Un RVOL mattutino aggiustato per l'orario divide il volume cumulativo odierno per la media a venti giorni moltiplicata per la quota del checkpoint. Una nota: questo schema si riferisce a SPY — ogni titolo segue il proprio orario, e l'esempio pratico qui sotto misura quello di un singolo titolo.
Un esempio pratico: una sessione ad alto volume (MU)
Giugno 2026 è stato un mese intenso per Micron — l'analisi approfondita di MU per giugno 2026 esamina l'intero tape. Ecco la sessione con il maggior volume del mese, con il calcolo del RVOL eseguito in entrambi i modi:
L'esatto SQL dietro ogni numero
WITH mu_daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
sum(toFloat64(volume)) AS day_volume,
sumIf(toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') < '10:30') AS vol_by_1030
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'MU'
AND window_start >= toDateTime('2026-04-15 00:00:00', 'America/New_York')
AND window_start < toDateTime('2026-07-01 00:00:00', 'America/New_York')
GROUP BY et_date
HAVING day_volume > 1000000
),
biggest AS (
SELECT et_date, day_volume, vol_by_1030
FROM mu_daily
WHERE et_date >= toDate('2026-06-01') AND et_date <= toDate('2026-06-30')
ORDER BY day_volume DESC
LIMIT 1
),
trailing AS (
SELECT sum(day_volume) / 20 AS adv, sum(vol_by_1030) / 20 AS avg_by_1030
FROM (
SELECT day_volume, vol_by_1030
FROM mu_daily
WHERE et_date < (SELECT et_date FROM biggest)
ORDER BY et_date DESC
LIMIT 20
)
)
SELECT formatDateTime((SELECT et_date FROM biggest), '%Y-%m-%d') AS session_date,
round((SELECT vol_by_1030 FROM biggest) / 1e6, 1) AS vol_by_1030_m,
round((SELECT avg_by_1030 FROM trailing) / 1e6, 1) AS avg_vol_by_1030_m,
round((SELECT vol_by_1030 FROM biggest) / (SELECT avg_by_1030 FROM trailing), 1) AS rvol_1030_adjusted,
round((SELECT vol_by_1030 FROM biggest) / (SELECT adv FROM trailing), 2) AS rvol_1030_naive,
round((SELECT day_volume FROM biggest) / 1e6, 1) AS session_volume_m,
round((SELECT adv FROM trailing) / 1e6, 1) AS trailing_adv_m,
round((SELECT day_volume FROM biggest) / (SELECT adv FROM trailing), 1) AS rvol_full_dayLa sessione più importante di MU nel mese è avvenuta il 2026-06-25. Entro le 10:30 di quel giorno, erano state scambiate 32.8 milioni di azioni, contro una media di 17.3 milioni per lo stesso orario nelle precedenti 20 sessioni — un RVOL rettificato per l'orario di 1.9. Dividendo il totale del mattino per la media giornaliera di 51 milioni, il valore ingenuo è 0.64: apparentemente una giornata sotto la media, nonostante una mattinata che procedeva a quasi il doppio del ritmo abituale. La sessione si è conclusa con 77.2 milioni di azioni, con un RVOL giornaliero di 1.5.
Quel dato di chiusura può apparire modesto rispetto agli screenshot di titoli che hanno registrato volumi dieci volte superiori alla media — se sia realmente modesto è una questione legata alla distribuzione, che analizzeremo subito dopo.
Cosa si intende per volume relativo elevato?
Nei forum di trading si citano spesso soglie come "RVOL superiore a due è elevato". Ecco la versione misurata: il RVOL giornaliero per ogni azione e ETF quotati negli USA con un volume medio giornaliero a 20 giorni superiore a cinque milioni di azioni (e con uno storico completo di 20 sessioni precedenti), calcolato tramite percentile sull'intero gruppo per l'ultima sessione completata nei nostri dati. Una nota sull'etichetta: lo scanner conta le azioni, non i dollari, quindi questo gruppo ad alto volume include dalle mega-cap e ETF fino alle small-cap economiche ad alto turnover — un elevato volume di azioni non equivale necessariamente a una facile liquidità.
L'esatto SQL dietro ogni numero
WITH daily AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
toFloat64(sum(volume)) AS day_volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 40 DAY
AND toDate(toTimeZone(window_start, 'America/New_York')) < toDate(toTimeZone(now(), 'America/New_York'))
GROUP BY ticker, et_date
),
spy_days AS (
SELECT et_date,
day_volume,
avg(day_volume) OVER (ORDER BY et_date ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS prior_avg
FROM daily
WHERE ticker = 'SPY' AND day_volume > 10000000
),
sessions AS (
SELECT et_date FROM spy_days
),
latest AS (
SELECT max(et_date) AS d FROM spy_days WHERE prior_avg > 0 AND day_volume >= 0.6 * prior_avg
),
prior20 AS (
SELECT et_date FROM sessions WHERE et_date < (SELECT d FROM latest) ORDER BY et_date DESC LIMIT 20
),
rvols AS (
SELECT ticker, day_vol / adv20 AS rvol
FROM (
SELECT ticker,
sumIf(day_volume, et_date = (SELECT d FROM latest)) AS day_vol,
sumIf(day_volume, et_date IN (SELECT et_date FROM prior20)) / 20 AS adv20,
countIf(day_volume > 0 AND et_date IN (SELECT et_date FROM prior20)) AS sessions_traded
FROM daily
WHERE ticker NOT IN ('SPCX')
GROUP BY ticker
HAVING adv20 > 5000000 AND day_vol > 0 AND sessions_traded = 20
)
)
SELECT pair.1 AS percentile,
round(pair.2, 2) AS rvol
FROM (
SELECT arrayJoin(arrayZip(['p10', 'p25', 'p50 (median)', 'p75', 'p90', 'p99'], quantilesExact(0.1, 0.25, 0.5, 0.75, 0.9, 0.99)(rvol))) AS pair
FROM rvols
)
ORDER BY percentileIl titolo mediano in questo gruppo ad alto volume ha scambiato a 0.73 volte la propria media a 20 giorni. Nove titoli su dieci sono rimasti al di sotto di 1.37, e solo uno su cento ha superato 4.71. Confrontando la sessione di MU della sezione precedente con questa tabella, il dato non appare più modesto — anche i titoli molto attivi passano la maggior parte dei giorni vicino alla propria media; i multipli di essa sono rari.
Anche la coda inferiore è rilevante: il 10° percentile si è attestato al 0.11. Letture così basse indicano solitamente un titolo la cui media a 20 giorni è ancora influenzata da una singola sessione enorme — dopo un picco, il denominatore gonfiato mantiene basso il RVOL per settimane. La finestra temporale ha memoria, in entrambe le direzioni.
Una precisazione: si tratta di una sezione trasversale di una singola sessione — i percentili variano di giorno in giorno, e i giorni di eventi di mercato (rebalance degli indici, scadenze delle opzioni) possono spostare l'intera curva verso l'alto.
Quali titoli hanno registrato volumi insoliti? La classifica RVOL
Stesso universo, classificati (la versione settimanale si trova in titoli con volumi insoliti questa settimana): i dieci valori RVOL giornalieri più alti della sessione 2026-07-21 tra i titoli con una media superiore a cinque milioni di azioni al giorno — una lista che uno screener identificherebbe come volumi insoliti. Lo screener richiede venti sessioni complete precedenti — i titoli quotati di recente non hanno una media a venti giorni significativa e altrimenti riempirebbero la classifica con dati errati.
L'esatto SQL dietro ogni numero
WITH daily AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
toFloat64(sum(volume)) AS day_volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 40 DAY
AND toDate(toTimeZone(window_start, 'America/New_York')) < toDate(toTimeZone(now(), 'America/New_York'))
GROUP BY ticker, et_date
),
spy_days AS (
SELECT et_date,
day_volume,
avg(day_volume) OVER (ORDER BY et_date ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS prior_avg
FROM daily
WHERE ticker = 'SPY' AND day_volume > 10000000
),
sessions AS (
SELECT et_date FROM spy_days
),
latest AS (
SELECT max(et_date) AS d FROM spy_days WHERE prior_avg > 0 AND day_volume >= 0.6 * prior_avg
),
prior20 AS (
SELECT et_date FROM sessions WHERE et_date < (SELECT d FROM latest) ORDER BY et_date DESC LIMIT 20
)
SELECT ticker,
formatDateTime((SELECT d FROM latest), '%Y-%m-%d') AS session_date,
round(day_vol / 1e6, 1) AS session_volume_m,
round(adv20 / 1e6, 1) AS adv_20d_m,
round(day_vol / adv20, 1) AS rvol
FROM (
SELECT ticker,
sumIf(day_volume, et_date = (SELECT d FROM latest)) AS day_vol,
sumIf(day_volume, et_date IN (SELECT et_date FROM prior20)) / 20 AS adv20,
countIf(day_volume > 0 AND et_date IN (SELECT et_date FROM prior20)) AS sessions_traded
FROM daily
WHERE ticker NOT IN ('SPCX')
GROUP BY ticker
HAVING adv20 > 5000000 AND day_vol > 0 AND sessions_traded = 20
)
ORDER BY rvol DESC, ticker
LIMIT 10In cima alla classifica, LBGJ ha registrato 169.2 milioni di azioni contro una media a venti giorni di 5.1 milioni — un RVOL di 33.3. Ogni riga ha superato la propria media. Classifiche di questo tipo escludono le mega-cap più note — raddoppiare una media già enorme richiede un numero straordinario di azioni, mentre un titolo meno noto può moltiplicare i propri scambi in una singola sessione.
Note sui dati: selezione della sessione ed esclusioni
Entrambe le tabelle classificate utilizzano lo stesso universo e la stessa regola per la sessione. Una sessione candidata è considerata completa solo quando il volume di SPY per quella data raggiunge almeno il 60% della propria media dei venti giorni precedenti — i dati dell'ultimo giorno arrivano con ritardo, e questo controllo impedisce che una giornata parzialmente caricata venga letta come una sessione conclusa. Entrambe le tabelle escludono inoltre un simbolo a cui le borse hanno recentemente assegnato una nuova quotazione: i feed dei fornitori riportano la cronologia di due società diverse sotto quel ticker, quindi la sua media a venti giorni non è un parametro di riferimento significativo. L'elenco delle esclusioni nel SQL è sincronizzato con i nostri controlli di identità dei simboli ad ogni aggiornamento; qualsiasi simbolo riutilizzato e appena segnalato viene aggiunto con la stessa modalità.
FAQ
Qual è un buon valore di RVOL?
Non esiste una soglia ufficiale. Analizzando i titoli ad alto volume degli Stati Uniti nell'ultima sessione completata nei nostri dati, il valore mediano è stato pari a 0.73 volte la media a 20 giorni, il 90° percentile era 1.37 e il 99° percentile era 4.71.
Cosa significa un RVOL pari a 2?
Il titolo ha scambiato il doppio del suo volume medio per il periodo considerato, solitamente le ultime 20 sessione. L'orario è fondamentale: un valore di 2 rispetto alla media della stessa ora del giorno è un segnale forte a metà sessione; un valore di 2 alla chiusura indica una giornata con un ritmo doppio rispetto al normale.
Come si calcola il volume relativo intraday?
Dividi il volume cumulativo odierno per il volume cumulativo medio alla stessa ora del giorno nell'arco della finestra temporale di riferimento. Dividere un totale di metà mattina per una media giornaliera completa sottostima drasticamente il dato — entro le ore 10:00, SPY ha tipicamente completato solo il 12.4% del suo volume giornaliero finale.
Il volume relativo include il trading premarket e after-hours?
Le convenzioni delle piattaforme variano; questa pagina conta ogni barra di un minuto nel calendario del tempo dell'Est, ore estese incluse. Per SPY il contributo del premarket è visibilmente piccolo — una mediana di 3.5 mila azioni al minuto nella fascia delle 9:00 rispetto a 136 mila subito dopo l'apertura.
Un alto volume relativo è bullish o bearish?
Né l'uno né l'altro. L'RVOL misura la partecipazione, non la direzione — un forte flusso di scambi si registra sia nei giorni migliori che in quelli peggiori di un titolo. Le sessioni ad alto RVOL storicamente coincidono con pubblicazioni di earnings, cambiamenti degli indici e notizie principali; il numero indica che il mercato è presente, non verso quale direzione si sta muovendo.
Ogni pannello sopra riporta l'esatta query SQL che lo ha generato — aprine una, inserisci il tuo ticker e misura l'RVOL per i titoli che scambi effettivamente sulla terminal Strasmore.