IV rank vs IV percentile: fórmulas e exemplo
Entenda IV rank e IV percentile, veja as fórmulas por extenso e um exemplo manual. Saiba por que as métricas podem divergir no mesmo ticker.
A diferença entre IV rank e IV percentile resume-se a dois cálculos feitos sobre os mesmos dados. O IV rank mede onde a volatilidade implícita de hoje está dentro do intervalo de 52 semanas, entre a menor e a maior leitura. O IV percentile calcula a proporção de pregões no período analisado que terminou abaixo da leitura de hoje. O mesmo ticker, na mesma tarde, pode marcar 18 em uma métrica e 70 na outra.
As duas fórmulas, por extenso
Rank de IV = (IV atual menos a IV mínima de 52 semanas) / (IV máxima de 52 semanas menos a IV mínima de 52 semanas) x 100
Percentil de IV = (dias de negociação no período com IV abaixo da IV de hoje) / (total de dias de negociação no período) x 100
Ambas resultam em valores entre 0 e 100. Ambas precisam dos mesmos dois dados de entrada: uma série diária de volatilidade implícita da ação e uma janela de análise, convencionalmente de 252 dias de negociação. A volatilidade implícita é a estimativa anualizada do mercado de opções sobre a magnitude do movimento da ação, calculada a partir dos preços correntes das opções. O texto o que mede a volatilidade implícita explica esse conceito desde o início.
A diferença entre as duas está na parcela da janela que cada uma considera. O rank de IV observa exatamente dois dias entre 252: o de IV máxima e o de IV mínima. Todos os demais são apenas contexto. O percentil de IV considera todos os dias com o mesmo peso e não leva em conta a distância entre as leituras. Uma medida indica a posição dentro de uma faixa. A outra é uma contagem de dias.
Um exemplo prático que pode ser conferido manualmente
Considere uma série fictícia de IV com dez dias, uma leitura por sessão: 22, 24, 21, 60, 26, 25, 23, 27, 24 e 28 hoje. A mínima é 21 e a máxima é 60.
Ranking de IV: (28 - 21) / (60 - 21) x 100 = 7 / 39 x 100 = 17,9.
Percentil de IV: sete das dez leituras — 22, 24, 21, 26, 25, 23 e 24 — estão abaixo de 28, resultando em 7 / 10 x 100 = 70,0.
Um ranking de IV de 17,9 indica volatilidade barata. Um percentil de IV de 70 indica que a volatilidade ficou abaixo desse nível na maior parte dos dias da janela. As duas são descrições corretas dos mesmos dez números.
Agora altere um valor. Substitua 60 por 30 e mantenha as outras nove leituras. O ranking de IV passa a ser (28 - 21) / (30 - 21) x 100 = 77,8. O percentil de IV não muda: continua em 70,0. Uma sessão — aquela que definiu a máxima — vale 60 pontos no ranking de IV e absolutamente nada para o percentil de IV.
Esse é o ponto estruturalmente fraco do ranking de IV. Um único pico na janela, causado por um gap após a divulgação de resultados ou por um episódio de estresse de um dia, amplia muito o denominador e mantém o ranking próximo do piso durante os doze meses seguintes, muito depois de o pico ter saído da cadeia de opções. Quando os dois indicadores divergem acentuadamente, a divergência normalmente sinaliza um outlier dentro da janela. O percentil descreve com mais fidelidade onde a volatilidade efetivamente passou seu tempo. O ranking de IV é a melhor leitura quando o intervalo é estável e as duas extremidades têm mais de uma sessão representada. Nenhum dos dois números informa a direção.
Como é uma série real de IV
Este é o material bruto usado pelas duas fórmulas. O painel abaixo calcula diariamente a volatilidade implícita at the money da AAPL para contratos com vencimento entre 20 e 45 dias e até 5% do preço da ação. Em seguida, calcula a média dessas leituras por semana.
O SQL exato por trás de cada número
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)A série contém 54 pontos semanais. Vai da semana de Jul 28, 2025, com média de 30.03%, até à semana de Aug 3, 2026, em 27.7%. O formato dessa linha determina se rank e percentile coincidem. Uma linha com um único pico alto e isolado separa os dois. Uma linha que oscila dentro de uma faixa estável mantém-nos próximos. A nossa página de volatilidade implícita da AAPL acompanha este ativo ao longo do tempo. Para uma análise do nível absoluto, sem histórico associado, consulte IV de 30% é alta.
IV rank versus IV percentile em oito tickers
Mesmas fórmulas, mesmo período de análise, oito nomes líquidos, uma sessão. A coluna gap mostra a distância absoluta entre os dois indicadores.
O SQL exato por trás de cada número
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 DESCEm Aug 3, 2026, a maior divergência da tabela é de 35.6 pontos, em AAPL, onde o IV rank é 32.4, contra um IV percentile de 68. No outro extremo da tabela, TSLA mantém os dois indicadores a uma distância de no máximo 6.5 pontos. Um filtro baseado em um número gera uma lista diferente daquela produzida pelo outro. Essa é a razão prática para saber qual deles a sua plataforma exibe. O filtro ações com maior IV rank ordena o mercado pelo primeiro indicador.
Os intervalos usados em cada rank da tabela
Insira as colunas de valor atual, mínima e máxima na fórmula do rank para reproduzir a coluna de rank acima.
O SQL exato por trás de cada número
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 DESCPor que duas plataformas informam valores diferentes para o mesmo ticker
Nenhuma das duas fórmulas é ambígua. As entradas é que são. Os provedores raramente informam qual série de IV utilizam, e as escolhas mais comuns ficam em extremos opostos da cadeia: uma IV de maturidade constante de 30 dias, interpolada entre os dois vencimentos de cada lado desse prazo, ou o contrato at the money do primeiro vencimento, que oscila muito mais. Algumas plataformas fazem uma média de toda a cadeia. Este painel calcula os valores de uma ação usando três definições da entrada de IV ao longo das mesmas 52 semanas.
O SQL exato por trás de cada número
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 DESCNa sessão mais recente, Wide net, any expiry registra 37.6%, enquanto Near 30 day ATM registra 27.7%, e seus rankings de IV ficam em 23.1 e 32.4. Mesma ação, mesma sessão, mesma fórmula, definição diferente da entrada.
A segunda variável é o período de análise. 52 semanas é o padrão, e muitas plataformas oferecem configurações de 30, 60 ou 90 dias além dessa.
O SQL exato por trás de cada número
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_daysCom o período de análise de 1 month, esta ação marca 0.4 no ranking de IV e 4.8 no percentil de IV. Ao ampliar a janela para 24 months, a mesma sessão marca 23.4 e 63.3. Nada mudou na cadeia de opções entre essas linhas. Apenas a janela mudou. Quando duas telas apresentam valores diferentes para um ticker, o período de análise e a série de IV são os dois primeiros pontos a verificar.
Como os dois números são usados
As duas leituras funcionam como filtros para a seleção de estratégias, nunca como previsões. Traders que vendem prémio, incluindo covered calls e puts com garantia em dinheiro, tendem a procurar leituras elevadas. Nesses casos, a opção está cotada para uma movimentação maior do que a ação normalmente apresentou durante o período analisado. Traders que compram prémio observam a faixa inferior, em que a mesma lógica funciona ao contrário. Para esse objetivo, um score relativo é mais útil do que o número bruto de IV: uma IV de 40% é normal para uma ação e extrema para outra. Comparar a ação com o seu próprio histórico elimina esse problema. A volatilidade implícita elevada é positiva depende dos trade-offs de cada lado.
Há uma ressalva que os números não podem resolver. Uma leitura elevada pode subir ainda mais. Um rank de 95 na segunda-feira pode ser um rank de 60 na sexta-feira sem qualquer alteração na sua posição. Nenhum dos dois scores informa a direção: uma IV elevada significa que o mercado precificou uma grande movimentação, mas não indica para que lado ela ocorrerá.
Perguntas frequentes
O IV rank ou o IV percentile é melhor?
Eles respondem a perguntas diferentes. O IV percentile tende a funcionar melhor quando a janela de análise contém um pico muito acentuado, porque conta os dias em vez de comparar o valor atual com um único extremo. O IV rank é mais intuitivo quando há muitos dados dentro do intervalo, pois mostra diretamente quão perto o valor de hoje está da máxima de 12 meses.
O que é um IV rank alto?
A maioria das mesas considera leituras acima de 50 como a metade superior do intervalo histórico da própria ação. Leituras acima de 80 costumam ser consideradas realmente elevadas para esse ativo. A pontuação é relativa por definição. Portanto, um rank de 80 para uma empresa defensiva de consumo pouco volátil e um rank de 80 para uma empresa de crescimento volátil representam níveis absolutos de IV muito diferentes.
O IV rank e o IV percentile usam a mesma janela de análise?
Normalmente, ambos usam 252 pregões, embora essa configuração possa ser ajustada na maioria das plataformas e o padrão varie conforme o fornecedor. O painel acima mostra uma ação com pontuações diferentes em cada janela. Essa é a primeira coisa a verificar quando duas ferramentas apresentam resultados divergentes.
O IV rank pode ser 0 ou 100?
Sim. O IV rank chega a 100 no dia em que uma ação registra uma nova máxima de 52 semanas na volatilidade implícita. Ele chega a 0 quando registra uma nova mínima, pois a leitura do dia é um dos extremos do intervalo. O IV percentile raramente atinge qualquer um desses extremos, porque o próprio pregão de hoje entra no denominador.
Por que meu IV rank mudou sem que o IV se movesse?
A janela avança a cada pregão. Quando um pico antigo sai das 52 semanas anteriores, a máxima usada no denominador é redefinida para um nível mais baixo. Com isso, o rank sobe mesmo que o IV de hoje não tenha mudado. IV crush descreve a outra surpresa comum: a queda do próprio IV logo após a divulgação de resultados.
Cada painel aqui traz a consulta SQL exata usada em sua construção. Troque o ticker em qualquer um deles para calcular a pontuação de outro ativo no terminal Strasmore.