Transition Planner
A quarter-by-quarter selling schedule that trims an overweight portfolio inside a yearly budget for realized gains.
Concentration proxy at the end of the 8-quarter plan, down from 1,081 bps, realizing $174,418 of long-term gains on a $1.46M sample portfolio. The 75 bps target is not reached.
Precomputed on the sample portfolio as of May 15, 2026.
See it on a sample portfolio
Pick a sample portfolio and a preset to see what the tool returns. Every number comes from the tool's own code, run offline ahead of time; nothing is calculated in your browser. Sort the table, or download it as a CSV file to check the figures yourself.
A long-held, diversified 15-name large-cap book worth about $1.46M, carrying roughly $916k of unrealised long-term gain and no lots at a loss. 15 lots · $1,455,101 portfolio value
- Annual gain budget
- $200,000
- Horizon
- 8 quarters
- Final tracking-error target
- 75 bps
Over 8 quarters the plan sells $174,418 of long-term gains and pays $34,884 in tax. The concentration proxy, this demo's stand-in for tracking error, falls from 1,081 bps to 696 bps against a target of 75 bps. Selling stops after quarter 4.
Selling every long-term gain in the portfolio now would cost $148,307 more in tax than this plan. That is tax put off, not saved: the plan sells only lots that trim overweight stocks, and the gains it leaves in place are taxed when those shares are sold.
The first point is the starting portfolio; the dashed line is the target.
| Sales (shares) | Gains realized, as a bar | ||||
|---|---|---|---|---|---|
| Q1 | AAPL 263.71 | $50,000 | $10,000 | 912 bps | |
| Q2 | MSFT 161.19 | $50,000 | $10,000 | 779 bps | |
| Q3 | COST 41.52, AAPL 118.33, META 7.94 | $50,000 | $10,000 | 707 bps | |
| Q4 | META 21.34, LLY 11.3, UNH 12.28, AMZN 18.34, MSFT 5.29, BRK.B 2.4 | $24,418 | $4,884 | 696 bps | |
| Q5 | — | $0 | $0 | 696 bps | |
| Q6 | — | $0 | $0 | 696 bps | |
| Q7 | — | $0 | $0 | 696 bps | |
| Q8 | — | $0 | $0 | 696 bps |
Select a column heading to sort; each bar compares a quarter's realized gains with the largest.
The same sample portfolio under each preset.
| Preset | Annual gain budget | Horizon | Gains realized | Tax | Last sale | Proxy at end |
|---|---|---|---|---|---|---|
| Patient | $100,000 | 16 quarters | $174,418 | $34,884 | Q7 of 16 | 696 bps |
| BalancedShown | $200,000 | 8 quarters | $174,418 | $34,884 | Q4 of 8 | 696 bps |
| Faster | $500,000 | 4 quarters | $174,418 | $34,884 | Q2 of 4 | 696 bps |
On this sample every preset ends in the same place: the yearly budget changes how fast the plan sells, not where it ends.
- Tracking error is a concentration proxy in this demo: it measures how far the portfolio's weights sit from an equal weight across the sample's own names. It is not true tracking error against a benchmark, which needs a factor risk model the demo does not use.
- The final tracking-error proxy of 696 bps did not reach the 75 bps target within 8 quarters. Selling stopped early: no long-term-gain lot in an overweight name was left to trim. This demo only sells — it does not reinvest the proceeds in underweight names — so a longer horizon or a larger gain budget would not close the gap.
Precomputed offline by the tool's Python code for these sample portfolios and presets. Nothing is calculated in your browser.
Selling a concentrated portfolio all at once can mean one large tax bill. Spreading the sales over several quarters, inside a yearly budget for realized gains, spreads the tax out and realizes only the gains needed to trim the overweight stocks.
for each quarter q = 1 … horizon:
quarter budget = annual gain budget ÷ 4
sell long-term lots with a gain, in stocks above equal weight:
most overweight stock first,
and within a stock, the lot that cost the most first,
until the quarter's gains reach the quarter budget
or every stock is back down to equal weight
concentration proxy = √ Σₙ (weightₙ − 1/N)² in bps
weightₙ = stock n's value ÷ the starting portfolio value
N = number of stocks in the portfolioThe planner follows fixed rules; it is not an optimizer. Each quarter it spends up to a quarter of the yearly gain budget trimming the most overweight stocks, and it never sells a lot held a year or less or a lot at a loss. It only sells: the cash is not reinvested in underweight stocks, so once nothing overweight is left to trim, selling stops, even if budget and quarters remain.
No solver is involved. The tool sorts the lots and works down the list. Each sale is priced with LotWise's US tax engine at 20%, the top federal income-tax rate on long-term gains; the planner never sells a short-term lot. The demo leaves out the 3.8% net investment income tax, which also applies to investors in the top brackets, so every tax figure here is lower than it would be with that tax included. The tool runs offline, ahead of time, on the sample portfolios; this page shows the saved results.
- Lots with cost and purchase date
Every tax lot in the sample portfolio. The planner sells only lots held more than a year and priced above their cost.
- Annual gain budget
The most capital gain the plan may realize in a year; each quarter may use a quarter of it.
- Horizon
How many quarters the schedule covers. It does not change how fast the plan sells; the yearly budget sets that.
- Final tracking-error target
Used only to report whether the concentration proxy reached it. It never changes a sale.
- Quarterly sell list
Which stocks to sell each quarter and how many shares, with the gain realized and the tax at the 20% long-term rate.
- Concentration proxy by quarter
How far the weights sit from an equal weight across the portfolio's own stocks: a stand-in for tracking error, which needs a benchmark and a risk model the demo does not use.
- Tax put off against selling at once
The tax on every long-term gain in the portfolio if sold now, minus the plan's tax. The gap is tax on gains the plan leaves unsold: deferred, not saved.
- Equal weight stands in for the benchmark
- The demo has no benchmark or risk model, so its target is an equal weight across the portfolio's own stocks. A stock above that weight is overweight. Squaring each stock's gap from equal weight, adding them up and taking the square root gives the concentration proxy the page reports.
- The budget sets the pace
- Each quarter may realize up to a quarter of the yearly budget. Within it, the planner trims the most overweight stock first and, within a stock, sells the lot that cost the most first, so each dollar sold realizes as little gain as possible. No stock is trimmed below equal weight.
- Why selling can stop early
- The planner sells only long-term lots with a gain in overweight stocks, and it does not reinvest the cash. When no such lot is left before the horizon ends, the remaining quarters have no sales. A bigger budget then changes how fast the plan sells, not where it ends, and a longer horizon changes nothing.
Annual gain budget
The most capital gain the plan may realize in a year. The planner splits it evenly, so each quarter may realize up to a quarter of it.
Here gᵢ is the gain on each sale and B is this budget. Each quarter, the planner sells long-term lots with a gain in overweight stocks until the quarter's gains reach B ÷ 4. It never sells a lot at a loss, so losses play no part. A smaller budget slows the selling; it changes where the plan ends only if the horizon runs out first.
A larger budget finishes the trimming sooner but brings the tax forward. A smaller one spreads the tax over more quarters and leaves the portfolio concentrated for longer.
Finds every lot you can sell at a loss without realizing a gain, holding back a lot when other shares of the same stock were bought in the last 30 days.
Picks the appreciated lots to give so that a gift of stock avoids the most capital-gains tax.
The results on this page were computed ahead of time by the tool's Python code, on sample portfolios and a few preset inputs, and saved with the site. Output is illustrative and is not investment or tax advice.