IV Rank vs IV Percentile: formule e differenze
IV rank e IV percentile a confronto: formule complete, un esempio da verificare a mano e il caso in cui divergono nettamente sullo stesso ticker.
IV rank e IV percentile si distinguono per due calcoli applicati agli stessi dati. L’IV rank misura la posizione della volatilità implicita di oggi all’interno del suo intervallo di 52 settimane, dal valore più basso a quello più alto. L’IV percentile conta la quota di sedute nel periodo analizzato che si sono chiuse al di sotto del valore odierno. Lo stesso ticker, nello stesso pomeriggio, può registrare 18 su una metrica e 70 sull’altra.
Le due formule, per esteso
Rank IV = (IV corrente meno IV minimo delle 52 settimane) / (IV massimo delle 52 settimane meno IV minimo delle 52 settimane) x 100
Percentile IV = (giorni di contrattazione nel periodo con IV inferiore all’IV odierna) / (giorni di contrattazione totali nel periodo) x 100
Entrambe restituiscono un valore compreso tra 0 e 100. Entrambe richiedono gli stessi due input: una serie giornaliera della volatilità implicita del titolo e una finestra di osservazione, convenzionalmente pari a 252 giorni di contrattazione. La volatilità implicita è la stima annualizzata del mercato delle opzioni sull’ampiezza del movimento del titolo, ricavata dai prezzi correnti delle opzioni. L’articolo che cosa misura la volatilità implicita la illustra dalle basi.
La differenza riguarda la quota della finestra che ciascun indicatore considera. Il rank IV prende in esame esattamente due giorni su 252: quello con il valore più alto e quello con il valore più basso. Tutto ciò che sta in mezzo viene ignorato. Il percentile IV considera invece ogni giorno allo stesso modo e non tiene conto della distanza tra i valori osservati. Il primo indica una posizione all’interno di un intervallo. Il secondo conta i giorni.
Un esempio pratico verificabile a mano
Prendiamo una serie IV fittizia di dieci giorni, con una rilevazione per seduta: 22, 24, 21, 60, 26, 25, 23, 27, 24 e oggi 28. Il minimo è 21 e il massimo è 60.
IV rank: (28 - 21) / (60 - 21) x 100 = 7 / 39 x 100 = 17,9.
IV percentile: sette delle dieci rilevazioni, 22, 24, 21, 26, 25, 23 e 24, sono inferiori a 28, quindi 7 / 10 x 100 = 70,0.
Un IV rank di 17,9 indica una volatilità a buon mercato. Un IV percentile di 70 indica che, nella maggior parte delle sedute della finestra considerata, la volatilità è stata inferiore al livello attuale. Entrambe sono descrizioni corrette degli stessi dieci valori.
Ora cambiamo un solo valore. Sostituiamo 60 con 30 e lasciamo invariate le altre nove rilevazioni. L’IV rank diventa (28 - 21) / (30 - 21) x 100 = 77,8. L’IV percentile non cambia: resta 70,0. Una sola seduta, quella che aveva fissato il massimo, vale 60 punti per l’IV rank e nulla per l’IV percentile.
Questo è il punto debole strutturale dell’IV rank. Un singolo picco nella finestra, un gap legato agli utili o uno spavento di una sola giornata, amplia il denominatore e mantiene il rank vicino al minimo per i dodici mesi successivi, molto tempo dopo che il picco è uscito dalla catena delle opzioni. Quando i due indicatori divergono nettamente, la divergenza segnala di solito la presenza di un outlier nella finestra; il percentile descrive più fedelmente dove si è collocata la volatilità nel tempo. L’IV rank è l’indicatore più utile quando l’intervallo è regolare e sia il minimo sia il massimo sono rappresentati da più di una seduta. Nessuno dei due valori dice nulla sulla direzione.
Come appare una vera serie di IV
Questo è il materiale grezzo su cui vengono eseguite entrambe le formule. Il pannello sotto costruisce una lettura giornaliera della volatilità implicita at the money di AAPL, usando contratti con scadenza tra 20 e 45 giorni e entro il 5% dal prezzo dell’azione, poi calcola la media delle letture per settimana.
L'esatto SQL dietro ogni numero
WITH daily AS
(
SELECT
date,
avg(toFloat64(implied_volatility)) * 100 AS atm_iv
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date >= today() - 371
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
GROUP BY date
)
SELECT
toString(toMonday(date)) AS week,
formatDateTime(toMonday(date), '%b %e, %Y') AS week_label,
round(avg(atm_iv), 2) AS aapl_atm_iv_pct,
round(min(atm_iv), 2) AS week_low_iv_pct,
round(max(atm_iv), 2) AS week_high_iv_pct
FROM daily
GROUP BY toMonday(date)
ORDER BY toMonday(date)La serie contiene 54 punti settimanali, dalla settimana del Jul 28, 2025, con una media di 30.03%, fino alla settimana del Aug 3, 2026, a 27.7%. La forma della linea determina se rank e percentile coincidono. Una linea con un unico picco molto pronunciato li separa. Una linea che oscilla all’interno di una fascia stabile li mantiene vicini. La nostra pagina volatilità implicita di AAPL segue questo titolo nel tempo; per una valutazione del livello assoluto senza serie storica, vedere la IV del 30% è elevata.
IV rank e IV percentile su otto ticker
Stesse formule, stesso periodo di osservazione, otto titoli liquidi, una sola seduta. La colonna gap indica la distanza assoluta tra i due punteggi.
L'esatto SQL dietro ogni numero
WITH daily AS
(
SELECT
underlying_symbol AS symbol,
date,
avg(toFloat64(implied_volatility)) * 100 AS atm_iv
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'TSLA', 'SPY', 'QQQ', 'KO')
AND date >= today() - 371
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
GROUP BY symbol, date
),
latest AS
(
SELECT
symbol,
argMax(atm_iv, date) AS iv_now,
max(date) AS as_of
FROM daily
GROUP BY symbol
)
SELECT
d.symbol AS symbol,
round(100 * (l.iv_now - min(d.atm_iv)) / nullIf(max(d.atm_iv) - min(d.atm_iv), 0), 1) AS iv_rank,
round(100 * countIf(d.atm_iv < l.iv_now) / count(), 1) AS iv_percentile,
round(abs(iv_rank - iv_percentile), 1) AS gap,
formatDateTime(any(l.as_of), '%b %e, %Y') AS as_of_label
FROM daily AS d
INNER JOIN latest AS l ON l.symbol = d.symbol
GROUP BY d.symbol, l.iv_now
ORDER BY gap DESCAlla data Aug 3, 2026, la maggiore divergenza nella tabella è di 35.6 punti e riguarda AAPL, con un IV rank pari a 32.4 contro un IV percentile di 68. All’estremo opposto, TSLA mantiene i due valori entro 6.5 punti l’uno dall’altro. Uno screening costruito su un solo valore restituisce un elenco diverso da quello basato sull’altro. Per questo è utile sapere quale dei due valori mostra la propria piattaforma. Lo screening delle azioni con l’IV rank più elevato ordina il mercato in base al primo dei due.
Gli input dell’intervallo alla base di ogni rank nella tabella
Inserendo nelle formule del rank i valori corrente, minimo e massimo, si ottiene la colonna del rank riportata sopra.
L'esatto SQL dietro ogni numero
WITH daily AS
(
SELECT
underlying_symbol AS symbol,
date,
avg(toFloat64(implied_volatility)) * 100 AS atm_iv
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'TSLA', 'SPY', 'QQQ', 'KO')
AND date >= today() - 371
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
GROUP BY symbol, date
),
latest AS
(
SELECT
symbol,
argMax(atm_iv, date) AS iv_now,
max(date) AS as_of
FROM daily
GROUP BY symbol
)
SELECT
d.symbol AS symbol,
round(l.iv_now, 2) AS current_iv_pct,
round(min(d.atm_iv), 2) AS low_52w_iv_pct,
round(max(d.atm_iv), 2) AS high_52w_iv_pct,
count() AS observations,
formatDateTime(any(l.as_of), '%b %e, %Y') AS as_of_label
FROM daily AS d
INNER JOIN latest AS l ON l.symbol = d.symbol
GROUP BY d.symbol, l.iv_now
ORDER BY current_iv_pct DESCPerché due piattaforme riportano valori diversi per lo stesso ticker
Nessuna delle due formule è ambigua. Lo sono gli input. I vendor raramente pubblicano quale serie di IV utilizzano, e le scelte più comuni si collocano agli estremi opposti della catena: una IV a scadenza costante di 30 giorni, interpolata tra le due scadenze ai lati dei 30 giorni, oppure il contratto at the money del primo mese, molto più volatile. Alcune piattaforme calcolano invece la media dell’intera catena. Questo pannello analizza un titolo applicando tre definizioni dell’input IV alle stesse 52 settimane.
L'esatto SQL dietro ogni numero
WITH contracts AS
(
SELECT
date,
days_to_expiry,
abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) AS moneyness,
toFloat64(implied_volatility) * 100 AS iv_pct
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date >= today() - 371
AND iv_converged = 1
AND volume > 0
),
defs AS
(
SELECT
spec.1 AS iv_series,
spec.2 AS min_dte,
spec.3 AS max_dte,
spec.4 AS max_moneyness
FROM
(
SELECT arrayJoin([
('Near 30 day ATM', 20, 45, 0.05),
('Front month ATM', 1, 19, 0.05),
('Wide net, any expiry', 1, 400, 0.30)
]) AS spec
)
),
daily AS
(
SELECT
s.iv_series AS iv_series,
c.date AS date,
avg(c.iv_pct) AS atm_iv
FROM contracts AS c
CROSS JOIN defs AS s
WHERE c.days_to_expiry BETWEEN s.min_dte AND s.max_dte
AND c.moneyness < s.max_moneyness
GROUP BY iv_series, date
),
latest AS
(
SELECT
iv_series,
argMax(atm_iv, date) AS iv_now
FROM daily
GROUP BY iv_series
)
SELECT
d.iv_series AS iv_series,
round(l.iv_now, 2) AS current_iv_pct,
round(min(d.atm_iv), 2) AS low_52w_iv_pct,
round(max(d.atm_iv), 2) AS high_52w_iv_pct,
round(100 * (l.iv_now - min(d.atm_iv)) / nullIf(max(d.atm_iv) - min(d.atm_iv), 0), 1) AS iv_rank,
round(100 * countIf(d.atm_iv < l.iv_now) / count(), 1) AS iv_percentile
FROM daily AS d
INNER JOIN latest AS l ON l.iv_series = d.iv_series
GROUP BY d.iv_series, l.iv_now
ORDER BY current_iv_pct DESCNell’ultima seduta, Wide net, any expiry riporta 37.6%, mentre Near 30 day ATM riporta 27.7%; i relativi IV rank sono 23.1 e 32.4. Stesso titolo, stessa seduta, stessa formula, diversa definizione dell’input.
La seconda variabile è la durata del lookback. 52 settimane è la convenzione, ma molte piattaforme offrono anche impostazioni a 30, 60 o 90 giorni.
L'esatto SQL dietro ogni numero
WITH daily AS
(
SELECT
date,
avg(toFloat64(implied_volatility)) * 100 AS atm_iv
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date >= today() - 800
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
GROUP BY date
),
latest AS
(
SELECT
argMax(atm_iv, date) AS iv_now,
max(date) AS as_of
FROM daily
),
windows AS
(
SELECT
spec.1 AS lookback_label,
spec.2 AS lookback_days
FROM
(
SELECT arrayJoin([
('1 month', 30),
('3 months', 90),
('6 months', 180),
('12 months', 371),
('24 months', 742)
]) AS spec
)
)
SELECT
w.lookback_label AS lookback_label,
round(100 * (l.iv_now - min(d.atm_iv)) / nullIf(max(d.atm_iv) - min(d.atm_iv), 0), 1) AS iv_rank,
round(100 * countIf(d.atm_iv < l.iv_now) / count(), 1) AS iv_percentile,
count() AS observations
FROM daily AS d
CROSS JOIN windows AS w
CROSS JOIN latest AS l
WHERE d.date >= l.as_of - w.lookback_days
GROUP BY w.lookback_label, w.lookback_days, l.iv_now
ORDER BY w.lookback_daysCon un lookback di 1 month, questo titolo registra 0.4 sull’IV rank e 4.8 sull’IV percentile. Estendendo la finestra a 24 months, nella stessa seduta registra 23.4 e 63.3. Tra le due righe non è cambiato nulla nella catena di opzioni. È cambiata solo la finestra. Quando due schermate riportano valori diversi per un ticker, il lookback e la serie IV sono i primi due elementi da verificare.
Come vengono utilizzati i due numeri
Entrambe le misure funzionano come filtro per selezionare una strategia, non come previsioni. I trader che vendono premi, tra cui chi utilizza covered call e put garantite da liquidità, tendono a cercare valori elevati. In questi casi, l’opzione incorpora un movimento maggiore di quello registrato di norma dal titolo nell’intervallo considerato. I trader che acquistano premi guardano invece alla fascia bassa, dove la stessa logica opera in senso inverso. Per questo scopo, un punteggio relativo è più utile del valore grezzo dell’IV: un’IV del 40% è ordinaria per un titolo ed estrema per un altro. Confrontare un titolo con la propria storia elimina questo problema. L’elevata volatilità implicita è positiva dipende dai compromessi associati a ciascun lato dell’operazione.
C’è però un aspetto che questi numeri non possono chiarire. Un valore elevato può aumentare ancora. Un rank pari a 95 lunedì può diventare 60 venerdì, anche senza modificare la posizione. Nessuno dei due punteggi fornisce informazioni sulla direzione: un’IV elevata indica che il mercato ha prezzato un movimento ampio, ma non in quale direzione.
FAQ
È migliore l’IV rank o l’IV percentile?
Rispondono a domande diverse. L’IV percentile è più robusto quando nella finestra di osservazione è presente un solo picco molto violento, perché conta i giorni invece di misurare il livello rispetto a un unico estremo. L’IV rank è più intuitivo quando l’intervallo contiene molti dati, perché indica direttamente quanto il livello odierno sia vicino al massimo degli ultimi dodici mesi.
Che cos’è un IV rank elevato?
La maggior parte dei desk considera le letture sopra 50 come la metà superiore dell’intervallo storico di un titolo e quelle sopra 80 come effettivamente elevate per quel nome. Il punteggio è relativo per costruzione: un rank pari a 80 su un titolo consumer staple poco volatile e un rank pari a 80 su un titolo growth volatile descrivono livelli assoluti di IV molto diversi.
IV rank e IV percentile usano la stessa finestra di osservazione?
Di norma entrambi usano 252 sedute di Borsa, anche se l’impostazione è modificabile sulla maggior parte delle piattaforme e il valore predefinito varia in base al vendor. Il pannello sopra mostra un titolo che ottiene un punteggio diverso per ciascuna lunghezza della finestra. È il primo elemento da controllare quando due strumenti non concordano.
L’IV rank può essere 0 o 100?
Sì. L’IV rank raggiunge 100 nel giorno in cui un titolo registra un nuovo massimo a 52 settimane della volatilità implicita e 0 quando registra un nuovo minimo, perché la lettura odierna è essa stessa uno degli estremi dell’intervallo. L’IV percentile raggiunge raramente uno dei due estremi, perché la seduta odierna rientra nel denominatore.
Perché il mio IV rank è cambiato anche se l’IV non si è mossa?
La finestra scorre in avanti a ogni seduta. Quando un vecchio picco esce dalle 52 settimane precedenti, il massimo usato al denominatore si riduce e il rank aumenta, anche se l’IV odierna non cambia. IV crush descrive l’altra sorpresa comune: il calo dell’IV subito dopo la pubblicazione dei risultati societari.
Ogni pannello qui riportato contiene l’SQL esatto sottostante. Sostituisci il ticker in uno qualsiasi dei pannelli per calcolare il punteggio di un altro nome sul terminale Strasmore.