STRASMORE/EXPLORE 3,256 QUERIES 22Y EQUITIES · 12Y OPTIONS

3,256 answered market questions

every one with its exact SQL, its result and the date it was computed · free, no signup

Unusual Options Activity: Last Session
Market-wide options volume by session, with monthly expirations labelledseries · 2026-10-08 · 25×5Preview: a 16-point series, ending higher. 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×4Preview: 6 ranked values, largest first. 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×4Preview: 11 ranked values, largest first. The same equity ratio, computed with and without ETF optionsseries · 2026-10-04 · 22×4Preview: a 16-point series, roughly flat. Single-stock bucket vs ETF bucket, session by sessionseries · 2026-10-04 · 33×6Preview: a 16-point series, roughly flat. 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×4Preview: a 16-point series, ending lower. Where the daily ratio actually sits, twelve months of sessionsranking · 2026-08-06 · 3×4Preview: 3 ranked values, largest first. Monthly median put/call ratio: broad market ETFs against single stocksseries · 2026-08-06 · 12×4Preview: a 12-point series, roughly flat. Daily put/call volume ratio, SPY against AAPL, July 2026series · 2026-08-06 · 22×4Preview: a 16-point series, ending higher. Put and call volume for eight household names, July 2026ranking · 2026-08-06 · 8×4Preview: 8 ranked values, largest first.
Market-wide options volume by session, with monthly expirations labelled

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

most recentas 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
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
$