STRASMORE/EXPLORE 3,293 QUERIES

witching_months

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-16, from options-expiration-day-clock-lagos-time.

as of series 11×3read in context →
witching_months — 11 rows by 3 columns, computed from US exchange, SIP and OPRA data.
monthexpiry_friday_mother_friday_avg_m
2025-1080.683.4
2025-11109.271.7
2025-1284.862.9
2026-0167.170.5
2026-0288.876.5
2026-03131.285
2026-0459.736.5
2026-0548.436.6
2026-0751.541.9
2026-0833.729.7
2026-0954.331
Rows × columns
11 × 3
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 witching_months, derived from the stored result.
ColumnTypeRangeNotes
month text 11 distinct values (2025-10, 2025-11, 2025-12…)
expiry_friday_m number 33.7 to 131.2
other_friday_avg_m number 29.7 to 85

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.

SELECT
    formatDateTime(et_day, '%Y-%m') AS month,
    round(sumIf(day_volume, toDayOfMonth(et_day) BETWEEN 15 AND 21) / 1e6, 1)       AS expiry_friday_m,
    round(avgIf(day_volume, NOT (toDayOfMonth(et_day) BETWEEN 15 AND 21)) / 1e6, 1) AS other_friday_avg_m
FROM
(
    SELECT
        toDate(toTimeZone(window_start, 'America/New_York')) AS et_day,
        sum(toFloat64(volume))                               AS day_volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2025-10-01 00:00:00')
      AND window_start <  toDateTime('2026-10-10 00:00:00')
      AND toDayOfWeek(toTimeZone(window_start, 'America/New_York')) = 5
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
    GROUP BY et_day
) AS fridays
GROUP BY month
HAVING countIf(toDayOfMonth(et_day) BETWEEN 15 AND 21) > 0
   AND countIf(NOT (toDayOfMonth(et_day) BETWEEN 15 AND 21)) > 0
ORDER BY month
⌘/Ctrl + Enter

Work with this data in your AI assistant

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