Strasmore Research
Learn am Matt ConnorBy Matt Connor · Updated 2026-10-24 · data as of October 24, 2026 · refreshed weekly

Option Expiration Cycles: How Dem Work

Option expiration cycles decide which months go show for stock option chain. Learn the three cycle groups and why LEAPS dey land for January.

Option expiration cycles na listing rule wey dey decide which expiration months go show for stock option chain. When dem first list options for every US stock wey get options, dem assign am to one of three cycles. That assignment, together with rule say at least four expiration months must dey available at any time, na wetin produce the row of dates wey you see for broker chain. The question here na which months dem go list. For the date wey option actually expire, see when options expire, and for this year date list, see 2026 options expiration calendar.

Wetin be option expiration cycle?

When exchange first list options for one stock, e put the stock inside one of three expiration cycles. Each cycle na four months, and the months dey come every quarter:

  • January cycle: January, April, July, October
  • February cycle: February, May, August, November
  • March cycle: March, June, September, December

Once dem set stock cycle, e no dey change for as long as the listing dey active. Na property of the listing, no be the company own. The cycle control the longer-dated monthly expirations — the third Friday contracts wey dey beyond the front of the chain. E no talk about the next few weeks; separate rule dey cover that one.

Why every chain dey show at least four expiration months?

Listing standards set minimum. Optionable stock dey carry at least four expiration months for any time, based on fixed order. The first two na near-term months: current month and the month after am. The next two na first two months for the stock own cycle wey the near-term pair never cover.

Make we work am out for February cycle stock wey dey June. Near-term months na June and July. The next cycle months wey never enter na August and November, so the chain show June, July, August, November. Once June expiration pass, near-term pair become July and August, while chain reach November and February. Near-term months dey roll every month. Cycle months dey move one step every three months.

Which expiration months dey listed for a real chain?

Four na the floor, and heavily traded name dey well above am. The panel below list every expiration for Apple’s chain on the most recent session wey dey on file, together with the number of contracts carried for each date.

QueryEvery expiration wey dem list for AAPL chain, with contracts for each date
23 rows (showing 20)
expiry dateexpiration labeldays wey remaincontract count
2026-10-23Oct 23, 20261121
2026-10-26Oct 26, 2026470
2026-10-28Oct 28, 2026660
2026-10-30Oct 30, 2026885
2026-11-04Nov 4, 20261358
2026-11-06Nov 6, 20261579
2026-11-13Nov 13, 20262270
2026-11-20Nov 20, 202629110
2026-11-27Nov 27, 20263661
2026-12-04Dec 4, 20264334
2026-12-18Dec 18, 202657109
2027-01-15Jan 15, 202785102
2027-02-19Feb 19, 202712066
2027-03-19Mar 19, 202714865
2027-04-16Apr 16, 202717665
2027-06-17Jun 17, 202723866
2027-09-17Sep 17, 202733075
2027-12-17Dec 17, 202742180
2028-01-21Jan 21, 202845666
2028-03-17Mar 17, 202851228
The exact SQL behind every number
WITH
(
    SELECT max(date)
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'AAPL'
      AND date >= today() - 10
) AS chain_date
SELECT
    toString(expiration_date)                     AS expiry_date,
    formatDateTime(expiration_date, '%b %e, %Y')  AS expiration_label,
    toUInt32(max(days_to_expiry))                 AS days_out,
    countDistinct(ticker)                         AS contract_count
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
  AND date = chain_date
  AND expiration_date >= chain_date
GROUP BY expiration_date
ORDER BY expiration_date
Run am yourself

That one na 23 separate expiration dates on one underlying. The nearest one, Oct 23, 2026, dey 1 days ahead and carry 121 contracts. The farthest one, Jan 19, 2029, dey 820 days out with 59 contracts on am. Look the shape between the two ends: dates dey come weekly for the front, then thin to roughly one per month through the middle of the year, before dem stretch to the far-dated months for the right edge. Those contract counts show how many strikes dey exist for each date, no be how much open interest dey on dem. That one na the separate question behind the max pain strike.

Weeklies and dailies dey follow the cycle?

No. The cycle na only for monthly expirations, wey be the third Friday contracts. The remaining part of modern chain dey come from separate listing programs wey no dey inside the cycle:

  • Weekly options, wey dem list some weeks ahead and expire on Fridays wey no be the third Friday.
  • End of month and quarter end series, wey dey tied to the last trading day of the month or quarter, instead of Friday.
  • Daily options, wey get expiration for every trading day of the week. Dem dey available for short, specific list of very active underlyings. See which stocks get daily options for the list.

