ToolsTransition Planner

Transition Planner

A quarter-by-quarter selling schedule that trims an overweight portfolio inside a yearly budget for realized gains.

Input
Portfolio + yearly gain budget
Output
Quarterly sell schedule
Method
Fixed rules, no solver
Sample resultTry it below
696 bps

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.

Try it

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

Preset
Inputs used
Annual gain budget
$200,000
Horizon
8 quarters
Final tracking-error target
75 bps
Concentration proxy after 8 quarters
696 bpsTarget not reached

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.

Against selling at once

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.

Concentration proxy by quarter

The first point is the starting portfolio; the dashed line is the target.

Quarterly schedule
Sales (shares)Gains realized, as a bar
Q1AAPL 263.71$50,000$10,000912 bps
Q2MSFT 161.19$50,000$10,000779 bps
Q3COST 41.52, AAPL 118.33, META 7.94$50,000$10,000707 bps
Q4META 21.34, LLY 11.3, UNH 12.28, AMZN 18.34, MSFT 5.29, BRK.B 2.4$24,418$4,884696 bps
Q5—$0$0696 bps
Q6—$0$0696 bps
Q7—$0$0696 bps
Q8—$0$0696 bps

Select a column heading to sort; each bar compares a quarter's realized gains with the largest.

Compare presets

The same sample portfolio under each preset.

PresetAnnual gain budgetHorizonGains realizedTaxLast saleProxy at end
Patient$100,00016 quarters$174,418$34,884Q7 of 16696 bps
BalancedShown$200,0008 quarters$174,418$34,884Q4 of 8696 bps
Faster$500,0004 quarters$174,418$34,884Q2 of 4696 bps

On this sample every preset ends in the same place: the yearly budget changes how fast the plan sells, not where it ends.

Caveats
  • 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.
Sample portfolio as of .

Precomputed offline by the tool's Python code for these sample portfolios and presets. Nothing is calculated in your browser.

The idea

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.

The calculation
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 portfolio

The 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.

What goes in, what comes out
Inputs
  • 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.

Outputs
  • 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.

In more detail
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.
Input

Annual gain budget

Default · $200,000

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.

How the tool applies 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.

The trade-off

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.

Other tools
  • 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.