Do Most Options Expire Worthless?
Do most options expire worthless? The 90 percent claim mixes three different outcomes into one number. Here is what expiring contracts actually did.
Do most options expire worthless? No. Most listed option contracts never reach their expiration date in the account that opened them: the position gets closed on the tape days or weeks earlier. The contracts that do reach the last bell split between finishing in the money and finishing out of the money. The 90% figure that circulates in retail options content merges several separate outcomes into one number, and no published exchange statistic states it.
Where the 90% claim comes from
The Options Clearing Corporation, or OCC, is the clearinghouse standing between every buyer and every seller of a listed US equity option. Its public statistics cover contract volume and open interest. No OCC table reports that 90% of options expired worthless in any year, and no exchange release does either.
The claim also travels without a denominator. Worthless expirations as a share of what? Of the contracts still open at the final bell, or of every contract opened during the year? Those two answers sit far apart, and the popular version names neither. When a figure cannot be traced to a published clearinghouse or exchange table, the honest move is to say the data does not exist at that granularity, then measure what does.
The three things that can happen to an option contract
Every contract ends one of three ways, and only the last is what "expired worthless" describes.
- It is closed before expiration. The holder sells the contract they bought, or buys back the one they sold, at whatever price the market offers that day. This ending is invisible in any statistic about expirations.
- It is exercised. An in the money contract converts into stock at the strike price. Anything finishing in the money by a penny or more is exercised automatically under OCC's exercise by exception rule, unless the holder files contrary instructions. Our guide to what happens if an option expires ITM covers that mechanic.
- It is held to expiration and left unexercised. The contract finished out of the money, nobody exercises it, and it ceases to exist. This is the only bucket the phrase covers.
Collapsing those into one percentage is where the myth lives.
So what share of options really expire worthless?
Here is a count anyone can run: take every listed contract that was still trading in its final days before expiring, then compare the underlying's close on that last session against the strike. The panel below does that for six household names over the twelve months to July 2026.
The exact SQL behind every number
WITH final_print AS
(
SELECT
underlying_symbol AS symbol,
ticker,
argMax(option_type, date) AS contract_type,
toFloat64(argMax(strike_price, date)) AS strike,
toFloat64(argMax(underlying_close, date)) AS spot_last,
min(days_to_expiry) AS final_dte
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'AMZN', 'KO')
AND (lower(toString(option_type)) LIKE 'c%' OR lower(toString(option_type)) LIKE 'p%')
AND volume > 0
AND expiration_date >= '2025-08-01'
AND expiration_date < '2026-08-01'
AND date >= '2025-06-01'
AND date < '2026-08-01'
GROUP BY symbol, ticker
HAVING final_dte <= 3
)
SELECT
symbol,
round(100 * countIf(
(lower(toString(contract_type)) LIKE 'c%' AND spot_last <= strike)
OR (lower(toString(contract_type)) LIKE 'p%' AND spot_last >= strike)
) / count(), 1) AS pct_expired_otm,
round(100 * countIf(
(lower(toString(contract_type)) LIKE 'c%' AND spot_last > strike)
OR (lower(toString(contract_type)) LIKE 'p%' AND spot_last < strike)
) / count(), 1) AS pct_expired_itm,
count() AS expiring_contracts
FROM final_print
GROUP BY symbol
ORDER BY pct_expired_otm DESCMSFT sat highest, with 57.6% of its expiring contracts out of the money at that final print. KO sat lowest at 47.3%. Read that carefully before repeating it anywhere. It counts contracts, not positions and not dollars. Every expiration lists a ladder of strikes running far above and far below the share price, and most of that ladder is out of the money by construction. A high number here describes how strikes get listed. It says nothing about how much money was at risk, or how many of those contracts were still held by whoever bought them.
Worthless for the buyer, kept by the seller
Each of those expirations had two sides. The buyer paid a premium that is now gone. The seller collected that same premium and keeps all of it. One event, two ledgers. The statistic gets quoted to buyers as a warning and to sellers as an edge, and neither version mentions the premium collected or the risk carried to collect it. Picture a seller who takes in $40 a contract and gives back $900 on the one that runs against them. Their worthless rate is excellent. Their quarter is not.
Early closes blur it further. Buy a call at $2.00, sell it at $6.00 three weeks later, and your trade is shut at a gain. That contract keeps trading in someone else's account and may well finish out of the money. Counted by contract, it is one more worthless expiration. Counted by trade, it was a winner for you. Covered call writers are positioned for the contract to finish out of the money, which is where this statistic gets repeated most often.
Most option volume never sees an expiration
Zero days to expiry, or 0DTE, means a contract that trades and expires in the same session. SPY, the largest US equity option market, carries an expiration every trading day. That volume dominates the modern tape, and it distorts any count that mixes trades with expirations.
The exact SQL behind every number
WITH
(
SELECT sum(volume)
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND volume > 0
AND date >= '2026-04-01'
AND date < '2026-07-01'
) AS quarter_volume
SELECT
multiIf(days_to_expiry = 0, '0 (expires that day)',
days_to_expiry <= 5, '1 to 5 days',
days_to_expiry <= 21, '6 to 21 days',
days_to_expiry <= 60, '22 to 60 days',
'61 days or more') AS days_to_expiry_bucket,
round(100 * sum(volume) / quarter_volume, 1) AS share_of_volume_pct,
countDistinct(ticker) AS contracts_with_volume
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND volume > 0
AND date >= '2026-04-01'
AND date < '2026-07-01'
GROUP BY days_to_expiry_bucket
ORDER BY min(days_to_expiry)Over the second quarter of 2026, the shortest bucket on the board, 1 to 5 days, took 53.8% of SPY option volume, spread across 15612 distinct contracts. Contracts with 61 days or more left took 8.9% of it.
A 0DTE contract bought at 10:00 and sold at 14:30 never expires at all. Its volume sits in the same bucket as one carried into the close and left to lapse. Any headline percentage that treats a day of option volume as a set of positions heading toward expiration counts the same contract over and over. The session mechanics are in when 0DTE options trade.
Does strike distance change the odds?
"Expires worthless" is not a fixed property of options. It moves with where the strike sits relative to the price and how much time is left. The next panel takes every SPY contract that traded with about a month to run, measures how far out of the money it was that day, then checks where the underlying stood when that same contract last changed hands near expiration.
The exact SQL behind every number
WITH entry AS
(
SELECT
ticker,
argMin(option_type, date) AS contract_type,
toFloat64(argMin(strike_price, date)) AS strike,
toFloat64(argMin(underlying_close, date)) AS spot_30d_out
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND (lower(toString(option_type)) LIKE 'c%' OR lower(toString(option_type)) LIKE 'p%')
AND days_to_expiry BETWEEN 28 AND 32
AND volume > 0
AND date >= '2025-07-01'
AND date < '2026-07-01'
GROUP BY ticker
),
last_print AS
(
SELECT
ticker,
toFloat64(argMax(underlying_close, date)) AS spot_at_last_print,
min(days_to_expiry) AS final_dte
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND volume > 0
AND date >= '2025-07-01'
AND date < '2026-08-01'
GROUP BY ticker
HAVING final_dte <= 3
)
SELECT
multiIf(otm_pct < 2, 'under 2% out',
otm_pct < 5, '2% to 5% out',
otm_pct < 10, '5% to 10% out',
otm_pct < 20, '10% to 20% out',
'20% or more out') AS distance_at_30_days,
round(100 * countIf(finished_itm) / count(), 1) AS pct_finished_itm,
count() AS contracts
FROM
(
SELECT
if(lower(toString(e.contract_type)) LIKE 'c%',
100 * (e.strike / e.spot_30d_out - 1),
100 * (1 - e.strike / e.spot_30d_out)) AS otm_pct,
if(lower(toString(e.contract_type)) LIKE 'c%',
s.spot_at_last_print > e.strike,
s.spot_at_last_print < e.strike) AS finished_itm
FROM entry AS e
INNER JOIN last_print AS s ON s.ticker = e.ticker
)
WHERE otm_pct > 0
GROUP BY distance_at_30_days
ORDER BY min(otm_pct)The nearest bucket, under 2% out, was in the money at that last print 36.8% of the time across 1629 contracts. The furthest, 20% or more out, was in the money 0% of the time. One blanket percentage cannot describe both ends of that curve. For the gap between finishing in the money and touching the strike along the way, see probability of touch vs probability of ITM.
What a single expiration cycle looks like
Pin one expiration and watch it. SPY contracts expiring on Friday, May 15, 2026 were listed and tradeable long in advance. The panel tracks the final month of that cycle, counting every contract carrying that expiration date that traded each session.
The exact SQL behind every number
SELECT
toString(date) AS date,
round(sum(volume) / 1000, 1) AS volume_thousands,
countDistinct(ticker) AS contracts_with_volume
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND expiration_date = '2026-05-15'
AND volume > 0
AND days_to_expiry <= 30
AND date >= '2026-04-01'
AND date < '2026-05-16'
GROUP BY date
ORDER BY dateOn the first session in view, 448.2 thousand contracts on that expiration changed hands across 281 strikes. On the last session in view, 1685.7 thousand traded. The tape stays busy right to the end of the cycle, which is what a cycle looks like while holders close and extend positions rather than sit still. Rolling an option position is one common version of that.
Measure your own close versus expire ratio
The number that describes your account is not on any statistics page. It is your close versus expire ratio: over a quarter, how many option positions you closed with an offsetting trade, and how many you carried to the expiration date. Both counts sit in your broker's trade history.
If nearly everything gets closed early, an aggregate statistic about expirations describes a market you barely take part in. If nearly everything runs to the final session, assignment mechanics and the pin around heavily traded strikes apply to you directly, and max pain plus early assignment are worth reading next. For the wider picture, see how risky is options trading.
How these panels were measured
Moneyness is measured against the underlying's closing price on the last session a contract actually traded, and only contracts still trading within three days of expiration are counted. The settlement print itself is not in this data; the last traded session stands in for it, and a contract that went quiet earlier sits outside the sample. AM settled and cash settled index products settle on a different print; the panels here cover PM settled single name and ETF contracts.
Each panel counts contracts that traded in the session in question. A listed strike that never traded is out of the sample. Open interest is not part of this data, so no panel counts positions held. They count contracts and volume, which is exactly the distinction the 90% claim ignores.
FAQ
Do 90% of options expire worthless?
No published clearinghouse or exchange table states that. The figure travels without a denominator, and it merges contracts closed before expiration with contracts exercised and contracts left to lapse. Those are separate counts answering separate questions.
What percentage of options are exercised?
A precise public figure for a given year is not something a reader can pull and verify at that granularity, so treat any quoted number with suspicion. The mechanic is verifiable: a contract finishing in the money by a penny or more is exercised automatically unless the holder instructs otherwise, so the exercised share moves with the share that finishes in the money.
Is an option that expires worthless always a loss?
It is a loss for whoever holds it into expiration and a gain for whoever is short it. It says nothing about a trader who bought that contract earlier and sold it at a profit weeks before. A contract's final outcome and any one person's result are different things.
Do 0DTE options expire worthless?
Much of 0DTE volume closes intraday and never reaches the final bell. A contract bought and sold inside the session has no expiration outcome at all, which is why counts that mix daily volume with expirations overstate how many contracts are truly held to the close.
How do I find my own rate?
Pull a quarter of trade history from your broker and count two things: positions closed with an offsetting trade, and positions that reached their expiration date. That ratio is the version of this statistic that applies to your account.
Every panel here carries the exact SQL underneath it, expand one to see what was counted. To run the same count on the names you follow, ask for it in plain English on the Strasmore terminal.