STRASMORE/EXPLORE 2,170 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-08-25, 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
Jul 1670.7ordinary76.820260716
Jul 1776.8monthly expiration76.820260717
Jul 2063.5ordinary76.820260720
Jul 2156.8ordinary76.820260721
Jul 2255.4ordinary76.820260722
Jul 2365.4ordinary76.820260723
Jul 2470.7ordinary76.820260724
Jul 2764.3ordinary76.820260727
Jul 2858.7ordinary76.820260728
Jul 2966.3ordinary76.820260729
Jul 3066.3ordinary76.820260730
Jul 3175.5ordinary76.820260731
Aug 372.7ordinary76.820260803
Aug 478.9ordinary76.820260804
Aug 569.5ordinary76.820260805
Aug 663.2ordinary76.820260806
Aug 773.2ordinary76.820260807
Aug 1061.4ordinary76.820260810
Aug 1154.6ordinary76.820260811
Aug 1255.4ordinary76.820260812
Aug 1366.6ordinary76.820260813
Aug 1466ordinary76.820260814
Aug 1760.9ordinary76.820260817
Aug 1856.9ordinary76.820260818
Aug 1967.2ordinary76.820260819
Rows × columns
25 × 5
Period covered
to
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 date Aug 10 to Jul 31
contracts_m number 54.6 to 78.9 count
session_type text 2 distinct values (monthly expiration, ordinary)
monthly_expiry_m number every row is 76.8
session_id number 20,260,716 to 20,260,819

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.

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

Run your own version of this

The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.

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 47×7 See all 2,170 queries →