None of these add any cycle month. Stock fit show ten weekly dates one after another for the front of its chain and still get ordinary four month cycle name behind dem. Two chains fit look completely different but still dey run on the same rules.

Put several underlyings side by side for the same session, and the difference go show as number of dates.

QueryExpiration dates wey dem list, one broad lineup against a thinner chain
symbollisted expirationsexpirations wey dey within 45dmonths wey pass 90d
SPY331610
AAPL231011
MSFT221010
KO1879
HRL1374
CLX714
The exact SQL behind every number
WITH
(
    SELECT max(date)
    FROM global_markets.options_greeks
    WHERE date >= today() - 10
) AS chain_date
SELECT
    underlying_symbol                                                     AS symbol,
    countDistinct(expiration_date)                                        AS listed_expirations,
    countDistinctIf(expiration_date, days_to_expiry <= 45)                AS expirations_within_45d,
    countDistinctIf(toStartOfMonth(expiration_date), days_to_expiry > 90) AS months_beyond_90d
FROM global_markets.options_greeks
WHERE date = chain_date
  AND expiration_date >= chain_date
  AND underlying_symbol IN ('SPY', 'AAPL', 'MSFT', 'KO', 'CLX', 'HRL')
GROUP BY underlying_symbol
ORDER BY listed_expirations DESC
Run am yourself

Across the 6 names for that panel, SPY get the widest lineup, with 33 listed expirations. 16 of them dey inside 45 days. That dense front end dey come from daily and weekly listing program, no be from the cycle. CLX dey the other end of the panel, with 7 listed dates altogether. After 90 days, the picture change: the widest name get 10 distinct expiration months, compared with 4 for the narrowest one. Na for the front of a chain lineup dey differ. The back na where the cycle dey show.

How I fit tell which cycle stock dey follow?

No lookup table dey necessary. Open the chain, skip the current month and the month after am, then find the first monthly expiration after those two months. That month and the month three months after am na the stock’s cycle months.

You fit see the same pattern across the whole listed market at once. The next panel count how many underlyings list each third Friday expiration inside the next fourteen months.

QueryThird Friday expirations for di next fourteen months, by underlyings wey list dem
expiry month startmonth labelunderlyings listing
2026-11-01Nov 20263769
2026-12-01Dec 20263037
2027-01-01Jan 20272152
2027-02-01Feb 2027924
2027-03-01Mar 20271584
2027-04-01Apr 20271155
2027-05-01May 2027861
2027-07-01Jul 202738
2027-08-01Aug 202761
2027-09-01Sep 2027447
2027-10-01Oct 202718
2027-11-01Nov 202753
2027-12-01Dec 2027365
The exact SQL behind every number
WITH
(
    SELECT max(date)
    FROM global_markets.options_greeks
    WHERE date >= today() - 10
) AS chain_date
SELECT
    toString(toStartOfMonth(expiration_date))                AS expiry_month_start,
    formatDateTime(toStartOfMonth(expiration_date), '%b %Y') AS month_label,
    countDistinct(underlying_symbol)                         AS underlyings_listing
FROM global_markets.options_greeks
WHERE date = chain_date
  AND expiration_date >= chain_date
  AND days_to_expiry <= 430
  AND toDayOfWeek(expiration_date) = 5
  AND toDayOfMonth(expiration_date) BETWEEN 15 AND 21
  AND underlying_symbol NOT IN ('SPCX')
GROUP BY toStartOfMonth(expiration_date)
ORDER BY toStartOfMonth(expiration_date)
Run am yourself

The nearest third Friday, Nov 2026, dey listed by 3769 underlyings. Every name wey get options carry its front months, so that first point dey close to the whole listed universe. The count then dey drop, but e no drop evenly. After the near-term pair, stock go show again only for the months wey belong to its own cycle. So each month farther out get only one part of the market, no be the whole market. Quarter-end months and the January series usually dey higher than their neighbours. The far edge of the panel dey thinner: Dec 2027, the last month inside the fourteen-month window and more than one year away, na only 365 underlyings carry am. After twelve months, the ladder empty for every month except the January series, wey the LEAPS panel below dey cover.

The four March cycle months na also the four triple witching dates for the year. Na those dates index and equity contracts expire together on one third Friday.

Why LEAPS dey list for January?

LEAPS, long dated options wey get more than one year before dem expire, dey follow their own listing schedule. For single stocks, the long dated series na January one, no matter the cycle wey the stock dey follow. Even stock wey dey March cycle still get January LEAPS.

The count across the market dey show this clearly. This panel dey take every third Friday expiration wey dey more than 300 days away, then count the underlyings wey list am.

