Guest mode: your portfolio is kept in this browser until you connect.

Sys onlineGuest--:-- local

Tax-loss harvesting deadline 2026: sell by December 31, buy back on February 1, and what the 31 days have cost

A US sale at a loss counts for 2026 if it trades by Thursday, December 31, 2026, even though it settles in January. A buy-back is outside the wash-sale window from February 1, 2027. We measured that 31-day gap at 33 year-ends: SPY was higher on the buy-back day 21 times, by a median 1.98%.

Julien Esnault
Julien Esnault

· 8 min read

Bar chart of SPY over the 31 days after each year-end sale from 1993 to 2025, sold on the last trading day and bought back on the first day outside the wash-sale window: higher in 21 of 33 years, from −8.49% after 2008 to +8.01% after 2018

Short answer: a US sale at a loss counts for 2026 if it trades by the close on Thursday, December 31, 2026, even though it settles in January. Buying the same fund back is safe from Monday, February 1, 2027. Over 33 year-ends since 1993, SPY was higher on that buy-back day 21 times, by a median 1.98%.

The wash-sale window is the 61 days around a sale, 30 before and 30 after, when buying the same security back defers the loss. For a December 31 sale it runs into 2027, so the question that matters is what the 31 days out of the market cost. We measured it on every year-end since SPY began trading. One date comes first: to own the fund through the window, a second lot has to be bought by Monday, November 30, 2026.

The 2026 dates, from the last trade to the buy-back

The dates come from the NYSE holiday calendar our tax-loss harvesting tool runs on, and from the 30-day rule of IRC §1091.

DateWhat it is
Monday, November 30, 2026Last day to buy a second lot (“double up”) and still sell the first on December 31 outside the window
Tuesday, December 1, 2026The window around a December 31 sale opens: a purchase from this day counts
Thursday, December 31, 2026Last trading day of 2026: a sale executed by the close counts for 2026
Monday, January 4, 2027That sale settles (T+1 since May 28, 2024), and it still counts for 2026
Saturday, January 30, 2027The window closes, 30 days after the sale
Monday, February 1, 2027First trading day a buy-back no longer counts (January 31 is a Sunday)
Timeline of the 2026 tax-loss harvesting dates for a sale on Thursday, December 31, 2026: last day to double up on Monday, November 30, the wash-sale window from December 1 to January 30, settlement on Monday, January 4, and the first clean buy-back day on Monday, February 1, 2027
Sources: IRS Publication 550 (2025), IRC §1091, NYSE holiday calendar

One year-end checklist, Monarch’s, moves the harvest up to about December 24 because trades “need time to settle.” Settlement is the French rule, not the US one. IRS Publication 550 is plain about it: “Do not confuse the trade date with the settlement date.” Its own example is a sale on December 31, 2025, paid for in January 2026, reported on the 2025 return. Your broker’s own cut-off can come earlier for some orders, such as a mutual fund bought at the day’s closing price or a transfer between accounts. Its year-end notice comes first.

The wash-sale window runs into 2027

Publication 550: “A wash sale occurs when you sell or trade stock or securities at a loss and within 30 days before or after the sale you” buy substantially identical stock or securities. For a December 31 sale, that is 61 days, December 1 to January 30, and three details catch people out:

  • Every account counts. Your IRA and Roth IRA (Revenue Ruling 2008-5), your spouse’s accounts, another broker. A purchase in an IRA does not defer the loss: it is lost for good.
  • Your broker only sees its own account. Form 1099-B flags identical securities in the same account, so a buy at another broker or in a 401(k) is yours to find. Our wash sale checker takes the sale and the purchases in every account and gives the first clean day.
  • Reinvested dividends are purchases. A fund that pays in December and reinvests it buys shares inside the window; the loss on that many shares is deferred.

Whether two different funds are “substantially identical” is not settled by the IRS: Publication 550 says to consider “all the facts and circumstances in your particular case.” We do not decide it either.

What 31 days out of the market cost: 33 year-ends of SPY

The rule we tested: sell SPY at the close of the year’s last trading day, buy it back at the close of the first trading day at least 31 calendar days later, and measure SPY over the gap, dividends included. Sales on the last trading day of 1993 through 2025: 33 gaps, the last one December 31, 2025 to February 2, 2026.

