Asset-Location Backtester

Compare a naive cross-account placement against a tax-optimal placement for your saved household setup and date range.

On this page

Features

  • Compares two starting placements using the same saved household setup
  • Shows differences in after-tax growth, ending value, and attributed tax drag
  • Breaks down tax drag by year, asset, and account, with realized-loss benefits separate
  • Saves private inputs and household references for reproducible reruns. If the engine changes, refresh to see a current result

When to use it

Use this tool to compare where a target allocation starts across taxable, traditional, Roth, and HSA accounts.

Start with Tax Profile & Accounts to define the household, accounts, target allocation, and current holdings. Use Tax-Aware Backtesting for the shared lot, wash-sale, dividend, and annual tax-settlement assumptions behind the simulations.

Step-by-step walkthrough

  1. Open Household, tax, & accounts and confirm filing status, ordinary income, resident state, accounts, and tax settings.
  2. Save the household setup. The backtester resolves the saved holdings version.
  3. Open Asset-Location Backtester and set the date range.
  4. Run the comparison. The tool builds two starting placements and applies the same tax model to each.
  5. Read the summary. Then, inspect the waterfall and attribution rows for the years, assets, and accounts that drove the result.

Comparison policies

PolicyHow It Starts
NaiveEach account holds every target asset in proportion to that account's share of household dollars.
Tax-optimalThe policy places assets by tax-efficiency class and account fit score, filling the best available account capacity first.

Snapshot date and start date

The start date cannot precede your holdings snapshot date. Using lots before they existed would misstate returns, holding periods, and wash-sale windows.

A snapshot captured today therefore has no past window available. To measure a period that has already happened, import a holdings snapshot dated on or before the start date you want. The importer lets you set that date.

The backtest values starting balances at the first close on or after the start date. It never substitutes an earlier close. Mutual fund prices post after the market closes. The backtest rejects a start date whose prices have not posted yet, and names the affected symbols. Choose an earlier start date, or run it again once those prices post.

How to read results

  • After-tax CAGR delta: tax-optimal CAGR minus naive CAGR.
  • Terminal after-tax value delta: tax-optimal ending value minus naive ending value.
  • Attributed tax drag saved: naive attributed investment-tax drag minus tax-optimal attributed investment-tax drag.
  • Delta rows: positive values mean the tax-optimal placement reduced attributed drag for that year, asset, and account.

Modeling assumptions

  • The backtest uses the saved household setup to infer account dollar capacity at start-date prices, then both comparison policies build fresh synthetic starting lots.
  • Synthesized taxable lots use the start date as acquisition date and start-date close as cost basis. This keeps the two policies symmetric and reproducible.
  • Attribution covers investment-side taxes: short-term gains, long-term gains, NIIT, qualified dividends, ordinary dividends, and investment state tax.
  • Ordinary income tax and RMD state-tax overlays remain in the household backtest tax bills but are not allocated into per-holding drag cells.
  • The results report realized losses as separate loss-benefit rows, and do not net them into positive tax-drag cells.

Suggest placement (Pro)

The suggest placement panel proposes a tax-optimal per-account placement of your saved target allocation for one representative year. It is a Pro-tier compute action. The backtester scores real price history. The optimizer uses a single-year tax-drag model.

  • Current: single-year tax drag of the placement implied by your holdings snapshot, valued at the selected start date.
  • Naive: single-year tax drag if every account held the target allocation in the same proportions (no tax-location awareness).
  • Suggested: single-year tax drag of the optimizer's proposed placement. The result is never worse than your current placement when the current placement already matches the target allocation. The optimizer falls back to your current cells in that case.
  • Per-account placement table: the suggested weight and dollar value of each ticker in each account.
  • What changed: a human-readable diff of the dollars moved between accounts and assets, with a one-line rationale tied to each ticker's tax-efficiency class.

Optimizer modeling assumptions

Drag figures are dollars per year. The optimizer does not compute a multi-year present value. It gets yield and appreciation from five tax-efficiency classes: bonds, broad equity, growth, municipal, and unclassified. It does not use observed dividend history. The backtester uses real dividend data.

  • Federal rates: ordinary, qualified-dividend, and long-term capital gains rates come from the bracket schedule for the selected start date's year. The optimizer rejects unsupported years.
  • LTCG stack position: the optimizer reads the LTCG / qualified dividend bracket at the household's ordinary income plus projected qualified investment income. Existing dividends and capital gains can push the marginal rate into the next bracket.
  • NIIT (3.8%): phased in continuously. The effective per-dollar rate on investment income is min(NII, max(0, MAGI − threshold)) / NII × 3.8%, matching IRC §1411. A household just above the threshold pays NIIT only on the dollars above it, not on every dividend.
  • State tax: the optimizer applies modeled state rates to taxable interest, dividends, and gains. Some state long-term-gain deductions and investment-only taxes change those rates. Unsupported state rules remain outside this estimate.
  • Tax-deferred drag: the model treats distributions, dividends, gains from trading, and appreciation in traditional accounts as ordinary income at withdrawal. A 50% factor approximates the benefit of deferring that tax. NIIT does not apply inside the account.
  • Tax-free drag: zero in this model for Roth accounts and qualified HSA medical distributions. Non-qualified HSA withdrawals are outside the placement estimate.
  • Unrealized appreciation in taxable: the model treats 50% of appreciation as realized long-term gain within its representative year. The rest stays unrealized. This factor approximates long holding periods and possible step-up at death.

Saved analyses

Saved analyses are private-only because the request and result can include household tax context, account names, share counts, and lot basis. Saved analyses reopen with the same immutable household setup references so the result remains reproducible even if the household draft changes later. The optimizer's saved analyses live in the same family as backtester analyses in the load picker. A proposal and a backtest of the same household then sit side by side.