Strasmore Research
Deep Dives Matt ConnorBy Matt Connor

Wash Sale Rule and Options: The 61-Day Window

The wash sale rule runs 61 days, not 30, and options sit inside it. Calls, rolls, deep in the money puts, the 1099-B gap, and the loss an IRA erases.

The wash sale rule disallows a capital loss when you sell a security at a loss and acquire a substantially identical one inside a 61 day window: the 30 days before the sale, the day of the sale, and the 30 days after. Options live inside that rule twice over, as the replacement that spoils a stock loss and as a loss position of their own. In a taxable account the disallowed loss is not destroyed. It moves into the cost basis of the replacement position and waits there.

This page walks the mechanics. It is not tax advice.

Why the wash sale window is 61 days, not 30

Add the pieces up: 30 days before, plus the sale day itself, plus 30 days after, is 61 calendar days. Calendar days, not trading days, and the count runs straight through weekends and market holidays. The panel below anchors on the last trading session of each month and counts how many sessions sit inside that month's 61 day window.

QueryHow many trading sessions fit inside a 61 day wash sale window
The exact SQL behind every number
WITH sessions AS
(
    SELECT DISTINCT date AS d
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND date >= '2023-11-01'
),
month_ends AS
(
    SELECT
        toStartOfMonth(d) AS m,
        max(d)            AS anchor
    FROM sessions
    WHERE d >= '2024-01-01'
      AND d <  '2026-07-01'
    GROUP BY m
)
SELECT
    toString(me.m)                                            AS month,
    toString(me.anchor)                                       AS last_session,
    countIf(s.d >= me.anchor - 30 AND s.d <= me.anchor + 30)   AS sessions_in_window,
    61                                                        AS calendar_days_in_window
FROM month_ends AS me
CROSS JOIN sessions AS s
GROUP BY me.m, me.anchor
ORDER BY me.m
Run this yourself

The flat line is the rule's 61 calendar days. The lower line is how many of those days the market was open at all. The first month on the panel holds 42 sessions inside its window, the most recent holds 42, and the panel covers 30 months of anchors.

The half of the window people forget is the front half. Most of us count forward from the sale and circle day 31 on the calendar. The 30 days before the sale count identically. Buy 100 more shares on the 10th while averaging down, sell your original lot at a loss on the 20th, and a purchase you already made sits inside the window. The loss on the lot you sold is disallowed even though you bought nothing afterward. Which lot leaves the account matters a great deal here, and that is a choice made at the trade: see how cost basis methods pick the lot.

The December problem

Loss harvesting clusters in the last weeks of the year, which is where the window arithmetic bites hardest. A sale on the final session of the year carries a repurchase window running deep into January, and a January buy reaches back to disallow a loss already reported on the prior year's return.

QueryEvery December session and how far its wash sale window reaches into the new year
The exact SQL behind every number
WITH sessions AS
(
    SELECT DISTINCT date AS d
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND date >= '2025-10-20'
      AND date <  '2026-02-10'
)
SELECT
    toString(sale.d)                                                    AS session_date,
    concat(formatDateTime(sale.d, '%b'), ' ', toString(toDayOfMonth(sale.d))) AS sold_on,
    countIf(s.d >= sale.d - 30 AND s.d <= sale.d + 30)                   AS sessions_in_window,
    greatest(dateDiff('day', toDate('2025-12-31'), sale.d + 30), 0)      AS window_days_in_new_year
FROM
(
    SELECT d
    FROM sessions
    WHERE d >= '2025-12-01'
      AND d <  '2026-01-01'
) AS sale
CROSS JOIN sessions AS s
GROUP BY sale.d
ORDER BY sale.d
Run this yourself

Each row is one December session, pinned to December 2025 so the arithmetic stays put. For a sale on Dec 1, 0 of the window's days fall in the new year. For a sale on Dec 31, 30 of them do, and that window spans 42 trading sessions end to end. Nothing on the December statement flags it. The disallowed loss attaches to the January shares, and it becomes deductible only when that new position is finally closed, which can be the following year or several years out.

Where options enter the wash sale rule

Section 1091 covers stock or securities and, in the same breath, a contract or option to acquire substantially identical stock. Congress widened it in 1988 to reach contracts and options to buy or sell. Four things follow at the trading screen:

  • Buying a call on stock you just sold at a loss is a wash sale on its own. The call is a contract to acquire the shares. You never have to exercise it, and no strike is far enough away to make the rule ignore it.
  • Selling a call at a loss and buying the underlying stock inside the window puts the same question in reverse. The answer turns on the substantially identical standard rather than on any published safe harbor.
  • Writing a put deep enough in the money that exercise looks close to certain can be treated much like buying the stock.
  • A loss on an option is a loss on a security, and the rule reaches option to option replacement as well.

