Unusual Options Activity: Last Session
Market-wide options volume by session, with monthly expirations labelledseries ·
2026-10-08 · 25×5
Calls or puts: the board's call and put contract volume on the same sessiontable ·
2026-10-08 · 10×5
What follows a heavy options session: next-session absolute move vs. the same names on an ordinary daytable ·
2026-10-08 · 5×6
What the session's contracts were made of: options volume by days to expiryranking ·
2026-10-08 · 6×4
Unusual options activity: last completed session vs. each underlying's own 20-session averagetable ·
2026-10-08 · 10×8
Equity vs Index Put/Call Ratio: What's High?
The total is a call-volume-weighted blend of the two bucketsranking ·
2026-10-04 · 11×4
The same equity ratio, computed with and without ETF optionsseries ·
2026-10-04 · 22×4
Single-stock bucket vs ETF bucket, session by sessionseries ·
2026-10-04 · 33×6
Put/call volume ratio by underlying, trailing 60 sessionstable ·
2026-10-04 · 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 |
|---|---|---|---|---|
| Sep 1 | 63.3 | ordinary | 76.1 | 20260901 |
| Sep 2 | 59.9 | ordinary | 76.1 | 20260902 |
| Sep 3 | 72 | ordinary | 76.1 | 20260903 |
| Sep 4 | 71.2 | ordinary | 76.1 | 20260904 |
| Sep 8 | 61.6 | ordinary | 76.1 | 20260908 |
| Sep 9 | 61.9 | ordinary | 76.1 | 20260909 |
| Sep 10 | 64.3 | ordinary | 76.1 | 20260910 |
| Sep 11 | 68.3 | ordinary | 76.1 | 20260911 |
| Sep 14 | 67.5 | ordinary | 76.1 | 20260914 |
| Sep 15 | 56.6 | ordinary | 76.1 | 20260915 |
| Sep 16 | 65.4 | ordinary | 76.1 | 20260916 |
| Sep 17 | 68.2 | ordinary | 76.1 | 20260917 |
| Sep 18 | 76.1 | monthly expiration | 76.1 | 20260918 |
| Sep 21 | 80.3 | ordinary | 76.1 | 20260921 |
| Sep 22 | 63.6 | ordinary | 76.1 | 20260922 |
| Sep 23 | 69 | ordinary | 76.1 | 20260923 |
| Sep 24 | 67.3 | ordinary | 76.1 | 20260924 |
| Sep 25 | 72.6 | ordinary | 76.1 | 20260925 |
| Sep 28 | 66.6 | ordinary | 76.1 | 20260928 |
| Sep 29 | 58.6 | ordinary | 76.1 | 20260929 |
| Sep 30 | 61.8 | ordinary | 76.1 | 20260930 |
| Oct 1 | 69.9 | ordinary | 76.1 | 20261001 |
| Oct 2 | 78.7 | ordinary | 76.1 | 20261002 |
| Oct 5 | 69.4 | ordinary | 76.1 | 20261005 |
| Oct 6 | 63.1 | ordinary | 76.1 | 20261006 |
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 3,256 queries →