¿Una ratio put/call alta es alcista?
Conoce por qué una ratio put/call alta puede ser una señal contraria, compara percentiles de acciones e índices y revisa qué ocurrió tras lecturas extremas.
Una ratio put/call alta es la lectura alcista contraria clásica: se interpreta que una compra de puts inusualmente intensa indica que el consenso ya se ha preparado para una caída. Actuar con base en esa señal presenta un problema. “Alta” no tiene un valor fijo. Una lectura de 1.15 en la pantalla puede ser extrema en opciones sobre una sola acción y corresponder a una sesión normal en productos sobre índices.
La pregunta requiere una distribución de referencia. Esta página ofrece una para ambos universos y luego mide qué ocurrió después de las lecturas altas. La explicación de la ratio put/call describe cómo se construye la ratio. Todo lo que sigue parte de esa definición.
Dos notas sobre la medición. Cada ratio contabiliza los contratos negociados ese día. Por tanto, es una ratio de volumen. El interés abierto contabiliza las posiciones que siguen abiertas y corresponde a un nivel distinto (volumen frente a interés abierto distingue ambos conceptos). Además, las cifras proceden de una cesta fija: diez acciones individuales conocidas por el público frente a tres ETFs de mercado amplio. No proceden del conjunto del mercado. Por eso, conviene interpretar la forma de la distribución y no el último decimal.
¿Qué se considera un ratio put/call alto?
Un percentil responde una pregunta que un nivel no puede responder. La curva de abajo abarca todas las sesiones desde enero de 2022 hasta julio de 2026, con un ratio por sesión para cada libro.
El SQL exacto detrás de cada cifra
WITH book_days AS (
SELECT date AS day,
if(underlying_symbol IN ('SPY', 'QQQ', 'IWM'), 'index_etf', 'equity') AS book,
sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'P') AS put_volume,
sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'C') AS call_volume
FROM global_markets.options_greeks
WHERE date >= toDate('2022-01-01')
AND date <= toDate('2026-07-31')
AND volume > 0
AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'AMZN',
'META', 'TSLA', 'GOOGL', 'JPM', 'KO', 'XOM')
GROUP BY day, book
HAVING call_volume > 0
),
paired AS (
SELECT day,
toFloat64(sumIf(put_volume, book = 'equity'))
/ toFloat64(sumIf(call_volume, book = 'equity')) AS equity_pcr,
toFloat64(sumIf(put_volume, book = 'index_etf'))
/ toFloat64(sumIf(call_volume, book = 'index_etf')) AS index_pcr
FROM book_days
GROUP BY day
HAVING sumIf(call_volume, book = 'equity') > 0
AND sumIf(call_volume, book = 'index_etf') > 0
),
curves AS (
SELECT arrayMap(v -> round(v, 2),
quantilesDeterministic(0.05, 0.10, 0.25, 0.50, 0.75, 0.90, 0.95, 0.99)
(equity_pcr, cityHash64(day))) AS eq,
arrayMap(v -> round(v, 2),
quantilesDeterministic(0.05, 0.10, 0.25, 0.50, 0.75, 0.90, 0.95, 0.99)
(index_pcr, cityHash64(day))) AS idx
FROM paired
)
SELECT z.1 AS percentile,
z.2 AS equity_pcr,
z.3 AS index_etf_pcr
FROM (
SELECT arrayJoin(arrayZip(['p05', 'p10', 'p25', 'p50', 'p75', 'p90', 'p95', 'p99'], eq, idx)) AS z
FROM curves
)En la cesta de acciones individuales, la sesión mediana registró 0.67 puts por cada call. El decil superior de las sesiones comenzó en 0.89, y el uno por ciento más extremo superó 1.34. El extremo de menor actividad también es útil para calibrar: una de cada veinte sesiones terminó en 0.48 o menos.
La distribución del ETF es distinta en cada punto de la curva. Su sesión mediana registró 1.45, por encima de la línea one-to-one, claramente por debajo de la cual se encuentra la mediana de las acciones individuales. Su propio decil superior comenzó en 1.77. Un ratio citado sin indicar a qué libro corresponde carece casi por completo de significado. Ese print de 1.15 representa dos cosas distintas según la columna de la que provenga.
Por qué un ratio superior a uno en índices es normal y no lo es en acciones
Al dividir el mismo volumen por activo subyacente, los niveles se separan con claridad.
El SQL exacto detrás de cada cifra
WITH symbol_days AS (
SELECT underlying_symbol AS symbol,
date AS day,
sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'P') AS put_volume,
sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'C') AS call_volume
FROM global_markets.options_greeks
WHERE date >= toDate('2026-01-01')
AND date <= toDate('2026-07-31')
AND volume > 0
AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'AMZN',
'META', 'TSLA', 'GOOGL', 'JPM', 'KO', 'XOM')
GROUP BY symbol, day
HAVING call_volume > 0
)
SELECT symbol,
round(toFloat64(sum(put_volume)) / toFloat64(sum(call_volume)), 2) AS put_call_ratio,
round(100 * countIf(put_volume > call_volume) / count(), 1) AS above_one_pct,
count() AS observations
FROM symbol_days
GROUP BY symbol
ORDER BY put_call_ratio DESCDurante los primeros siete meses de 2026, IWM se ubicó en la parte alta de la tabla, con 2.73 puts por call, y cerró por encima de uno en 98.6% de sus 144 sesiones. En la parte baja, XOM registró 0.38, por encima de uno en 2.8% de las sesiones.
La diferencia es estructural. Las opciones sobre ETFs de mercado amplio son donde se realiza la cobertura de carteras: un gestor con two hundred posiciones compra puts sobre el índice en lugar de comprar puts sobre cada posición, y ese flujo no tiene una operación call equivalente al otro lado. El volumen de opciones sobre acciones individuales se inclina en la dirección contraria, hacia calls compradas para captar una subida y calls vendidas contra acciones que ya se poseen. Un ratio «total» combina ambos libros. Por eso queda entre los dos y se mueve tanto con la composición de productos del día como con el sentimiento.
También conviene conocer otro cambio de nivel. El volumen de índices y ETFs ahora incluye una proporción elevada de vencimientos del mismo día (opciones 0DTE), una categoría que no se negociaba ni remotamente a esta escala cuando se establecieron los umbrales habituales. Los niveles antiguos no se pueden trasladar a un tape con una composición diferente.
¿Es alcista un put/call ratio elevado? Qué ocurrió después de los extremos
El argumento contrario puede comprobarse. Ordenamos cada sesión en quintos según el equity ratio de ese día y medimos cómo se movió el S&P 500 tracker durante las siguientes 5 y 20 sesiones.
El SQL exacto detrás de cada cifra
WITH raw AS (
SELECT date AS day,
sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'P') AS put_volume,
sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'C') AS call_volume
FROM global_markets.options_greeks
WHERE date >= toDate('2022-01-01')
AND date <= toDate('2026-07-31')
AND volume > 0
AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'META',
'TSLA', 'GOOGL', 'JPM', 'KO', 'XOM')
GROUP BY day
HAVING call_volume > 0
),
equity_pcr AS (
SELECT day, toFloat64(put_volume) / toFloat64(call_volume) AS pcr
FROM raw
),
spy_daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,
toFloat64(argMax(close, window_start)) AS close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2022-01-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-08-01')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY day
),
forward AS (
SELECT day,
close,
any(close) OVER (ORDER BY day ASC ROWS BETWEEN 5 FOLLOWING AND 5 FOLLOWING) AS close_5,
any(close) OVER (ORDER BY day ASC ROWS BETWEEN 20 FOLLOWING AND 20 FOLLOWING) AS close_20
FROM spy_daily
),
joined AS (
SELECT p.day AS day,
p.pcr AS pcr,
100 * (f.close_5 / f.close - 1) AS fwd_5d_pct,
100 * (f.close_20 / f.close - 1) AS fwd_20d_pct
FROM equity_pcr AS p
INNER JOIN forward AS f ON p.day = f.day
WHERE f.close_5 > 0 AND f.close_20 > 0
),
cuts AS (
SELECT quantilesDeterministic(0.2, 0.4, 0.6, 0.8)(pcr, cityHash64(day)) AS q
FROM joined
)
SELECT multiIf(pcr < q[1], 'lowest fifth',
pcr < q[2], 'second fifth',
pcr < q[3], 'middle fifth',
pcr < q[4], 'fourth fifth',
'highest fifth') AS pcr_band,
count() AS observations,
round(min(pcr), 2) AS band_floor_ratio,
round(quantileDeterministic(0.5)(fwd_5d_pct, cityHash64(day)), 2) AS fwd_5d_median_pct,
round(quantileDeterministic(0.5)(fwd_20d_pct, cityHash64(day)), 2) AS fwd_20d_median_pct,
round(quantileDeterministic(0.25)(fwd_20d_pct, cityHash64(day)), 2) AS fwd_20d_p25_pct,
round(quantileDeterministic(0.75)(fwd_20d_pct, cityHash64(day)), 2) AS fwd_20d_p75_pct
FROM joined CROSS JOIN cuts
GROUP BY pcr_band
ORDER BY band_floor_ratio ASCEl quinto de sesiones más tranquilas empieza en 0.34 y el quinto más activo comienza en 0.81, de modo que la banda superior contiene todas las lecturas que un inversor contrarian consideraría extremas. En esas 226 sesiones, el movimiento mediano a 20 sesiones fue de 3%, frente a 0.91% después del quinto más tranquilo. A cinco sesiones, las mismas dos bandas registraron 0.82% y 0.3%.
Las medianas ocultan la parte importante. Dentro del quinto superior, la mitad central de los resultados a 20 sesiones se situó entre -1.82% y 5.71%. Dentro del quinto más tranquilo, la mitad central se ubicó entre -0.83% y 2.67%. Ambos rangos cubren gran parte del mismo terreno. La banda en la que cae una sesión desplaza el centro de la distribución, pero apenas estrecha el rango alrededor de ese centro. Esa es la parte que una regla general deja fuera.
Hay una salvedad sobre la ponderación de la muestra. El periodo de enero de 2022 a julio de 2026 incluye un mercado bajista y la recuperación posterior, con aproximadamente 226 sesiones por banda. Es una muestra real, pero corresponde a un único tramo de la historia del mercado.
¿Se concentran las lecturas extremas en los mínimos del mercado?
Se concentran en los meses bajistas, que es una afirmación distinta. Agrupamos cada mes desde 2022 según el movimiento del tracker dentro de ese periodo y luego contamos cuántas lecturas de put/call del decil superior cayeron en cada grupo.
El SQL exacto detrás de cada cifra
WITH raw AS (
SELECT date AS day,
sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'P') AS put_volume,
sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'C') AS call_volume
FROM global_markets.options_greeks
WHERE date >= toDate('2022-01-01')
AND date <= toDate('2026-07-31')
AND volume > 0
AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'META',
'TSLA', 'GOOGL', 'JPM', 'KO', 'XOM')
GROUP BY day
HAVING call_volume > 0
),
equity_pcr AS (
SELECT day, toFloat64(put_volume) / toFloat64(call_volume) AS pcr
FROM raw
),
cut AS (
SELECT quantileDeterministic(0.90)(pcr, cityHash64(day)) AS p90
FROM equity_pcr
),
by_month AS (
SELECT toStartOfMonth(day) AS month_start,
countIf(pcr >= cut.p90) AS extreme_reads,
quantileDeterministic(0.5)(pcr, cityHash64(day)) AS median_pcr
FROM equity_pcr CROSS JOIN cut
GROUP BY month_start
),
spy_daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,
toFloat64(argMax(close, window_start)) AS close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2022-01-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY day
),
spy_month AS (
SELECT toStartOfMonth(day) AS month_start,
100 * (argMax(close, day) / argMin(close, day) - 1) AS move_pct
FROM spy_daily
GROUP BY month_start
)
SELECT multiIf(s.move_pct <= -3, 'index down 3% or more',
s.move_pct < 0, 'index down under 3%',
s.move_pct < 3, 'index up under 3%',
'index up 3% or more') AS index_move_bucket,
count() AS observations,
round(avg(m.extreme_reads), 1) AS top_decile_reads_avg,
round(quantileDeterministic(0.5)(m.median_pcr, cityHash64(m.month_start)), 2) AS typical_pcr_ratio
FROM by_month AS m
INNER JOIN spy_month AS s ON m.month_start = s.month_start
GROUP BY index_move_bucket
ORDER BY min(s.move_pct) ASCLos meses en los que el tracker terminó con una caída de 3% o más promediaron 4.2 lecturas del decil superior por mes, frente a 1.9 en los meses en los que ganó 3% o más. La mediana de la lectura diaria de cada grupo aparece en la última columna: 0.75 para el grupo con peor desempeño y 0.62 para el mejor. En los extremos de la tabla aparecen 12 y 22 meses.
Las lecturas extremas de put/call y las caídas de precios aparecen juntas. Eso es coexistencia, y los datos prospectivos de la sección anterior indican cuánto vale esa relación. El ratio mide la operativa del mismo día, por lo que sus picos aparecen dentro de las caídas, no antes de ellas. El mínimo es una etiqueta que se asigna después.
Interpretar un nivel frente a una distribución
De las cifras anteriores se desprenden dos hábitos.
Primero, comparar elementos equivalentes. Una lectura solo tiene significado frente al historial del mismo indicador durante una ventana comparable. Eso es exactamente lo que ofrece una tabla de percentiles. Un umbral recordado no ofrece esa referencia.
Segundo, vigilar el denominador. El ratio cae cuando el volumen de calls aumenta, aunque la compra de puts no cambie. Tanto una caída como un repunte del ratio pueden deberse a que solo uno de los componentes de la fracción se mueve. Por eso, analizar por separado el volumen de puts y el volumen de calls mantiene visible la aritmética.
La misma disciplina se aplica a cualquier indicador de sentimiento citado como una cifra aislada. El VIX y una lectura de volatilidad implícita del 30% no se pueden interpretar sin sus propias distribuciones. Además, las reglas de sentimiento contrarian solo se sostienen con datos cuando el nivel de referencia se mide y no se da por supuesto.
Preguntas frecuentes
¿Una relación put/call alta es alcista?
La lectura contraria interpreta una fuerte compra de puts como una señal de que el mercado ya está posicionado para una caída. Frente a la cesta de acciones individuales anterior, las sesiones del quinto superior de lecturas fueron seguidas por un movimiento mediano a 20 sesiones de 3% en el ETF que replica al S&P 500, frente a 0.91% después del quinto más tranquilo. La mitad central de los resultados del quinto superior abarcó de -1.82% a 5.71%.
¿Cuál es una relación put/call normal?
Depende por completo de qué opciones se contabilicen. En una cesta de diez acciones individuales conocidas, la sesión mediana entre 2022 y julio de 2026 registró 0.67 puts por cada call. En tres ETFs de mercado amplio durante las mismas sesiones, la mediana fue de 1.45.
¿Por qué la relación put/call del índice es mayor que la relación put/call de acciones?
Las opciones sobre índices amplios y ETFs son el vehículo estándar para cubrir carteras. Un inversor que compra puts sobre un índice no tiene una operación equivalente con calls que la compense. En las acciones individuales, el volumen se inclina hacia la compra de calls para captar una subida y hacia la venta de calls contra acciones ya mantenidas. Esto mantiene más baja la relación de ese conjunto.
¿Funciona la relación put/call para anticipar el mercado?
La medición anterior muestra la distribución de lo que ocurrió después de cada quinto de lecturas. La dispersión dentro de cualquier banda es mucho mayor que la distancia entre las medianas de las bandas. Las lecturas del decil superior también se concentran en meses en los que el índice terminó a la baja: 4.2 por mes en el peor grupo.
¿Cuál es la diferencia entre una relación put/call basada en volumen y una basada en interés abierto?
La relación basada en volumen cuenta los contratos negociados durante una sesión. Por eso se reinicia cada día y reacciona con rapidez. La relación basada en interés abierto cuenta las posiciones que siguen vigentes. Cambia lentamente y se mantiene en su propio nivel. No son intercambiables. Un umbral tomado de una de ellas interpretará mal la otra.
Cómo se construyen estas cifras
- Fuente: una fila por contrato de opciones y por sesión, con el volumen negociado durante esa sesión. Las puts y las calls se separan a partir del código de contrato de OCC: los últimos ocho caracteres corresponden al strike y el carácter anterior es C para una call y P para una put. Abre el SQL de cualquier panel para consultar la tabla y los filtros exactos.
- Todas las relaciones de esta página se basan en volumen. El interés abierto no forma parte del cálculo. Por tanto, ninguna de estas cifras es una relación basada en interés abierto.
- No se aplica ningún filtro de calidad de volatilidad implícita. Los contratos se incluyen únicamente por su volumen negociado, porque estos paneles contabilizan la actividad de trading y no miden la volatilidad.
- La cesta incluye AAPL, MSFT, NVDA, AMZN, META, TSLA, GOOGL, JPM, KO y XOM para el conjunto de acciones individuales, además de SPY, QQQ e IWM para el conjunto de índices y ETFs. Las relaciones publicadas por las bolsas cubren todo el mercado e incluyen productos sobre índices como SPX. Por eso sus niveles son diferentes.
- Los precios del índice corresponden al último print de la sesión regular de cada día para el ETF que replica al S&P 500. Los retornos futuros excluyen las últimas 20 sesiones de la muestra, porque todavía no tienen un periodo futuro de 20 sesiones. Los movimientos mensuales van del cierre de la primera sesión al cierre de la última sesión de cada mes.
Cada panel anterior se puede expandir para mostrar el SQL en el que se basa. Las mismas consultas de percentiles pueden ejecutarse para cualquier subyacente que sigas en la terminal de Strasmore.