Is a High Put/Call Ratio Bullish?
Put/call volume ratio percentiles: single-stock basket vs index ETFs, 2022 to July 2026ranking ·
2026-08-03 · 8×3
S&P 500 tracker moves after each fifth of the equity put/call ratio, 2022 to July 2026table ·
2026-08-03 · 5×7
Put/call volume ratio by underlying: January 1 to July 31, 2026ranking ·
2026-08-03 · 13×4
Top-decile put/call readings per month, grouped by how the S&P 500 tracker movedranking ·
2026-08-03 · 4×4
AM vs PM Settled Index Options Explained
The same hypothetical on every session: expiration mornings against the rest of the tapetable ·
2026-08-03 · 3×5
The prices behind the arithmetic: Thursday's close, the strike, Friday's open and closeseries ·
2026-08-03 · 29×6
One at-the-money call settled two ways: the ten widest splits since January 2024table ·
2026-08-03 · 10×5
Every monthly expiration since January 2024: the overnight gap, then the session that followedseries ·
2026-08-03 · 29×4
Put/call volume ratio percentiles: single-stock basket vs index ETFs, 2022 to July 2026
Put/call volume ratio percentiles: single-stock basket vs index ETFs, 2022 to July 2026
| percentile | equity_pcr | index_etf_pcr |
|---|---|---|
| p05 | 0.48 | 1.13 |
| p10 | 0.51 | 1.19 |
| p25 | 0.57 | 1.31 |
| p50 | 0.67 | 1.45 |
| p75 | 0.78 | 1.6 |
| p90 | 0.89 | 1.77 |
| p95 | 0.98 | 1.9 |
| p99 | 1.34 | 2.1 |
the exact SQL behind every number
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
)
More from this analysisIs a High Put/Call Ratio Bullish?
Put/call volume ratio by underlying: January 1 to July 31, 2026
ranking 13×4
→
Top-decile put/call readings per month, grouped by how the S&P 500 tracker moved
ranking 4×4
→
S&P 500 tracker moves after each fifth of the equity put/call ratio, 2022 to July 2026
table 5×7
→
The total is a call-volume-weighted blend of the two buckets
ranking 11×4
→
See all 2,170 queries →