SaleGapsSPY higher on the buy-back dayMedianMeanWorstBest
Last trading day of the year, 1993–20253321 (63.6%)+1.98%+0.88%−8.49%+8.01%
Last trading day of October, 1993–20253326 (78.8%)+2.84%+2.35%−15.20%+10.88%
Any trading day since 19938,4835,586 (65.8%)+1.49%+0.99%−33.72%+26.89%
S&P 500 index, year-end, 1950–2025 (no dividends)7646 (60.5%)+1.81%+1.11%−8.61%+14.16%
Bar chart of SPY’s median move over the 31-day gap by sale day, 1993 to 2025: +2.84% after the last trading day of October, higher in 26 of 33 years; +1.98% after the last trading day of the year, 21 of 33; +1.49% after any trading day, 5,586 of 8,483
Source: Yahoo Finance, SPY adjusted closes, dividends included

Turn the usual worry over: January is not a dangerous month to be out of the market, and it is not a special one either. The year-end gap rose about as often as any 31-day gap since 1993, and a little less on average. Four of the 33 gaps fell more than 5% and four rose more than 5%. The worst was the gap after 2008 (December 31, 2008 to February 2, 2009, −8.49%): waiting meant buying back cheaper. The best was the gap after 2018 (+8.01%), when the market recovered the December sell-off.

The “harvest in October” advice has had the costlier gap. Sold on the last trading day of October and bought back 31 days later, SPY rose in 26 of 33 years, by a median 2.84%, and 11 of those gaps rose more than 5%. Being out in November has cost more than being out in January.

The last ten year-ends

SoldBought backSPY over the gap
Dec. 30, 2016Jan. 30, 2017+1.80%
Dec. 29, 2017Jan. 29, 2018+6.68%
Dec. 31, 2018Jan. 31, 2019+8.01%
Dec. 31, 2019Jan. 31, 2020−0.04%
Dec. 31, 2020Feb. 1, 2021+0.63%
Dec. 31, 2021Jan. 31, 2022−5.27%
Dec. 30, 2022Jan. 30, 2023+4.75%
Dec. 29, 2023Jan. 29, 2024+3.36%
Dec. 31, 2024Jan. 31, 2025+2.69%
Dec. 31, 2025Feb. 2, 2026+1.98%

Eight of the last ten gaps rose. The 2025 one ended on Monday, February 2, 2026, because January 31, 2026 was a Saturday; the same calendar puts the 2026 buy-back on Monday, February 1, 2027.

Three ways through the 31 days

Take a plainly hypothetical case: a $10,000 position that cost $12,000. Sold on December 31, it books a $2,000 loss; set against short-term gains taxed at 24%, that is $480 less tax for 2026. What happens next:

  1. Wait in cash. The median gap would have cost $198 of the rise on $10,000, the 2018 one $801, and after 2008 waiting would have paid. You buy back on February 1, 2027 at whatever the price is.
  2. Double up first. Buy a second $10,000 lot by Monday, November 30, 2026, then sell the original lot on December 31. You stay invested, but you hold twice the position for a month and need the cash.
  3. Swap to a different fund. Sell the loser and buy a fund that tracks something else, then decide in February whether to switch back. How closely 32 such pairs moved is in our swap-pairs study. Before picking one, check what the two hold in common with the ETF overlap tool.

How much of the loss counts for 2026

Losses first offset the year’s capital gains, with no cap. What is left can come off ordinary income up to $3,000 ($1,500 married filing separately), per Publication 550, and the rest carries over to 2027 and later years with its short-term or long-term character.

What to do with it

List your losing positions now, with each account. To keep a fund through the window, the second lot goes in by Monday, November 30, 2026; after that, every purchase from December 1 to January 30, in any account, counts against a December 31 sale, reinvested dividends included. Import your brokers’ histories and the tax-loss harvesting panel shows the loss each holding would realize by December 31, what it offsets and the wash sales across every account; the demo shows it on a sample book, and the wash sale checker checks one sale by hand, without an account. SPY’s own page is at /analyse/spy, and every session’s close at /markets/stock-market-close. For French residents the settlement date decides instead, and the last day is earlier: the French year-end losses study.

How we measured

Prices: Yahoo Finance daily closes, SPY adjusted for dividends and splits from its first close on January 29, 1993 to November 12, 2026, and the S&P 500 index (^GSPC, price only) from 1950. Each gap starts at the close of the sale day and ends at the close of the first trading day on or after the 31st calendar day, the first day outside the 61-day window; a buy-back in practice happens at the open or later that day, so the figures are close to, not equal to, what a trade would get. The 2026 dates are computed from the NYSE holiday calendar the site's tax tools use. Taxes, bid-ask spreads and the price of a swap fund are left out. A different window (more than 31 days) or another fund would give other figures. This is a calculation, not tax or investment advice.

Reproduce it

