Strasmore Research
Learn am Matt ConnorBy Matt Connor · data as of August 6, 2026 · refreshed weekly

2026 Options Expiration Calendar: All 12 Dates

Full 2026 options expiration calendar: twelve monthly third Fridays, four quarterly dates, plus the holiday rule wey fit shift one to Thursday.

2026 options expiration calendar dey follow one rule: standard monthly options for US stocks and ETFs stop trading on the third Friday of each month. That one give twelve monthly expiration dates for 2026, from Jan 16 reach Dec 18, and four of dem also serve as quarterly expirations. Every date for this page come from calendar calculation, no be copied from any list. The second section show you how to regenerate all twelve by yourself with one command.

2026 options expiration calendar, month by month

Standard monthly contract na the default listing for any US stock or ETF wey get options. E get one expiration every month, for the third Friday, when market close. The panel below calculate all twelve 2026 dates with simple date arithmetic, then e check each one against the live exchange holiday calendar.

QueryAll the monthly options expiration dates for 2026
The exact SQL behind every number
SELECT
    toString(cal.exp_date)                                                            AS expiration_date,
    concat(formatDateTime(cal.exp_date, '%b '), toString(toDayOfMonth(cal.exp_date))) AS expiry_label,
    formatDateTime(cal.exp_date, '%a')                                                AS weekday,
    toDayOfMonth(cal.exp_date)                                                        AS day_of_month,
    if(toMonth(cal.exp_date) IN (3, 6, 9, 12), 'quarterly', 'monthly')                AS expiry_class,
    multiIf(cal.exp_date < today(),   'already traded',
            hol.holiday != '',        concat('scheduled closure: ', hol.holiday),
                                      'no closure scheduled')                         AS calendar_check
FROM
(
    SELECT
        toDate('2026-01-01') + toIntervalMonth(arrayJoin(range(12)))  AS month_start,
        month_start + ((12 - toDayOfWeek(month_start)) % 7) + 14      AS exp_date
) AS cal
LEFT JOIN
(
    SELECT
        date         AS d,
        any(name)    AS holiday
    FROM global_markets.stocks_market_holidays
    GROUP BY date
) AS hol ON hol.d = cal.exp_date
ORDER BY cal.exp_date
Run this yourself

The day_of_month column na the part wey worth studying. Third Friday no fit fall before the 15th and no fit fall after the 21st: first Friday for any month dey somewhere inside the first seven days, and third Friday dey fourteen days after am. For 2026, the earliest one na May, for 15th, and the latest one na August, for 21th. The other ten dey between those two.

Expiration na also the last day wey these contracts dey trade, and for ordinary stock and ETF options, both na the same day. Index options na the exception wey you need know: several of dem settle on Friday morning based on the opening prints, so their final trading session na Thursday. Our guide to AM and PM settled options explain which one be which, while when options expire cover wetin happen to position on the day itself.

How to generate every 2026 expiration date yourself

You no need data feed for anything inside this calendar. Python get one calendar module for standard library, so one command fit generate the whole list. You no need install anything or connect to network:

python3 -c "import calendar; print(*[[d for w in calendar.Calendar().monthdatescalendar(2026, m) for d in w if d.month == m and d.weekday() == 4][2] for m in range(1, 13)], sep='\\n')"

Run am for any machine wey get Python 3, and e go print twelve ISO dates, one for each line. monthdatescalendar go return one month as list of complete weeks, with days from neighbouring months added for both ends. d.month == m test go remove those borrowed days, d.weekday() == 4 go keep the Fridays (Monday na 0), and [2] go pick the third one. Change the year and the list go generate again. Na the complete calculation be this. Na why you derive expiration calendar instead of looking am up.

Which 2026 expirations be quarterly

Four out of the twelve dey fall for March, June, September, and December: Mar 20, Jun 19, Sep 18, and Dec 18. For those dates, stock options, stock index options, and stock index futures all dey expire together. Na from there the nickname triple witching come. The mechanics dey inside wetin triple witching be, while the quarter-by-quarter details dey for 2026 triple witching dates. One of the four get asterisk for 2026, and the next section go use the market prints work out which one.

Wetin dey happen when market holiday fall on expiration Friday

