STRASMORE/EXPLORE 2,948 QUERIES

ndx_monthly_ladder

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-02, from when-do-ndx-options-expire.

as of series 9×6read in context →
ndx_monthly_ladder — 9 rows by 6 columns, computed from US exchange, SIP and OPRA data.
expiration_dateexpiry_labellast_trade_labelcycleexchange_statusdays_away
2026-10-16Oct 16, 2026Oct 15standardfull session14
2026-11-20Nov 20, 2026Nov 19standardfull session49
2026-12-18Dec 18, 2026Dec 17quarterlyfull session77
2027-01-15Jan 15, 2027Jan 14standardfull session105
2027-02-19Feb 19, 2027Feb 18standardfull session140
2027-03-19Mar 19, 2027Mar 18quarterlyfull session168
2027-04-16Apr 16, 2027Apr 15standardfull session196
2027-05-21May 21, 2027May 20standardfull session231
2027-06-18Jun 18, 2027Jun 17quarterlyclosed259
Rows × columns
9 × 6
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 ndx_monthly_ladder, derived from the stored result.
ColumnTypeRangeNotes
expiration_date date 2026-10-16 to 2027-06-18
expiry_label text 9 distinct values (Apr 16, 2027, Dec 18, 2026, Feb 19, 2027…)
last_trade_label text 9 distinct values (Apr 15, Dec 17, Feb 18…)
cycle text 2 distinct values (quarterly, standard)
exchange_status text 2 distinct values (closed, full session)
days_away number 14 to 259

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 months AS
(
    SELECT addMonths(toDate('2026-01-01'), arrayJoin(range(18))) AS month_start
)
SELECT
    toString(e.third_friday)                     AS expiration_date,
    formatDateTime(e.third_friday, '%b %e, %Y')  AS expiry_label,
    formatDateTime(e.third_friday - 1, '%b %e')  AS last_trade_label,
    if(toMonth(e.third_friday) IN (3, 6, 9, 12), 'quarterly', 'standard') AS cycle,
    if(h.status = '', 'full session', h.status)  AS exchange_status,
    dateDiff('day', today(), e.third_friday)     AS days_away
FROM
(
    SELECT month_start + ((12 - toDayOfWeek(month_start)) % 7) + 14 AS third_friday
    FROM months
) AS e
LEFT JOIN
(
    SELECT
        date,
        any(status) AS status
    FROM global_markets.stocks_market_holidays
    GROUP BY date
) AS h ON h.date = e.third_friday
WHERE e.third_friday >= today()
ORDER BY e.third_friday
⌘/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 analysiswhen-do-ndx-options-expire
opening_share_by_expiry series 12×4 → expiry_friday_clock series 7×3 → qqq_expiration_weekdays ranking 5×3 → The 2s10s spread by month, full history series 604×5 → One SPY $600 LEAPS call's price over two years (expired Jan 16 2026) series 470×2 → The 5s30s spread month by month, with both legs series 241×4 → See all 2,948 queries →