QueryMonthly expirations wey pass 300 days, by underlyings wey list dem
LEAPS seriesunderlyings listing
Jan 20281412
Jan 20291054
Sep 2027447
Dec 2027365
Dec 2028259
Jun 2028130
Aug 202761
Nov 202753
Mar 202820
Sep 202820
Oct 202718
Feb 20289
Apr 20282
Jul 20281
The exact SQL behind every number
WITH
(
    SELECT max(date)
    FROM global_markets.options_greeks
    WHERE date >= today() - 10
) AS chain_date
SELECT
    formatDateTime(toStartOfMonth(expiration_date), '%b %Y') AS leaps_series,
    countDistinct(underlying_symbol)                         AS underlyings_listing
FROM global_markets.options_greeks
WHERE date = chain_date
  AND days_to_expiry > 300
  AND toDayOfWeek(expiration_date) = 5
  AND toDayOfMonth(expiration_date) BETWEEN 15 AND 21
  AND underlying_symbol NOT IN ('SPCX')
GROUP BY toStartOfMonth(expiration_date)
ORDER BY underlyings_listing DESC
Run am yourself

Jan 2028 na the biggest month for that window, and 1412 underlyings list am. The month wey get the fewest listings for the same window na Jul 2028, and 1 underlyings get am.

Nothing dey happen to January contract as e dey age. January series wey dem list two years ahead na the same contract wey, one year later, simply become the January monthly for the chain: same strike, same third Friday. Na only the label dey disappear when e reach the one-year mark. Wetín be LEAPS cover the contract side, while LEAPS wey deep in the money dey explain how people dey use the long dated end.

Cycle dey decide whether spread fit get quote

Na here listing rule dey meet real order. Calendar spread dey buy one expiration and sell another one for the same strike. Diagonal dey do the same thing across two strikes. Both need two expirations to dey exist at the same time for the same underlying.

For name wey get weeklies and full cycle, this one easy. For thinner name, the month wey you want fit no dey listed at all. February cycle stock no go list September expiration until September become one of the two near-term months. So you no fit build June-to-September calendar on that stock in June, no matter the price. Na the same restriction dey explain why long-dated structures dey concentrate for January expirations: poor man's covered call na diagonal wey dey use long-dated call, and January na the month wey every optionable name get in common.

Liquidity na second filter after listing. Month fit dey listed and still quote wide with small open interest. That one fit turn two-leg structure into fill problem. Listing rule dey tell you wetin dey exist. Tape dey tell you wetin dey trade.

FAQ

Option expiration cycle three ones na wetin?

Three cycles dey, and dem name each one after the first month wey e cover: January cycle (January, April, July, October), February cycle (February, May, August, November), and March cycle (March, June, September, December). Dem assign stock to one cycle when dem first list options on am, and the assignment no dey change afterward.

How many expiration months stock fit get at the same time?

At least four. Two na near-term months: the current month and the next one. The other two come from the cycle wey dem assign to the stock. Actively traded names fit get plenty more when dem add weekly, end of month, quarter end and daily expirations on top this minimum.

All stocks dey get the same expiration months?

No. The two near-term months dey the same for everybody. The months after dem depend on which of the three cycles dem assign to the stock. So, two similar companies fit get completely different back months.

Weekly options dey part of the expiration cycle?

No. Dem list weeklies under separate program a few weeks ahead, and dem expire on Fridays wey no be the third Friday. Dem no change the stock’s cycle, and dem no count toward the four-month minimum.

Why dem dey list LEAPS for January?

Single-stock LEAPS dey tied to January expiration, no matter the underlying’s cycle. This one give every optionable name one common long-dated month. As January series enter within one year to expiration, e become the stock’s ordinary January monthly, without any change to the contract itself.

How these panels dey count

Each panel dey read the latest session wey dey on file for the daily contract-level options data. E count expiration as listed when at least one contract for that expiration get record for that session. Monthly expirations dey separate based on their date pattern: Friday wey fall between the 15th and 21st day of a month na the third Friday. Na that expiration the cycle rule dey control. Weekly, end-of-month and daily expirations no pass this test, so dem dey drop out of the two market-wide panels by design. Na why those two counts dey lower than the raw number of dates for any real chain. The market-wide panels also remove symbols wey vendor feeds don assign to more than one company over time, so one ticker no go merge two entities into one count.


Every panel here get the SQL wey produce am. Open one, change the ticker, and the same question go run against any chain wey you like for the Strasmore terminal.

#options#expiration#leaps#options chain#exchanges