The third-Friday rule get one exception, and na real exception. When the third Friday na exchange holiday, market no dey open that day, and the last trading day for the monthly contracts move back to the Thursday before am. Whether this happen for any particular year, you fit confirm am from the tape instead of relying on list. One full US session get 390 one-minute bars, meaning six and a half hours from 9:30 a.m. open to 4:00 p.m. close. On day wey market remain closed, tape no go print any bar.

QueryEvery Friday for 2026 reach July, shortest session first
The exact SQL behind every number
SELECT
    toString(cal.day)                                                         AS session_date,
    concat(formatDateTime(cal.day, '%b '), toString(toDayOfMonth(cal.day)))   AS session_label,
    if(toDayOfMonth(cal.day) BETWEEN 15 AND 21, 'third Friday', 'other Friday') AS friday_type,
    toUInt32(ifNull(tape.bars, 0))                                            AS regular_session_bars
FROM
(
    SELECT toDate('2026-01-01') + arrayJoin(range(212)) AS day
) AS cal
LEFT JOIN
(
    SELECT
        toDate(toTimeZone(window_start, 'America/New_York')) AS d,
        count()                                              AS bars
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-01-01 00:00:00')
      AND window_start <  toDateTime('2026-08-02 00:00:00')
      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 d
) AS tape ON tape.d = cal.day
WHERE toDayOfWeek(cal.day) = 5
ORDER BY regular_session_bars ASC, cal.day ASC
Run this yourself

Between January and end of July 2026, 31 Fridays pass. Three of dem print 0 regular-session minute bars, na wetin closed market dey look like for tape: Apr 3, Jun 19, and Jul 3. The first one na Good Friday. The third one na Independence Day observed, because July 4 fall on Saturday for 2026 and exchanges take the Friday before am. Every other Friday for the period print 390 bars, meaning full session.

The middle one na the exception wey this page need explain. Jun 19 na Juneteenth National Independence Day, wey US equity exchanges don observe since 2022. For 2026, e fall on 19th of June: the third Friday, the June monthly expiration, and one of the four quarterly dates. Market no dey open that day, and the June monthly contracts get their last trading day on the Thursday before am. Na the only third Friday for 2026 wey fall on scheduled market closure, and the 2026 triple witching dates page get the quarterly details.

Good Friday na the other holiday wey fit fall on third Friday. Unlike Juneteenth, e no get fixed date. E dey follow Easter, wey fit move between late March and late April. The panel below calculate the April third Friday for each of the last eleven years and count wetin SPY tape record on that day.

QueryApril expiration Friday bin be trading day?
The exact SQL behind every number
SELECT
    toString(toYear(cal.exp_date))                                AS year,
    concat(formatDateTime(cal.exp_date, '%b '), toString(toDayOfMonth(cal.exp_date))) AS april_expiry_label,
    toUInt32(ifNull(tape.bars, 0))                                AS regular_session_bars,
    if(ifNull(tape.bars, 0) = 0, 'market closed', 'full session') AS session_status
FROM
(
    SELECT
        toDate(concat(toString(2016 + arrayJoin(range(11))), '-04-01')) AS april_first,
        april_first + ((12 - toDayOfWeek(april_first)) % 7) + 14        AS exp_date
) AS cal
LEFT JOIN
(
    SELECT
        toDate(toTimeZone(window_start, 'America/New_York')) AS d,
        count()                                              AS bars
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2016-01-01 00:00:00')
      AND toMonth(window_start) = 4
      AND toDayOfMonth(window_start) BETWEEN 14 AND 22
      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 d
) AS tape ON tape.d = cal.exp_date
ORDER BY cal.exp_date
Run this yourself

Across the 11 Aprils from 2016 reach 2026, April expiration Friday meet closed market for 2019, for 2022, and again for 2025. For each of those years, monthly contracts stop trading on the Thursday instead. For 2026, April date print full 390 bars, so the 2026 Thursday shift happen for June, no be April.

Where weeklys, end of month, and Monday expirations fit

The third Friday na the one date wey every optionable name share. Several other series dey around am, and dem no follow the third-Friday rule at all. Weeklys dey list for most other Fridays, usually some weeks ahead at a time. End-of-month options expire on the last business day of the month, no be Friday. For names wey dey trade heavily, Monday and Wednesday expirations dey too. For small list of index products and single stocks, expiration dey happen every trading day. The current list dey for stocks with daily options.