The headline figures come from public data with the script below, run on November 13, 2026.

Show the code52 lines of Python, and what it printed
# Reproduces https://portfolio-terminal.com/blog/tax-loss-harvesting-deadline-2026
# pip install yfinance pandas
"""
Sell SPY at the close of a year's last trading day, buy it back at the close of
the first trading day at least 31 calendar days later (the first day outside
the wash-sale window), and measure SPY over that gap. Year-end sales of 1993
to 2025, the same rule after the last trading day of October, and every
trading day as a sale day. Adjusted closes (dividends folded in), Yahoo Finance.
"""
import pandas as pd
import yfinance as yf

px = yf.download("SPY", start="1993-01-29", end="2026-11-13",
                 auto_adjust=True, progress=False)["Close"].squeeze()
px.index = pd.to_datetime(px.index).tz_localize(None)
days = px.index


def gap(sale_day):
    target = sale_day + pd.Timedelta(days=31)
    later = days[days >= target]
    if len(later) == 0:
        return None
    back = later[0]
    return back, px[back] / px[sale_day] - 1


def windows(month):
    out = []
    for year in range(1993, 2026):
        in_month = days[(days.year == year) & (days.month == month)]
        g = gap(in_month[-1])
        if g:
            out.append((in_month[-1].date(), g[0].date(), g[1]))
    return out


def show(name, rets):
    s = pd.Series(rets)
    print(f"{name}: n={len(s)} up={(s > 0).sum()} ({(s > 0).mean():.2%}) "
          f"median={s.median():.2%} mean={s.mean():.2%} "
          f"<-5%={(s < -0.05).sum()} >+5%={(s > 0.05).sum()} "
          f"worst={s.min():.2%} best={s.max():.2%}")


dec = windows(12)
show("SPY year-end", [w[2] for w in dec])
show("SPY October", [w[2] for w in windows(10)])
show("SPY any day", [g[1] for g in map(gap, days) if g])
print(f"median on $10,000: {10000 * pd.Series([w[2] for w in dec]).median():.0f}")
last = dec[-1]
print(f"last window: {last[0]} -> {last[1]} {last[2]:.2%}")
SPY year-end: n=33 up=21 (63.64%) median=1.98% mean=0.88% <-5%=4 >+5%=4 worst=-8.49% best=8.01%
SPY October: n=33 up=26 (78.79%) median=2.84% mean=2.35% <-5%=2 >+5%=11 worst=-15.20% best=10.88%
SPY any day: n=8483 up=5586 (65.85%) median=1.49% mean=0.99% <-5%=745 >+5%=1182 worst=-33.72% best=26.89%
median on $10,000: 198
last window: 2025-12-31 -> 2026-02-02 1.98%

Sources: IRS Publication 550 (2025) · IRC §1091 · Revenue Ruling 2008-5 · NYSE holidays and trading hours · SEC, T+1 settlement · Yahoo Finance, SPY history

#research#taxes

Keep reading

10 min readTax-loss harvesting ETF pairs: how closely 32 swaps moved, and why a high correlation is not the same returnWe measured 32 ETF pairs over 261 weeks to Oct. 16, 2026. Same-index pairs never moved more than 1 point apart in a week. Different-index pairs correlated 0.930 to 0.996, yet SMH and SOXX, at 0.987, ended the year 13.82 points apart. Whether a pair is “substantially identical” is a legal question.9 min readYear-end losses for French residents at a foreign broker: the last day to sell for 2026 is December 29, not the 31stFor a French tax resident, a sale counts for 2026 only if it settles by December 31: the last trade day is Tuesday, December 29 on Euronext and Xetra, and Wednesday, December 30 on the NYSE and Nasdaq. On our demo book, a sale made in time erases €740.16 of flat tax.8 min read30 popular ETFs, 435 pairs: which ones are the same fund?VOO and VTI are 88.6% the same money, VOO and QQQ 53.8%, SCHD and VOO 7.9%. We measured all 435 pairs of 30 popular ETFs on the issuers’ full holdings files, and why top-10 calculators get most of them wrong.

cite: Julien Esnault, “Tax-loss harvesting deadline 2026: sell by December 31, buy back on February 1, and what the 31 days have cost”, Portfolio Terminal, 2026-11-13. plain-text version for AI tools

Try it on your own holdings

portfolio terminal

Measure your own portfolio’s risk, not a textbook one.

Import your positions from any broker and see your volatility, beta, drawdown and correlations every morning.

The week on Wall Street in 60s, once a week. What’s in it

One short email a week, after Friday’s close. Unsubscribe anytime.