How the Put/Call Ratio Is Calculated
Daily single stock put/call ratio against its 21 session averageseries ·
2026-08-06 · 84×4
Where the daily ratio actually sits, twelve months of sessionsranking ·
2026-08-06 · 3×4
Monthly median put/call ratio: broad market ETFs against single stocksseries ·
2026-08-06 · 12×4
Daily put/call volume ratio, SPY against AAPL, July 2026series ·
2026-08-06 · 22×4
Put and call volume for eight household names, July 2026ranking ·
2026-08-06 · 8×4
Daily single stock put/call ratio against its 21 session average
Daily single stock put/call ratio against its 21 session average
| session_date | day_label | daily_ratio | ma21_ratio |
|---|---|---|---|
| 2026-04-01 | Apr 1 | 1.04 | 0.81 |
| 2026-04-02 | Apr 2 | 0.83 | 0.81 |
| 2026-04-06 | Apr 6 | 0.76 | 0.81 |
| 2026-04-07 | Apr 7 | 0.82 | 0.81 |
| 2026-04-08 | Apr 8 | 0.64 | 0.8 |
| 2026-04-09 | Apr 9 | 0.77 | 0.8 |
| 2026-04-10 | Apr 10 | 0.64 | 0.79 |
| 2026-04-13 | Apr 13 | 0.64 | 0.78 |
| 2026-04-14 | Apr 14 | 0.46 | 0.76 |
| 2026-04-15 | Apr 15 | 0.41 | 0.75 |
| 2026-04-16 | Apr 16 | 0.53 | 0.74 |
| 2026-04-17 | Apr 17 | 0.44 | 0.72 |
| 2026-04-20 | Apr 20 | 0.54 | 0.7 |
| 2026-04-21 | Apr 21 | 0.64 | 0.69 |
| 2026-04-22 | Apr 22 | 0.53 | 0.68 |
| 2026-04-23 | Apr 23 | 0.58 | 0.67 |
| 2026-04-24 | Apr 24 | 0.46 | 0.66 |
| 2026-04-27 | Apr 27 | 0.47 | 0.64 |
| 2026-04-28 | Apr 28 | 0.44 | 0.63 |
| 2026-04-29 | Apr 29 | 0.53 | 0.62 |
| 2026-04-30 | Apr 30 | 0.47 | 0.6 |
| 2026-05-01 | May 1 | 0.47 | 0.57 |
| 2026-05-04 | May 4 | 0.5 | 0.56 |
| 2026-05-05 | May 5 | 0.45 | 0.54 |
| 2026-05-06 | May 6 | 0.34 | 0.52 |
| 2026-05-07 | May 7 | 0.38 | 0.51 |
| 2026-05-08 | May 8 | 0.45 | 0.49 |
| 2026-05-11 | May 11 | 0.39 | 0.48 |
| 2026-05-12 | May 12 | 0.41 | 0.47 |
| 2026-05-13 | May 13 | 0.36 | 0.47 |
| 2026-05-14 | May 14 | 0.4 | 0.47 |
| 2026-05-15 | May 15 | 0.47 | 0.46 |
| 2026-05-18 | May 18 | 0.55 | 0.47 |
| 2026-05-19 | May 19 | 0.48 | 0.47 |
| 2026-05-20 | May 20 | 0.43 | 0.46 |
| 2026-05-21 | May 21 | 0.45 | 0.45 |
| 2026-05-22 | May 22 | 0.51 | 0.45 |
| 2026-05-26 | May 26 | 0.43 | 0.45 |
| 2026-05-27 | May 27 | 0.35 | 0.44 |
| 2026-05-28 | May 28 | 0.38 | 0.44 |
| 2026-05-29 | May 29 | 0.4 | 0.43 |
| 2026-06-01 | Jun 1 | 0.38 | 0.43 |
| 2026-06-02 | Jun 2 | 0.38 | 0.42 |
| 2026-06-03 | Jun 3 | 0.4 | 0.42 |
| 2026-06-04 | Jun 4 | 0.44 | 0.42 |
| 2026-06-05 | Jun 5 | 0.55 | 0.43 |
| 2026-06-08 | Jun 8 | 0.51 | 0.43 |
| 2026-06-09 | Jun 9 | 0.69 | 0.45 |
| 2026-06-10 | Jun 10 | 0.59 | 0.46 |
| 2026-06-11 | Jun 11 | 0.64 | 0.47 |
| 2026-06-12 | Jun 12 | 0.5 | 0.47 |
| 2026-06-15 | Jun 15 | 0.47 | 0.48 |
| 2026-06-16 | Jun 16 | 0.64 | 0.48 |
| 2026-06-17 | Jun 17 | 0.77 | 0.49 |
| 2026-06-18 | Jun 18 | 0.55 | 0.5 |
| 2026-06-22 | Jun 22 | 0.54 | 0.5 |
| 2026-06-23 | Jun 23 | 0.75 | 0.52 |
| 2026-06-24 | Jun 24 | 0.7 | 0.53 |
| 2026-06-25 | Jun 25 | 0.7 | 0.54 |
| 2026-06-26 | Jun 26 | 0.61 | 0.55 |
| 2026-06-29 | Jun 29 | 0.54 | 0.56 |
| 2026-06-30 | Jun 30 | 0.48 | 0.56 |
| 2026-07-01 | Jul 1 | 0.52 | 0.57 |
| 2026-07-02 | Jul 2 | 0.52 | 0.58 |
| 2026-07-06 | Jul 6 | 0.48 | 0.58 |
| 2026-07-07 | Jul 7 | 0.67 | 0.59 |
| 2026-07-08 | Jul 8 | 0.49 | 0.59 |
| 2026-07-09 | Jul 9 | 0.44 | 0.59 |
| 2026-07-10 | Jul 10 | 0.5 | 0.58 |
| 2026-07-13 | Jul 13 | 0.54 | 0.57 |
| 2026-07-14 | Jul 14 | 0.53 | 0.57 |
| 2026-07-15 | Jul 15 | 0.47 | 0.57 |
| 2026-07-16 | Jul 16 | 0.58 | 0.57 |
| 2026-07-17 | Jul 17 | 0.73 | 0.58 |
| 2026-07-20 | Jul 20 | 0.6 | 0.57 |
| 2026-07-21 | Jul 21 | 0.55 | 0.57 |
| 2026-07-22 | Jul 22 | 0.5 | 0.57 |
| 2026-07-23 | Jul 23 | 0.68 | 0.56 |
| 2026-07-24 | Jul 24 | 0.71 | 0.56 |
| 2026-07-27 | Jul 27 | 0.63 | 0.56 |
| 2026-07-28 | Jul 28 | 0.69 | 0.56 |
| 2026-07-29 | Jul 29 | 0.66 | 0.57 |
| 2026-07-30 | Jul 30 | 0.59 | 0.58 |
| 2026-07-31 | Jul 31 | 0.56 | 0.58 |
the exact SQL behind every number
WITH
daily AS
(
SELECT
d,
toFloat64(sumIf(volume, right_letter = 'P'))
/ toFloat64(sumIf(volume, right_letter = 'C')) AS raw_ratio
FROM
(
SELECT
date AS d,
volume,
substring(ticker, length(ticker) - 8, 1) AS right_letter
FROM global_markets.options_greeks
WHERE date >= '2026-01-02'
AND date < '2026-08-01'
AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'TSLA', 'KO')
AND volume > 0
)
GROUP BY d
HAVING countIf(right_letter = 'C') > 0
)
SELECT
session_date,
day_label,
daily_ratio,
ma21_ratio
FROM
(
SELECT
d,
toString(d) AS session_date,
concat(formatDateTime(d, '%b '), toString(toDayOfMonth(d))) AS day_label,
round(raw_ratio, 2) AS daily_ratio,
round(avg(raw_ratio) OVER (ORDER BY d ROWS BETWEEN 20 PRECEDING AND CURRENT ROW), 2) AS ma21_ratio
FROM daily
)
WHERE d >= '2026-04-01'
ORDER BY d
More from this analysisHow the Put/Call Ratio Is Calculated
Daily put/call volume ratio, SPY against AAPL, July 2026
series 22×4
→
Monthly median put/call ratio: broad market ETFs against single stocks
series 12×4
→
Put and call volume for eight household names, July 2026
ranking 8×4
→
Where the daily ratio actually sits, twelve months of sessions
ranking 3×4
→
See all 2,170 queries →