Unusual Options Activity: Last Session
Market-wide options volume by session, with monthly expirations labelledseries ·
2026-08-25 · 25×5
Calls or puts: the board's call and put contract volume on the same sessiontable ·
2026-08-25 · 10×5
What follows a heavy options session: next-session absolute move vs. the same names on an ordinary daytable ·
2026-08-25 · 5×6
What the session's contracts were made of: options volume by days to expiryranking ·
2026-08-25 · 6×4
Unusual options activity: last completed session vs. each underlying's own 20-session averagetable ·
2026-08-25 · 10×8
Equity vs Index Put/Call Ratio: What's High?
The total is a call-volume-weighted blend of the two bucketsranking ·
2026-08-22 · 11×4
The same equity ratio, computed with and without ETF optionsseries ·
2026-08-22 · 23×4
Single-stock bucket vs ETF bucket, session by sessionseries ·
2026-08-22 · 33×6
Put/call volume ratio by underlying, trailing 60 sessionstable ·
2026-08-22 · 12×5
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
Market-wide options volume by session, with monthly expirations labelled
Market-wide options volume by session, with monthly expirations labelled
| session | contracts_m | session_type | monthly_expiry_m | session_id |
|---|---|---|---|---|
| Jul 16 | 70.7 | ordinary | 76.8 | 20260716 |
| Jul 17 | 76.8 | monthly expiration | 76.8 | 20260717 |
| Jul 20 | 63.5 | ordinary | 76.8 | 20260720 |
| Jul 21 | 56.8 | ordinary | 76.8 | 20260721 |
| Jul 22 | 55.4 | ordinary | 76.8 | 20260722 |
| Jul 23 | 65.4 | ordinary | 76.8 | 20260723 |
| Jul 24 | 70.7 | ordinary | 76.8 | 20260724 |
| Jul 27 | 64.3 | ordinary | 76.8 | 20260727 |
| Jul 28 | 58.7 | ordinary | 76.8 | 20260728 |
| Jul 29 | 66.3 | ordinary | 76.8 | 20260729 |
| Jul 30 | 66.3 | ordinary | 76.8 | 20260730 |
| Jul 31 | 75.5 | ordinary | 76.8 | 20260731 |
| Aug 3 | 72.7 | ordinary | 76.8 | 20260803 |
| Aug 4 | 78.9 | ordinary | 76.8 | 20260804 |
| Aug 5 | 69.5 | ordinary | 76.8 | 20260805 |
| Aug 6 | 63.2 | ordinary | 76.8 | 20260806 |
| Aug 7 | 73.2 | ordinary | 76.8 | 20260807 |
| Aug 10 | 61.4 | ordinary | 76.8 | 20260810 |
| Aug 11 | 54.6 | ordinary | 76.8 | 20260811 |
| Aug 12 | 55.4 | ordinary | 76.8 | 20260812 |
| Aug 13 | 66.6 | ordinary | 76.8 | 20260813 |
| Aug 14 | 66 | ordinary | 76.8 | 20260814 |
| Aug 17 | 60.9 | ordinary | 76.8 | 20260817 |
| Aug 18 | 56.9 | ordinary | 76.8 | 20260818 |
| Aug 19 | 67.2 | ordinary | 76.8 | 20260819 |
the exact SQL behind every number
WITH tape AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
sum(toFloat64(volume)) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
GROUP BY d
),
ranked AS (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS raw_rn
FROM tape
),
cal AS (
SELECT d, vol, rn, sum(if(rn BETWEEN 2 AND 21, 1, 0)) OVER () AS baseline_sessions
FROM (
SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS rn
FROM ranked
WHERE vol >= 0.75 * (SELECT quantileExact(0.5)(vol) FROM ranked WHERE raw_rn > 1)
)
),
w AS (
SELECT d, vol,
toStartOfMonth(d) + toIntervalDay(((5 - toDayOfWeek(toStartOfMonth(d)) + 7) % 7) + 14) AS third_friday
FROM cal
WHERE rn <= 25
),
marked AS (
SELECT d, vol,
(d = max(if(d <= third_friday, d, toDate('1970-01-01'))) OVER (PARTITION BY toStartOfMonth(d)))
AND (third_friday <= max(d) OVER ()) AS is_expiry
FROM w
),
latest AS (
SELECT d, vol, is_expiry,
max(if(is_expiry, d, toDate('1970-01-01'))) OVER () AS last_expiry_d
FROM marked
)
SELECT formatDateTime(d, '%b %e') AS session,
round(vol / 1e6, 1) AS contracts_m,
multiIf(is_expiry, 'monthly expiration', 'ordinary') AS session_type,
round(max(if(d = last_expiry_d, vol, 0)) OVER () / 1e6, 1) AS monthly_expiry_m,
toYYYYMMDD(d) AS session_id
FROM latest
ORDER BY d ASC
More from this analysisUnusual Options Activity: Last Session
Calls or puts: the board's call and put contract volume on the same session
table 10×5
→
Unusual options activity: last completed session vs. each underlying's own 20-session average
table 10×8
→
What the session's contracts were made of: options volume by days to expiry
ranking 6×4
→
What follows a heavy options session: next-session absolute move vs. the same names on an ordinary day
table 5×6
→
See all 2,170 queries →