How fast a direct-indexing account's harvestable losses decay, and when the model calls for a reset of basis.
Read the paper on SSRN ↗ CiteKey results
- A fresh lot is harvested with probability p = exp(-2mh/sigma^2), which fixes a lifetime budget of p/(1-p) harvests per name.
- At the base calibration the year-one harvest yield is 20.3% of NAV analytically against 19.5% simulated, and year ten is 2.8% against 2.7%.
- Nearly a quarter of the twenty-year harvest is realized in year one.
- With base outside gains the optimal reset arrives at 6.7 yr, when yield has decayed to 3.59%, for an uplift of 639 bps of NAV.
- Capacity of 8% of NAV a year brings the reset to 2.9 yr, while capacity of 2% means never within 30 years.
Summary
Anyone who has watched a direct-indexing separate account for a few years has seen the pattern. Year one produces a large pile of realized losses, year two less, and by year five the harvest has thinned; by year ten the account is mostly a book of appreciated positions with little left to harvest. Practitioners call this the account aging. We have given it a formula. Our working paper then asks the question the qualitative story leaves open: when, if ever, does a refresh of the account's basis pay, and by which route?
Why the harvest decays
Positive drift acting on a population of tax lots is the mechanism. A lot is harvestable only while it trades below the price at which it was bought, and under a positive expected return the odds that a given lot does so fall as the lot ages. The winners that never dip run away from their basis and leave the harvestable pool for good. What remains is a small churning set of names near their cost, alongside a growing block of appreciated holdings that the account will carry to its exit. Figure 2 shows the two series moving in opposite directions as the account ages: the share trading below basis falls while the embedded gain rises.
We write each name's log-moneyness, the log of price over current basis, as a Brownian motion with drift, and read the harvesting policy as a lower barrier: a lot is harvested when its moneyness falls to the threshold, and its basis resets at that moment. That makes the probability that a fresh lot is ever harvested a first-passage probability, p = exp(-2mh/sigma^2). Everything follows from that one number. Per name, the lifetime number of harvests is p/(1-p), a finite budget the account spends down. A density recursion for the cross-section of moneyness integrates the full curve. Alongside it, a fixed-seed Monte Carlo of the same account traces the same curve name by name.
At the base calibration the year-one harvest yield is 20.3% of NAV from the formula against 19.5% from the simulation, and by year ten it is 2.8% against 2.7%. Nearly a quarter of the twenty-year harvest is realized in year one. Figure 3 overlays the analytic curve on the 40-trial Monte Carlo; Table 1 gives the full term structure. The level has an outside check. Our twenty-year cumulative harvest at the base calibration lands within a few points of the long-only average that Goldberg, Cai and Schneider report over 1995 to 2023.
The reset as impulse control
Refreshing basis costs something now and restores the steep early part of the harvest curve. There are three routes. Selling appreciated lots and repurchasing them is one, and it costs more with age because the embedded gain that must be realized grows with age; donating the lowest-basis lots to charity and rebuying the exposure is another; retiring the aged account into a diversified vehicle under section 351 and redeploying is the third.
A cap determines most of the answer: the value of a harvested loss is limited by how much outside gain the investor can shelter in a given year. The model resets once the decayed yield of the account falls below a threshold, which depends on the cost of the reset, on the discount rate, and on what a harvested loss is worth to the investor. Figure 4 plots lifetime value, as a present value in percent of NAV, against the reset period for the two interior cases. Each curve is humped. Its optimum is marked.
Table 2 puts figures on this. With a loss value of 40.8% and capacity of 5% of NAV a year, the optimal reset arrives at 6.7 yr, when the yield has decayed to 3.59%, and the uplift over never resetting is 639 bps of NAV. Raise capacity to 8% and the reset comes at 2.9 yr with an uplift of 1527 bps. At 2% the answer is never within 30 years. Where the account will end in a step-up in basis, the model usually prefers leaving it alone, even at a low yield.
Moving the reset date
Figure 5 draws the comparative statics.
Higher single-name volatility delays the reset, because more volatility means a higher hit probability and a larger lifetime budget. Table 3 shows that at 18% volatility the hit probability is 0.847 and the reset comes at 1.9 yr, while at 26% the hit probability rises to 0.948 and the reset moves out to 4.7 yr, with the year-one yield rising from 9.4% to 16.5%.
Contribution flow pushes in the same direction. New capital brings fresh lots. Those lots raise the floor the yield decays toward. Table 4 shows that with no contributions the yield floor in years 26 to 30 is 1.28% and the reset is at 6.7 yr, whereas with contributions of 3% of NAV a year the floor rises to 2.85% and the reset moves to 14.5 yr. At 6% the floor is 4.09% and the model never resets.
Outside-gain capacity has the largest effect, and it pulls the other way. In Table 5 the reset arrives at 18.8 yr when capacity is 3% of NAV a year, at 10.3 yr when it is 4%, and never at 2%.
So the rule the paper arrives at reduces to a comparison. The signal is the account's harvest yield set against the outside-gain capacity of the investor. When the yield falls through that line, the model refreshes basis through the cheapest available route, taking the charitable flush before the taxable partial liquidation.
Who this is for: CPAs and tax professionals, researchers and quants, and journalists covering direct indexing will find the aging formula and the reset rule useful.
Tables
| Year | Harvest yield (% NAV) | Cumulative (% NAV) | Names below basis (%) | Net embedded gain (% NAV) |
|---|---|---|---|---|
| 1 | 20.25 | 20.3 | 9.5 | 12.8 |
| 2 | 8.94 | 29.2 | 5.2 | 22.7 |
| 3 | 6.59 | 35.9 | 3.9 | 28.8 |
| 4 | 5.38 | 41.3 | 3.2 | 33.3 |
| 5 | 4.61 | 45.9 | 2.7 | 37.0 |
| 7 | 3.65 | 53.6 | 2.2 | 42.8 |
| 10 | 2.84 | 62.9 | 1.7 | 49.2 |
| 15 | 2.11 | 74.8 | 1.3 | 56.7 |
| 20 | 1.69 | 84.0 | 1.0 | 62.1 |
| Situation | Loss value ρ | Capacity L̄ | Reset T* | Yield at reset | Uplift vs. never (bps NAV) |
|---|---|---|---|---|---|
| High outside gains | 40.8% | 8% | 2.9 yr | 6.07% | 1527 |
| Base outside gains | 40.8% | 5% | 6.7 yr | 3.59% | 639 |
| Low outside gains | 40.8% | 2% | never | 1.20% | 138 |
| Long-term gains only | 23.8% | 5% | never | 1.20% | 60 |
| Charitable flush, base | 40.8% | 5% | capacity-limited | 16.09% | 6861 |
| σ | m=μ-σ²/2 | Hit prob. p | E[K] | Year-1 yield | Reset T* |
|---|---|---|---|---|---|
| 18% | 0.054 | 0.847 | 5.5 | 9.4% | 1.9 yr |
| 22% | 0.046 | 0.910 | 10.1 | 12.9% | 3.1 yr |
| 26% | 0.036 | 0.948 | 18.2 | 16.5% | 4.7 yr |
| 30% | 0.025 | 0.973 | 35.5 | 20.3% | 6.7 yr |
| 34% | 0.012 | 0.990 | 94.3 | 24.1% | 9.5 yr |
| 38% | -0.002 | 1.000 | ∞ | 28.0% | 14.3 yr |
| 42% | -0.018 | 1.000 | ∞ | 32.0% | 23.0 yr |
| Contribution (% NAV/yr) | Yield floor (yr 26–30) | Reset T* |
|---|---|---|
| 0 | 1.28% | 6.7 yr |
| 3 | 2.85% | 14.5 yr |
| 6 | 4.09% | never |
| 10 | 5.43% | never |
| 20 | 7.93% | never |
| Capacity L̄ (% NAV/yr) | Reset T* |
|---|---|
| 2 | never |
| 3 | 18.8 yr |
| 4 | 10.3 yr |
| 5 | 6.7 yr |
| 7 | 3.7 yr |
| 10 | 1.9 yr |
| 15 | 0.9 yr |
Abstract
A direct-indexing separately managed account harvests a great deal of loss in its first year and steadily less every year after. As winners accumulate embedded gains, fewer lots sit below cost basis, and the decay can be predicted on the day the account is funded. We give it a closed form. If each holding's log-moneyness is a Brownian motion with drift, a fresh lot is harvested only if it ever reaches the loss threshold, which happens with probability p = exp(-2mh/sigma^2). That one number fixes a finite lifetime budget of p/(1-p) harvests per name and a defective renewal equation for the harvest rate. A density transfer operator integrates the aging curve and a fixed-seed Monte Carlo checks it name by name: at a base calibration the year-one harvest yield is 20.3% of NAV (analytic) against 19.5% (simulated), the year-ten yield is 2.8% against 2.7%, and nearly a quarter of the twenty-year harvest is realized in year one.
The refresh of basis is then posed as an impulse-control problem. A partial liquidation, a charitable flush of low-basis lots, or a 351 conversion pays a tax or transaction cost now and restores the fresh harvest curve. Because the value of a harvested loss is capped by how much outside gain the client can shelter in a year, the account should be reset when its decayed yield falls to a level set by the reset cost, the discount rate, and that loss value. Under a base calibration that means a reset about every seven years for a client with ordinary short-term outside gains, sooner when those gains are abundant, and never when they are scarce or when the exit is a step-up in basis. Higher single-name volatility and larger contribution flow both delay the reset; a larger appetite for outside gains brings it forward.
Keywords: tax-loss harvesting, direct indexing, first-passage time, impulse control, tax alpha, embedded gains, 351 conversion, renewal theory, separately managed account, after-tax return
How to cite
Majumdar, A. (2026). The Term Structure of Harvestable Losses: Why a Direct-Indexing SMA Ages, and When to Reset. SSRN Working Paper No. 7551180. https://ssrn.com/abstract=7551180
@techreport{majumdar_term_structure_harvestable_losses,
author={Majumdar, Anirban},
title={The Term Structure of Harvestable Losses: Why a Direct-Indexing SMA Ages, and When to Reset},
institution={SSRN},
number={7551180},
year={2026},
url={https://ssrn.com/abstract=7551180}}
Where we posted this paper
We wrote a short version of this paper for each network. Each link opens our own post in a new tab.