How much stock a given contract carries is measurable. Delta is the option's price move per one dollar move in the underlying, and multiplied by 100 it approximates the shares of exposure one contract stands in for. The panel sorts AAPL contracts with 20 to 45 days to expiry through June 2026 into 5 bands by where the strike sat against the stock, then averages delta in each.

QueryAverage call and put delta by strike distance, AAPL, 20 to 45 days to expiry, June 2026
The exact SQL behind every number
SELECT
    bucket                                 AS strike_vs_spot,
    round(avgIf(delta, delta > 0), 3)      AS call_delta,
    round(avgIf(abs(delta), delta < 0), 3) AS put_delta_abs,
    count()                                AS contract_count
FROM
(
    SELECT
        delta,
        toFloat64(strike_price) / toFloat64(underlying_close) AS mny,
        multiIf(
            mny < 0.85, 'strike 15%+ below spot',
            mny < 0.95, 'strike 5-15% below spot',
            mny < 1.05, 'strike within 5% of spot',
            mny < 1.15, 'strike 5-15% above spot',
                        'strike 15%+ above spot'
        ) AS bucket
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'AAPL'
      AND date >= '2026-06-01'
      AND date <  '2026-07-01'
      AND iv_converged = 1
      AND volume > 0
      AND days_to_expiry BETWEEN 20 AND 45
      AND underlying_close > 0
)
GROUP BY bucket
HAVING countIf(delta > 0) > 0
   AND countIf(delta < 0) > 0
ORDER BY min(mny)
Run this yourself

Read it left to right. Calls struck well below the stock averaged a delta of 0.937, close enough to one that the contract tracks the shares nearly dollar for dollar. Calls struck well above averaged 0.017. Puts run the other way: the puts struck furthest above the stock averaged 0.888 in absolute delta, and those struck furthest below averaged 0.015. That right hand edge is the deep in the money put, a contract whose writer is carrying something close to a long position in the shares. For the vocabulary of strikes and expirations, start with how to read an option chain.

The IRS has never put a number on "deep enough". The working standard practitioners apply asks whether, at the moment the put is written, there is any substantial likelihood it expires unexercised. A put sitting at the far right of that panel and one sitting in the middle are not the same claim.

Rolling a losing long call

The most common option specific question has the least settled answer. You own a call, it has lost value, you sell it and buy another call on the same underlying at a different strike or a later expiration. Is the new contract substantially identical to the old one?

Treasury has not issued regulations defining when one option is substantially identical to another. That is the honest state of it. What exists in practice is a reporting convention: brokers match option positions by contract symbol, so a roll to a different strike or a different expiration normally passes through the 1099-B unflagged. A convention is not a ruling. The statutory standard asks whether the replacement leaves you exposed to the same up and down moves, and a call one strike away with the same expiration answers that differently from a call six months out and far out of the money.

Two readings coexist. The cautious one treats a near strike, near expiration replacement as exposed. The permissive one treats any change in contract terms as a new security. Neither has been tested into a bright line.

What 61 days looks like on the tape

Sixty one calendar days stays an abstraction until you see it as sessions. The panel below is exactly one wash sale window, December 1 through January 30, the full window for a loss taken on the last session of December.

QueryOne full 61 day wash sale window on the tape: AAPL, Dec 1 2025 through Jan 30 2026
The exact SQL behind every number
SELECT
    toString(t.date)                              AS session_date,
    round(t.close, 2)                             AS close,
    round(100 * (t.close / a.first_close - 1), 2) AS change_pct
FROM
(
    SELECT
        date,
        toFloat64(any(close)) AS close
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'AAPL'
      AND date >= '2025-12-01'
      AND date <= '2026-01-30'
    GROUP BY date
) AS t
CROSS JOIN
(
    SELECT toFloat64(argMin(close, date)) AS first_close
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'AAPL'
      AND date >= '2025-12-01'
      AND date <= '2026-01-30'
) AS a
ORDER BY t.date
Run this yourself

Those 61 calendar days held 42 AAPL sessions. The stock entered the window at a close of $283.1 and left it at $259.48, -8.34% from where it started. Someone who sold on the last December session and wanted the loss had to stay clear of substantially identical exposure through every one of those sessions. The rule converts a tax decision into a market exposure decision for the length of the window.

