Strasmore Research
Aprendizado Matt ConnorPor Matt Connor · data as of August 6, 2026 · refreshed weekly

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.

QueryVolatilidade implícita ATM da AAPL, semanal, últimas 52 semanas
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)
Run this yourself

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.

QueryRanking de IV vs percentil de IV, oito ativos líquidos, janela de 52 semanas
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 DESC
Run this yourself

Em 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.

QueryIV ATM atual, mínima e máxima em 52 semanas para cada ativo
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 DESC
Run this yourself

Por 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.

QueryUma ação, uma sessão, três definições do input de IV
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 DESC
Run this yourself

Na 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.

QueryA mesma sessão avaliada em cinco janelas de análise
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_days
Run this yourself

Com 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.