IV rank vs IV percentile: fórmulas explicadas
Compara IV rank e IV percentile con las dos fórmulas, un ejemplo para verificar a mano y el caso en que difieren mucho en el mismo ticker.
La diferencia entre IV rank e IV percentile se reduce a dos cálculos aplicados a los mismos datos. IV rank mide dónde se sitúa la volatilidad implícita de hoy dentro de su rango de 52 semanas, desde la lectura más baja hasta la más alta. IV percentile cuenta la proporción de sesiones de trading del periodo analizado que cerraron por debajo de la lectura de hoy. El mismo ticker, durante la misma tarde, puede marcar 18 en una métrica y 70 en la otra.
Las dos fórmulas, escritas completas
Rango de IV = (IV actual menos la IV mínima de 52 semanas) / (IV máxima de 52 semanas menos la IV mínima de 52 semanas) x 100
Percentil de IV = (días de negociación del periodo con una IV inferior a la IV de hoy) / (total de días de negociación del periodo) x 100
Ambas medidas se sitúan entre 0 y 100. Ambas requieren los mismos dos datos: una serie diaria de volatilidad implícita de la acción y un periodo de observación, normalmente de 252 días de negociación. La volatilidad implícita es la estimación anualizada del mercado de opciones sobre cuánto se moverá la acción. Se calcula a partir de los precios vigentes de las opciones. qué mide la volatilidad implícita lo explica desde cero.
La diferencia está en cuánto del periodo analiza cada una. El rango de IV observa exactamente dos días de los 252: el de IV máxima y el de IV mínima. Todo lo que ocurre entre ambos extremos queda fuera del cálculo. El percentil de IV considera todos los días por igual y no pregunta qué tan separadas estuvieron las lecturas. Una medida indica la posición dentro de un rango. La otra cuenta días.
Un ejemplo práctico que puede comprobarse a mano
Tomemos una serie ficticia de IV de diez días, con una lectura por sesión: 22, 24, 21, 60, 26, 25, 23, 27, 24 y 28 hoy. El mínimo es 21 y el máximo, 60.
Rango de IV: (28 - 21) / (60 - 21) x 100 = 7 / 39 x 100 = 17.9.
Percentil de IV: siete de las diez lecturas —22, 24, 21, 26, 25, 23 y 24— están por debajo de 28, lo que da 7 / 10 x 100 = 70.0.
Un rango de IV de 17.9 indica una volatilidad barata. Un percentil de IV de 70 indica que la volatilidad estuvo por debajo de este nivel durante la mayoría de los días de la ventana. Ambas son descripciones correctas de los mismos diez valores.
Ahora cambiemos un valor. Sustituyamos 60 por 30 y dejemos sin cambios las otras nueve lecturas. El rango de IV pasa a ser (28 - 21) / (30 - 21) x 100 = 77.8. El percentil de IV no cambia: sigue en 70.0. Una sesión, la que fijó el máximo, vale 60 puntos para el rango de IV y absolutamente nada para el percentil de IV.
Ese es el punto débil estructural del rango de IV. Un solo pico dentro de la ventana —un gap por resultados o un episodio de temor de un día— amplía considerablemente el denominador y mantiene el rango cerca del piso durante los doce meses siguientes, mucho después de que el pico haya salido de la cadena de opciones. Cuando ambas métricas difieren de forma marcada, la discrepancia suele señalar un valor atípico dentro de la ventana. En ese caso, el percentil describe con mayor fidelidad dónde se ha mantenido realmente la volatilidad. El rango de IV es una mejor referencia cuando el rango es uniforme y ambos extremos incluyen más de una sesión. Ninguna de las dos métricas indica nada sobre la dirección.
Cómo se ve una serie real de IV
Este es el material sin procesar sobre el que se aplican ambas fórmulas. El panel siguiente calcula una lectura diaria de volatilidad implícita at the money para AAPL a partir de contratos con vencimiento entre 20 y 45 días y dentro de un rango de 5% respecto al precio de la acción. Después, promedia esas lecturas por semana.
El SQL exacto detrás de cada cifra
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 puntos semanales, desde la semana de Jul 28, 2025, con un promedio de 30.03%, hasta la semana de Aug 3, 2026, en 27.7%. La forma de esa línea determina si el rank y el percentile coinciden. Una línea con un único pico alto y aislado los separa. Una línea que se mueve dentro de un rango estable los mantiene próximos. Nuestra página de volatilidad implícita de AAPL sigue este valor a lo largo del tiempo. Para la cuestión del nivel absoluto, sin historial asociado, consulta ¿una IV de 30% es alta?.
Rango de IV vs percentil de IV en ocho tickers
Mismas fórmulas, mismo periodo de observación, ocho nombres líquidos y una sesión. La columna gap muestra la distancia absoluta entre ambas mediciones.
El SQL exacto detrás de cada cifra
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 DESCAl Aug 3, 2026, la mayor discrepancia de la tabla es de 35.6 puntos y corresponde a AAPL, cuyo rango de IV es 32.4, frente a un percentil de IV de 68. En el otro extremo de la tabla, TSLA mantiene ambas mediciones a una distancia de apenas 6.5 puntos. Un filtro basado en una de ellas devuelve una lista distinta de la que se obtiene con la otra. Por eso es importante saber cuál muestra tu plataforma. La pantalla de acciones con el rango de IV más alto ordena el mercado según la primera de estas mediciones.
Los datos de rango detrás de cada medición de la tabla
Introduce las columnas de valor actual, mínimo y máximo en la fórmula del rango, y obtendrás la columna de rango que aparece arriba.
El SQL exacto detrás de cada cifra
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 qué dos plataformas reportan valores distintos para el mismo ticker
Ninguna de las dos fórmulas es ambigua. Los datos de entrada sí lo son. Los proveedores rara vez publican qué serie de IV utilizan, y las opciones habituales se encuentran en extremos opuestos de la cadena: una IV de vencimiento constante a 30 días, interpolada entre los dos vencimientos a cada lado de los 30 días, o el contrato at the money del primer vencimiento, que es mucho más volátil. Algunas plataformas calculan, en cambio, el promedio de toda la cadena. Este panel procesa una acción con tres definiciones de la entrada de IV durante las mismas 52 semanas.
El SQL exacto detrás de cada cifra
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 DESCEn la sesión más reciente, Wide net, any expiry muestra 37.6%, mientras que Near 30 day ATM muestra 27.7%, y sus rangos de IV se sitúan en 23.1 y 32.4. Misma acción, misma sesión, misma fórmula, distinta definición de la entrada.
El segundo factor es la duración del periodo de observación. 52 semanas es la convención, y muchas plataformas ofrecen también configuraciones de 30, 60 o 90 días.
El SQL exacto detrás de cada cifra
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 periodo de observación de 1 month, esta acción registra 0.4 en el rango de IV y 4.8 en el percentil de IV. Si el periodo se amplía a 24 months, la misma sesión registra 23.4 y 63.3. La cadena de opciones no cambió entre esas filas. Solo cambió el periodo de observación. Cuando dos pantallas muestran valores distintos para un ticker, la configuración del periodo de observación y la serie de IV son los dos primeros elementos que conviene revisar.
Cómo se utilizan ambas cifras
Ambas lecturas funcionan como un filtro para seleccionar estrategias, nunca como un pronóstico. Los operadores que venden prima, incluidos los covered calls y puts con garantía de efectivo, suelen buscar lecturas altas. En esos casos, la opción refleja un movimiento mayor que el que normalmente ha registrado la acción durante el periodo analizado. Los operadores que compran prima se fijan en el extremo bajo, donde se aplica la lógica inversa. Para este objetivo, una medida relativa es más útil que la cifra bruta de IV: una IV del 40% puede ser normal para una acción y extrema para otra. Comparar una acción con su propio historial elimina ese problema. ¿Es positiva una volatilidad implícita alta? depende de las ventajas y desventajas de cada lado de la operación.
Hay una advertencia que las cifras no pueden resolver por sí solas. Una lectura alta puede subir aún más. Además, un rank de 95 el lunes puede convertirse en un rank de 60 el viernes sin que cambie la posición. Ninguna de las dos medidas aporta información sobre la dirección: una IV elevada indica que el mercado ha descontado un movimiento amplio, pero no señala hacia dónde será.
Preguntas frecuentes
¿Es mejor el IV rank o el IV percentile?
Responden preguntas distintas. El IV percentile suele funcionar mejor cuando la ventana de análisis contiene un único pico muy pronunciado, porque cuenta los días en lugar de compararse con un solo extremo. El IV rank es más intuitivo cuando el rango tiene suficientes observaciones, ya que muestra directamente qué tan cerca está el nivel de hoy del máximo de los últimos doce meses.
¿Qué es un IV rank alto?
La mayoría de las mesas considera que las lecturas superiores a 50 se encuentran en la mitad alta del rango propio de una acción, y que las superiores a 80 son realmente elevadas para ese nombre. El indicador es relativo por definición. Por eso, un rank de 80 en una acción defensiva de consumo estable y un rank de 80 en una acción de crecimiento volátil describen niveles absolutos de IV muy distintos.
¿El IV rank y el IV percentile utilizan la misma ventana de análisis?
Por lo general, ambos utilizan 252 días de trading, aunque la configuración se puede ajustar en la mayoría de las plataformas y el valor predeterminado varía según el proveedor. El panel anterior muestra que una misma acción obtiene una puntuación distinta con cada longitud de ventana. Ese es el primer aspecto que se debe revisar cuando dos herramientas no coinciden.
¿El IV rank puede ser 0 o 100?
Sí. El IV rank llega a 100 el día en que una acción registra un nuevo máximo de 52 semanas en volatilidad implícita, y llega a 0 cuando registra un nuevo mínimo, porque la lectura de hoy es uno de los extremos del rango. El IV percentile rara vez alcanza alguno de esos extremos, ya que la sesión actual forma parte del denominador.
¿Por qué cambió mi IV rank si la IV no se movió?
La ventana avanza en cada sesión. Cuando un pico antiguo sale de las últimas 52 semanas, el máximo utilizado en el denominador se ajusta a un nivel más bajo y el rank sube, aunque la IV de hoy no cambie. IV crush describe la otra sorpresa habitual: la caída de la IV justo después de un reporte de resultados.
Cada panel incluye debajo el SQL exacto. Cambia el ticker en cualquiera de ellos para calcular el indicador de otro nombre en la terminal de Strasmore.