What your 1099-B knows, and what it cannot

Brokers compute wash sales one account at a time and one security identifier at a time, the CUSIP for a stock and the contract symbol for an option. That is what the broker reporting rules ask of them, and it is narrower than the law the return has to follow. Section 1091 applies per taxpayer, across every account, which includes a spouse's accounts and entities you control.

The gap produces most of the surprise readers report:

  • Sell at a loss at broker A, buy back inside the window at broker B. Neither 1099-B shows a wash sale. The taxpayer still has one.
  • Sell stock at a loss, buy a call on it in the same account. Whether the two get matched depends on the broker's software, not on the statute.
  • Sell at a loss in your account, buy back in your spouse's. No broker sees both sides.
  • Roll a losing call to a new strike. The identifier changed, so the form comes back clean. The substantially identical question is still open.

Treat the 1099-B as an input, not a determination. Funds raise the same problem with a different face, since two funds tracking one index are separate securities on paper: selling mutual funds at a loss walks that case.

The one that never comes back: repurchasing in an IRA

Every ordinary wash sale is a deferral. The disallowed loss is added to the basis of the replacement position, the old holding period tacks onto the new one, and the deduction arrives later when the position is closed for good.

Buying the replacement inside an IRA breaks that chain. Revenue Ruling 2008-5 holds that a loss on a taxable account sale is disallowed when substantially identical stock or securities are bought in your IRA or Roth IRA inside the window, and that the basis adjustment has nowhere to land: section 1091(d) provides no way to raise the basis of the IRA. Nothing carries forward. The deduction is gone for good.

That asymmetry makes the IRA the one case worth mapping before the trade rather than at tax time. All 61 days apply, and a Roth is treated the same as a traditional IRA.

Holding periods and the loss that moves

When a loss is deferred rather than erased, two things travel with it. The disallowed amount is added to the basis of the replacement shares. The holding period of the position you sold is added to the holding period of the replacement, which can make a days old replacement long term on paper. Holding period arithmetic governs dividend treatment too: see the qualified dividend holding period.

One family of contracts sits outside this framework. Broad based index options are marked to market at year end under their own regime and split 60/40 between long term and short term, so a year end loss on them is settled by that mark rather than by a repurchase window: why index options are taxed 60/40.

FAQ

Is the wash sale window 30 days or 61 days?

Sixty one calendar days. The rule covers the 30 days before the sale, the day of the sale itself, and the 30 days after. Counting only forward from the sale misses half of it, and a purchase made before the loss sale counts as replacement exactly as a later one does.

Does buying a call option create a wash sale?

Yes, when the call is bought inside the window on stock sold at a loss. Section 1091 reaches a contract or option to acquire substantially identical stock, and the wash sale stands even if the call is never exercised.

Does the wash sale rule apply across two different brokerage accounts?

Yes. Brokers compute wash sales per account and per security identifier, while the rule applies to the taxpayer across all accounts, including a spouse's. A clean 1099-B from each broker does not mean there was no wash sale.

Is a call at a different strike substantially identical to the one I sold?

No regulation answers that. Treasury has not defined when one option is substantially identical to another, and broker reporting matches contracts by symbol rather than by economics, so a roll usually shows up unflagged. The exposure standard in the statute is broader than the reporting convention.

What happens if I buy the stock back inside my IRA?

The loss is disallowed and permanently lost. Revenue Ruling 2008-5 holds that section 1091(d) offers no way to add the disallowed loss to the basis of the IRA, so unlike an ordinary wash sale, nothing is recovered later.

Data notes

Session counts come from the daily record of SPY, which stands in for the days US equity markets held a regular session. The first panel anchors on the last session of each month and counts every session inside the 61 calendar days around it. The December panel is pinned to December 2025 and the tape panel to December 1 2025 through January 30 2026, so neither refreshes. The delta panel reads only contracts with converged implied volatility and non zero volume, 20 to 45 days to expiry, averaged across June 2026, with strikes bucketed against that day's underlying close. Front edge data carries an ingest lag of a day or two, which touches the rolling monthly panel only. None of this is tax advice, and a substantially identical determination is a facts question a tax professional needs to see in full.


Every panel above ships with the SQL that produced it, so you can open one and recount the sessions yourself. To map a 61 day window across your own dates, ask for it in plain English on the Strasmore terminal.