STRASMORE/EXPLORE 3,256 QUERIES

Market-wide options volume by session, with monthly expirations labelled

Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-10-08, from Unusual Options Activity: Last Session.

as of series 25×5read in context →
Market-wide options volume by session, with monthly expirations labelled — 25 rows by 5 columns, computed from US exchange, SIP and OPRA data.
sessioncontracts_msession_typemonthly_expiry_msession_id
Sep 163.3ordinary76.120260901
Sep 259.9ordinary76.120260902
Sep 372ordinary76.120260903
Sep 471.2ordinary76.120260904
Sep 861.6ordinary76.120260908
Sep 961.9ordinary76.120260909
Sep 1064.3ordinary76.120260910
Sep 1168.3ordinary76.120260911
Sep 1467.5ordinary76.120260914
Sep 1556.6ordinary76.120260915
Sep 1665.4ordinary76.120260916
Sep 1768.2ordinary76.120260917
Sep 1876.1monthly expiration76.120260918
Sep 2180.3ordinary76.120260921
Sep 2263.6ordinary76.120260922
Sep 2369ordinary76.120260923
Sep 2467.3ordinary76.120260924
Sep 2572.6ordinary76.120260925
Sep 2866.6ordinary76.120260928
Sep 2958.6ordinary76.120260929
Sep 3061.8ordinary76.120260930
Oct 169.9ordinary76.120261001
Oct 278.7ordinary76.120261002
Oct 569.4ordinary76.120261005
Oct 663.1ordinary76.120261006
Rows × columns
25 × 5
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for Market-wide options volume by session, with monthly expirations labelled, derived from the stored result.
ColumnTypeRangeNotes
session text 25 distinct values (Oct 1, Oct 2, Oct 5…)
contracts_m number 56.6 to 80.3 count
session_type text 2 distinct values (monthly expiration, ordinary)
monthly_expiry_m number every row is 76.1
session_id number 20,260,901 to 20,261,006

Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.

Run it yourself

This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.

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
⌘/Ctrl + Enter

Work with this data in your AI assistant

Opens ready to query, with this page's data. Free, no account.

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 → Daily single stock put/call ratio against its 21 session average series 84×4 → Regular-hours session scoreboard: open, close, low, high, volume for every SPCX session since listing series 80×7 → See all 3,256 queries →