When Do Options Expire? Friday 4 PM ET & Daily
Most options stop trading at the 4:00 PM ET close on expiration Friday; weeklies expire Fridays, monthlies the third Friday, and SPY and QQQ expire daily.
US stock options expire on their stated expiration date, for most contracts, a Friday, with trading cutting off at the 4:00 PM ET close that day. Monthly contracts land on the third Friday; the most active ETFs and index products list a new expiration every trading day; and when a Friday is an exchange holiday, the expiration moves up to Thursday. Those are the rules on paper. This page shows the calendar as it actually trades, six weeks of the full options tape, the measured third-Friday dates for the rest of 2026, and a holiday week that moved a Friday.
What days do options actually expire?
Volume by the weekday of the expiration being traded, June 1 through July 9, 2026, across every listed US option:
| weekday | contracts_mm | pct_of_volume | distinct_expiry_dates | underlyings |
|---|---|---|---|---|
| 1 Monday | 186.6 | 10 | 14 | 33 |
| 2 Tuesday | 148.8 | 8 | 11 | 30 |
| 3 Wednesday | 225.7 | 12.1 | 22 | 45 |
| 4 Thursday | 404 | 21.6 | 14 | 5301 |
| 5 Friday | 903.2 | 48.3 | 39 | 5871 |
The exact SQL behind every number
SELECT weekday,
round(sum(vol) / 1e6, 1) AS contracts_mm,
round(100 * sum(vol) / sum(sum(vol)) OVER (), 1) AS pct_of_volume,
uniqExact(expiry) AS distinct_expiry_dates,
uniqExact(root) AS underlyings
FROM (
SELECT toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) AS expiry,
substring(ticker, 3, length(ticker) - 17) AS root,
multiIf(toDayOfWeek(toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6)))) = 1, '1 Monday',
toDayOfWeek(toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6)))) = 2, '2 Tuesday',
toDayOfWeek(toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6)))) = 3, '3 Wednesday',
toDayOfWeek(toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6)))) = 4, '4 Thursday',
'5 Friday') AS weekday,
toFloat64(volume) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-06-01 04:00:00'
AND window_start < '2026-07-10 04:00:00'
)
WHERE expiry IS NOT NULL
GROUP BY weekday
ORDER BY weekdayFriday-dated contracts drew 48.3% of all volume in the window, 903.2 million contracts across 39 distinct Friday expiration dates. Friday remains the calendar's center of gravity: weeklies expire there, and the monthly cycle lands on the third Friday. The Thursday row punches above its weight, 21.6% of volume on just 14 dates, and two of those Thursdays were relocated Fridays, covered below.
The underlyings column answers the title question for your stock. Friday-dated contracts traded on 5871 distinct option roots, essentially every optionable name in America, while Monday- and Tuesday-dated contracts traded on just 33 and 30 roots (10% and 8% of volume) and Wednesday on 45: midweek expiration belongs to index products, a few ETFs, and a handful of hyperactive single names. For everything else, expiration means Friday. (Thursday's 5301 roots are the two relocated Fridays at work.) One oddity to hold onto: Wednesday shows 22 distinct expiration dates, more than Thursday's 14, on 12.1% of the volume; the index-options section resolves that.
The tickers that expire every day
For SPY and its peers, "when do options expire" has a blunt answer: today, whenever today is. Every June 2026 session was an SPY expiration date:
| expiry_date | contracts_mm |
|---|---|
| 2026-06-01 | 5.97 |
| 2026-06-02 | 6.65 |
| 2026-06-03 | 6.56 |
| 2026-06-04 | 8.03 |
| 2026-06-05 | 14.62 |
| 2026-06-08 | 11.51 |
| 2026-06-09 | 14.16 |
| 2026-06-10 | 13.44 |
| 2026-06-11 | 11.8 |
| 2026-06-12 | 14.5 |
| 2026-06-15 | 11.78 |
| 2026-06-16 | 12.52 |
| 2026-06-17 | 9.98 |
| 2026-06-18 | 17.29 |
| 2026-06-22 | 10.73 |
| 2026-06-23 | 10.85 |
| 2026-06-24 | 11.14 |
| 2026-06-25 | 11.23 |
| 2026-06-26 | 13.85 |
| 2026-06-29 | 10.58 |
The exact SQL behind every number
SELECT toString(expiry) AS expiry_date,
round(sum(vol) / 1e6, 2) AS contracts_mm
FROM (
SELECT toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) AS expiry,
toFloat64(volume) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-06-01 04:00:00'
AND window_start < '2026-07-01 04:00:00'
AND ticker LIKE 'O:SPY2%'
)
WHERE expiry >= '2026-06-01' AND expiry <= '2026-06-30'
GROUP BY expiry
ORDER BY expiry21 expiration dates in a 21-session month, one per trading day. That daily cycle is what makes 0DTE options possible at scale (DTE = days to expiration). So which tickers have daily expirations? In June 2026, exactly 11 option roots listed an expiration for all 21 sessions:
| root | june_expiry_dates | contracts_mm |
|---|---|---|
| SPY | 21 | 240.3 |
| QQQ | 21 | 151.2 |
| SPXW | 21 | 80.7 |
| IWM | 21 | 36.1 |
| XSP | 21 | 3.6 |
| NDXP | 21 | 2.1 |
| RUTW | 21 | 0.9 |
| DJXW | 21 | 0 |
| MGTNW | 21 | 0 |
| MRUT | 21 | 0 |
| XND | 21 | 0 |
The exact SQL behind every number
SELECT root,
uniqExact(expiry) AS june_expiry_dates,
round(sum(vol) / 1e6, 1) AS contracts_mm
FROM (
SELECT substring(ticker, 3, length(ticker) - 17) AS root,
toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) AS expiry,
toFloat64(volume) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-06-01 04:00:00'
AND window_start < '2026-07-01 04:00:00'
)
WHERE expiry >= '2026-06-01' AND expiry <= '2026-06-30' AND root != 'SPCX'
GROUP BY root
HAVING june_expiry_dates >= 20
ORDER BY june_expiry_dates DESC, contracts_mm DESC, rootThree are stock ETFs, SPY, QQQ, and IWM, led by SPY's 240.3 million June contracts. The other eight are cash-settled index roots: the S&P 500 weekly root SPXW and its mini XSP, plus Nasdaq-100, Russell 2000, and Dow variants. No ordinary single stock is on the list, though single stocks are closer than most people think. NVDA's June expirations, ranked by volume:
| expiry_date | contracts_mm |
|---|---|
| 2026-06-18 | 6.76 |
| 2026-06-05 | 6.38 |
| 2026-06-12 | 6.11 |
| 2026-06-26 | 5.71 |
| 2026-06-10 | 3.7 |
| 2026-06-03 | 3.52 |
The exact SQL behind every number
SELECT toString(expiry) AS expiry_date,
round(sum(vol) / 1e6, 2) AS contracts_mm
FROM (
SELECT toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) AS expiry,
toFloat64(volume) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-06-01 04:00:00'
AND window_start < '2026-07-01 04:00:00'
AND ticker LIKE 'O:NVDA2%'
)
WHERE expiry >= '2026-06-01' AND expiry <= '2026-06-30'
GROUP BY expiry
ORDER BY contracts_mm DESC
LIMIT 6The leader, 2026-06-18 at 6.76 million contracts, is June's monthly expiration, relocated to Thursday, as covered below, and the rest of the top rows are dominated by weekly Fridays. NVDA lists midweek expirations too, and they trade, but the weekly-and-monthly rhythm still owns most of the volume.
Why does my stock only get monthly expirations?
Listing rules decide the calendar you see. Every optionable stock carries the monthly third-Friday contract, and each class is assigned at listing to one of three legacy quarterly cycles that governs its further-out months: January/April/July/October, February/May/August/November, or March/June/September/December. The assignment is a fossil from the floor era, but it still decides which back months sit on a slower name's board. Exchanges also list the two nearest months for every class, weekly Friday contracts where demand supports them, and daily expirations for the 11 roots above. Hence the pyramid: 5871 roots with a Friday date, 45 with a Wednesday, 33 with a Monday. A stock showing one expiration a month is simply a name without weekly listings.
The rest of the 2026 expiration calendar
Expiration dates are set years in advance, and forward-dated contracts already trade, the rest of 2026's calendar can be read straight off the tape. For each remaining month of 2026, the busiest expiration date in July 6–9 trading:
| month | busiest_expiry_date | weekday | contracts_mm | underlyings |
|---|---|---|---|---|
| 2026-07 | 2026-07-17 | Friday | 31.5 | 4613 |
| 2026-08 | 2026-08-21 | Friday | 14.6 | 4368 |
| 2026-09 | 2026-09-18 | Friday | 8.5 | 2198 |
| 2026-10 | 2026-10-16 | Friday | 3 | 1707 |
| 2026-11 | 2026-11-20 | Friday | 1.6 | 1493 |
| 2026-12 | 2026-12-18 | Friday | 3.2 | 2432 |
The exact SQL behind every number
WITH per_expiry AS (
SELECT toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) AS expiry,
sum(toFloat64(volume)) AS v,
uniqExact(substring(ticker, 3, length(ticker) - 17)) AS underlyings
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-07-06 04:00:00'
AND window_start < '2026-07-10 04:00:00'
GROUP BY expiry
)
SELECT formatDateTime(toStartOfMonth(expiry), '%Y-%m') AS month,
toString(argMax(expiry, (v, toString(expiry)))) AS busiest_expiry_date,
dateName('weekday', argMax(expiry, (v, toString(expiry)))) AS weekday,
round(max(v) / 1e6, 1) AS contracts_mm,
argMax(underlyings, (v, toString(expiry))) AS underlyings
FROM per_expiry
WHERE expiry >= '2026-07-13' AND expiry <= '2026-12-31'
GROUP BY month
HAVING toDayOfWeek(argMax(expiry, (v, toString(expiry)))) = 5
AND toDayOfMonth(argMax(expiry, (v, toString(expiry)))) BETWEEN 15 AND 21
ORDER BY monthEvery one lands on a Friday between the 15th and the 21st of its month, the third Friday: 2026-07-17, 2026-08-21, 2026-09-18, 2026-10-16, 2026-11-20, and 2026-12-18. Two are quarterly triple-witching dates (2026-09-18 and 2026-12-18), when stock options, index options, and index futures expire together; 2026's other two quarterly dates are already behind us, March 20, and the relocated June 18 covered next. Note November against December: 1493 roots carried the November monthly versus 2432 for December, the quarterly month that anchors long-dated LEAPS listings.
What happens when expiration Friday is a holiday?
The rule: expiration moves to the preceding trading day. The window contains both 2026 examples. June 19 (Juneteenth) pushed the quarterly expiration to Thursday June 18, the triple witching session. And July 3, the Independence Day closure, pushed that week's weeklies to Thursday July 2. The receipt for the July move, in SPY contracts:
| thursday_july2_contracts_mm | friday_july3_contracts_mm |
|---|---|
| 12.84 | 0 |
The exact SQL behind every number
SELECT round(sumIf(vol, expiry = '2026-07-02') / 1e6, 2) AS thursday_july2_contracts_mm,
round(sumIf(vol, expiry = '2026-07-03') / 1e6, 2) AS friday_july3_contracts_mm
FROM (
SELECT toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) AS expiry,
toFloat64(volume) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-06-29 04:00:00'
AND window_start < '2026-07-03 04:00:00'
AND ticker LIKE 'O:SPY2%'
)
WHERE expiry IS NOT NULLContracts dated Friday July 3 traded 0 million, zero. No such contracts existed; the listing calendar routed that week's Friday expiration to Thursday July 2, which traded 12.84 million SPY contracts on its own. Holiday weeks are covered more broadly in market holidays and early closes.
Index options play by different rules
Index options, the SPX family, NDX, RUT, VIX, are cash-settled (exercise moves cash, not shares, against a settlement level of the index) and European-style (no exercise before expiration). Most trade until 4:15 PM ET, fifteen minutes past the stock close, though an expiring PM-settled contract settles to the index level computed from 4:00 PM closing prices. And the classic third-Friday SPX monthly is AM-settled: it stops trading Thursday at the close and settles to a level computed from Friday morning's opening prints. Newer weekly and daily index contracts (the SPXW root) are PM-settled.
VIX options are the calendar's other oddball: they expire on Wednesday mornings, AM-settled, one per monthly cycle, listed many months out, the resolution to the Wednesday puzzle above. The roots with the most distinct Wednesday-dated expirations, from four July sessions of tape:
| root | wednesday_expiry_dates | nearest | furthest | contracts_k |
|---|---|---|---|---|
| SPXW | 9 | 2026-07-08 | 2027-06-30 | 3579 |
| VIX | 9 | 2026-07-22 | 2027-03-17 | 2709 |
| NDXP | 9 | 2026-07-08 | 2027-06-30 | 82 |
| SPY | 6 | 2026-07-08 | 2027-06-30 | 10731 |
| QQQ | 6 | 2026-07-08 | 2027-06-30 | 6617 |
| IWM | 6 | 2026-07-08 | 2027-06-30 | 1099 |
| TLT | 6 | 2026-07-08 | 2027-06-30 | 356 |
| SLV | 6 | 2026-07-08 | 2027-06-30 | 248 |
The exact SQL behind every number
SELECT root,
uniqExact(expiry) AS wednesday_expiry_dates,
toString(min(expiry)) AS nearest,
toString(max(expiry)) AS furthest,
round(sum(vol) / 1000, 0) AS contracts_k
FROM (
SELECT substring(ticker, 3, length(ticker) - 17) AS root,
toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) AS expiry,
toFloat64(volume) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-07-06 04:00:00'
AND window_start < '2026-07-10 04:00:00'
)
WHERE expiry IS NOT NULL AND toDayOfWeek(expiry) = 3 AND expiry >= '2026-07-08' AND root != 'SPCX'
GROUP BY root
ORDER BY wednesday_expiry_dates DESC, contracts_k DESC, root
LIMIT 8VIX carried 9 distinct Wednesday expirations, a chain running from 2026-07-22 out to 2027-03-17, one per cycle, and SPXW matched it with 9. The ETF rows are nearer-dated: daily and weekly listings plus quarter-end contracts (June 30, 2027 is a Wednesday). VIX's far-dated monthlies stacked on the ETFs' dailies give Wednesday more distinct expiration dates than any weekday except Friday, 22 in the six-week window, on a sliver of the volume.
What happens at expiration itself?
Most equity and ETF options stop trading at the 4:00 PM ET close on expiration day. After the close, the Options Clearing Corporation (OCC) runs exercise-by-exception: any option finishing in the money by $0.01 or more is exercised automatically unless the holder instructs otherwise. In-the-money calls become share purchases at the strike; in-the-money puts become sales; out-of-the-money contracts expire worthless. Share delivery settles on the normal cycle.
Expiration is the deadline, not the only exercise window. Equity and ETF options are American-style: exercisable on any business day the contract is alive. Early exercise concentrates in deep-in-the-money calls the day before an ex-dividend date, when capturing the dividend can outweigh remaining time value, for anyone short such calls, assignment risk peaks the night before the ex-date, not at expiration.
Cutoffs, pin risk, and the last hour
- Your broker's cutoff comes before the OCC's. The OCC accepts exercise instructions until roughly 5:30 PM ET on expiration day; brokers commonly cut customers off around 4:30 PM ET. Overriding auto-exercise happens on your broker's clock.
- The stock keeps moving after the option stops trading. Exercise-by-exception keys off the 4:00 PM official close, but an after-hours move through the strike lets long holders file fresh instructions while short holders can only wait.
- Pin risk. When the close lands within pennies of a heavily traded strike, short holders cannot know how many contracts will be assigned until notices arrive overnight. The routine mitigation: close or roll before the final bell. Traders guessing in advance which strike the close will gravitate toward usually reach for max pain, the strike where option holders collectively collect the least at expiry, and it is worth seeing how close settlement actually lands before betting on it.
Why expiration dates dominate the volume tape
Expiration is a forced decision point, and the volume shows the deciding. A position a holder wants to keep past expiry has to be rolled, closed in the expiring contract, reopened in a later-dated one, printing volume in both. Unwanted positions get closed outright; market makers hedge the shrinking time value of everything still open. How concentrated is that decision point? Bucket every SPY contract traded in June 2026 by how many days it had left to live at the moment it traded:
| dte_bucket | contracts_mm | pct_of_month |
|---|---|---|
| 0 days (expiry day) | 182.9 | 69.5 |
| 1 day left | 24.6 | 9.3 |
| 2-5 days left | 20.9 | 7.9 |
| 6+ days left | 34.9 | 13.2 |
The exact SQL behind every number
SELECT dte_bucket,
round(sum(vol) / 1e6, 1) AS contracts_mm,
round(100.0 * sum(vol) / (sum(sum(vol)) OVER ()), 1) AS pct_of_month
FROM (
SELECT multiIf(dte = 0, '0 days (expiry day)', dte = 1, '1 day left', dte <= 5, '2-5 days left', '6+ days left') AS dte_bucket,
dte, vol
FROM (
SELECT dateDiff('day', toDate(toTimeZone(window_start, 'America/New_York')),
toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6)))) AS dte,
toFloat64(volume) AS vol
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-06-01 04:00:00'
AND window_start < '2026-07-01 04:00:00'
AND ticker LIKE 'O:SPY2%'
)
WHERE dte >= 0
)
GROUP BY dte_bucket
ORDER BY min(dte)69.5% of the month's contract volume traded on the expiry day itself, another 9.3% with one day left, the expiration date doesn't just end the contract, it hosts most of the contract's life's volume. The calendar itself manufactures the activity, on a schedule known years in advance.
A historical footnote that still confuses people: for decades, listed equity options technically expired on the Saturday after the third Friday, a paper-processing buffer from a pre-electronic era. The industry moved the legal expiration onto the Friday itself in 2015; an older guide saying options expire on Saturday is quoting that fossil.
Options expiration FAQ
What time do options expire on expiration day?
Trading in most equity and ETF options ends at 4:00 PM ET on the expiration date; most index options trade until 4:15 PM ET. Exercise decisions process after the close, the OCC accepts instructions until roughly 5:30 PM ET, but brokers set earlier cutoffs.
Do all options expire on Fridays?
No, but Friday-dated contracts carried 48.3% of all volume in the six weeks measured here, across 5871 underlying roots. Daily expirations exist for 11 index-tracking roots, a few dozen active names carry midweek dates, VIX expires on Wednesday mornings, and the monthly cycle lands on the third Friday.
Can I exercise an option before expiration?
Yes for equity and ETF options, they are American-style, exercisable on any business day. In practice early exercise mostly involves deep-in-the-money calls right before an ex-dividend date. Index options like SPX are European-style: exercise happens only at expiration.
What happens if my option expires in the money?
It is exercised automatically at expiration if it finishes $0.01 or more in the money, calls buy the shares at the strike, puts sell them, unless you instruct your broker otherwise before its cutoff.
What happens to options when the market is closed on a Friday?
The expiration moves to the preceding trading day. Both 2026 cases sit in the data above: Juneteenth moved June's monthly to Thursday June 18, and the July 4 closure moved that week's weeklies to Thursday July 2.
Which stocks and ETFs have daily option expirations?
A handful of the most liquid index ETFs list a new expiration every trading day, with SPY and QQQ at the front of that group. Single stocks top out at weekly expirations. The full list, measured from the options tape, is in which stocks have daily options.
What happens to an option's Greeks as expiration approaches?
Time value drains fastest at the end, theta, the daily cost of holding, peaks in the final days, while gamma, the speed at which delta itself moves, spikes for at-the-money strikes. That combination is why expiration-week contracts feel so twitchy. The full set of sensitivities is measured on real tape in the option Greeks, explained; how the Greeks change over a contract's life follows them from listing to expiry, and theta and gamma each get their own deep dive.
Every panel is a stored, versioned query over the full options tape, expand the SQL to see each measurement, or check any ticker's expiration calendar on the Strasmore terminal.