The difference in size between one monthly expiration and everything around am dey show immediately for contract counts. This panel takes every 2026 expiration date wey AAPL options trade enter during the first half of the year, then e count the different contracts for each date.

QueryAAPL contracts wey dem trade enter each 2026 expiration date, H1
The exact SQL behind every number
SELECT
    toString(agg.exp_date)                                                            AS expiration_date,
    concat(formatDateTime(agg.exp_date, '%b '), toString(toDayOfMonth(agg.exp_date))) AS expiry_label,
    multiIf(toDayOfWeek(agg.exp_date) = 5 AND toDayOfMonth(agg.exp_date) BETWEEN 15 AND 21, 'monthly third Friday',
            toDayOfWeek(agg.exp_date) = 5,                                                 'weekly Friday',
            toDayOfWeek(agg.exp_date) = 4 AND toDayOfMonth(agg.exp_date) BETWEEN 14 AND 20, 'Thursday before a third Friday',
                                                                                           'other weekday') AS expiry_class,
    agg.n_contracts                                                                   AS contracts_traded
FROM
(
    SELECT
        toDate(expiration_date) AS exp_date,
        countDistinct(ticker)   AS n_contracts
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'AAPL'
      AND toDate(expiration_date) >= toDate('2026-01-01')
      AND toDate(expiration_date) <  toDate('2026-07-01')
      AND volume > 0
      AND iv_converged = 1
    GROUP BY exp_date
) AS agg
ORDER BY contracts_traded DESC, agg.exp_date ASC
Run this yourself

The 2026 expiration date wey get the highest weight for AAPL within that period, Jun 18, carry 200 different contracts, and the panel classify am as Thursday before a third Friday. The date wey get the lowest count across the same six months carry 50. Monthly expirations list strikes further above and below the money, and further into the future. Long-dated positions dey build up on dem for years before the date. Trading for almost all these contracts continue reach the 4:00 p.m. close; what time options stop trading get the cutoffs wey different.

How these panels were built

The session-length panels count one-minute bars on the SPY tape between 9:30 a.m. and 4:00 p.m. ET, after dem convert stored UTC timestamps. No holiday date hardcode dey inside either query. A closed day simply mean weekday wey print zero regular-session bars. Dem recover am from the days wey trade and the days wey no trade. The AAPL panel count only contracts wey trade at least once and get converged implied-volatility mark. This one keeps listings without price out of the count, and e cover January reach June 2026. The twelve expiration dates come from date arithmetic on the first day of each month, the same calculation wey the Python command above use.

FAQ

Options go expire when for 2026?

Standard monthly options for US stocks and ETFs dey expire on the third Friday of every month, twelve dates wey run from Jan 16 reach Dec 18. The June date na scheduled market closure, so those contracts go stop trading on the Thursday before am. Weekly, end-of-month and daily series get their own schedules around those twelve dates.

Which dates be the 2026 triple witching dates?

The four quarterly expirations go happen on Mar 20, Jun 19, Sep 18 and Dec 18. Stock options, index options and index futures all go reach expiration together on those dates. The June date fall on exchange holiday for 2026, so the last trading day go move back to Thursday.

Options expiration date fit move from Friday?

Yes. If the third Friday na exchange holiday, market no go open and monthly contracts go stop trading on the Thursday before. For the last eleven Aprils, this happen in 2019, 2022 and 2025, always on Good Friday. E go happen once for 2026 too, for June, because the third Friday na Juneteenth.

Weekly options dey expire on the third Friday too?

The third Friday of the month na standard monthly contract day, so weekly series simply skip am. Weeklys cover the other Fridays. For the biggest names, Monday and Wednesday expirations dey available too.

US expiration date na the same as Japan SQ date?

No. Japanese index futures and options settle based on special quotation, wey dem write as SQ. Dem calculate am from the opening prices for the second Friday. The quarterly one for March, June, September and December na mega SQ. US monthly options dey expire on the third Friday. Anybody wey dey follow both calendars dey work with two different dates every month.


Every panel for this page come with the exact SQL underneath am. To rebuild the same calendar for another year, or count contracts for another ticker, ask the question in plain English on the Strasmore terminal.