# How to backtest an asset allocation over history

Five browser tools replay a fixed mix over past returns. What decides the number is the series before each fund existed, dividends, rebalancing and fees.

*https://stockmarketstack.com/how-to/backtest-an-asset-allocation · next to Retirement & Portfolio Planning Calculators*

**Answer:** Type the weights into a browser backtester, then fix five settings before reading anything: dividends reinvested, the rebalancing rule, cash flows off, nominal or real, and fees. testfolio runs daily with full history free; Portfolio Visualizer runs monthly and caps free ticker runs at ten years; Curvo runs UCITS funds on index history; Portfolio Charts runs asset classes annually. What breaks is the series standing in before a fund existed.

## The tools that do this

*In the order this page recommends trying them. Paid placement does not affect this order.*

1. [testfolio](https://stockmarketstack.com/tools/testfolio.md) — Daily data, calendar and band rebalancing, cash flow legs, full history on the free tier. SIM tickers extend funds before they existed, unmarked on the chart.
2. [Portfolio Visualizer](https://stockmarketstack.com/tools/portfolio-visualizer.md) — Monthly total-return data net of fund fees, five calendar rules or bands. Free ticker runs stop at ten years; asset-class runs reach back to 1972.
3. [Backtest by Curvo](https://stockmarketstack.com/tools/curvo.md) — UCITS funds run on their index less the TER, monthly in euros, back to 1970. Calendar or absolute bands, broker fees, contributions but no withdrawals.
4. [Portfolio Charts](https://stockmarketstack.com/tools/portfolio-charts.md) — Asset classes, not funds, on annual real returns since 1970 in twelve home currencies. Annual rebalancing is fixed; fees and taxes are left out.
5. [PortfoliosLab](https://stockmarketstack.com/tools/portfolioslab.md) — Real fund prices only, daily. A portfolio starts at its youngest holding and nothing is backfilled. Free accounts see five years.

## The short way

Pick the tool by the question the data can answer, then pin down five settings before trusting
any figure it prints.

1. **Which series.** Named funds you hold, or asset classes. Funds have short histories;
   asset-class series reach back to 1970 or 1972, and anything older than a fund is a stand-in.
2. **Dividends reinvested.** Turn total return on. A price-only run is a different statistic.
3. **The rebalancing rule.** Never, on a calendar, or when a weight drifts past a band.
4. **Cash flows off for the first run.** Contributions and withdrawals change what CAGR means
   in some tools and not in others.
5. **Nominal or real, and fees.** Know whether fund costs are already in the data and whether
   the figure is after inflation.

Then run the same mix twice with one setting changed. A difference you can attribute to a setting
is information; a difference between two tools with five settings unmatched is not.

## What the options are

**Named funds on daily data.** [testfolio](https://stockmarketstack.com/tools/testfolio) aligns daily return series, gives
full history on the free tier, and takes a rebalance frequency, an offset, an "annual drag"
figure and optional bands for each portfolio. Its preset SIM tickers extend a fund back before
it listed, and an `FB` modifier on any ticker splices in another ticker's returns before the
first one begins. [PortfoliosLab](https://stockmarketstack.com/tools/portfolioslab) also works on daily, dividend-adjusted
prices and takes the opposite view of history: a portfolio begins on the day its youngest
holding did, and nothing is extended. Its free plan sees five years.

**Named funds or asset classes on monthly data.** [Portfolio Visualizer](https://stockmarketstack.com/tools/portfolio-visualizer)
has two backtests. The asset-class one runs from January 1972 on a free session; the ticker one
is cut to the last ten years on the free tier. Its documentation says it uses total-return data
and reinvests dividends and capital-gains distributions by default, and it can map a young fund
to a proxy, or to the fund's oldest share class, to extend it backwards.
[Backtest by Curvo](https://stockmarketstack.com/tools/curvo) is the European version of the same idea, over 1,306 UCITS funds,
and its index funds are run on the index behind them with a twelfth of the ongoing charge taken
off each month.

**Asset classes on annual data.** [Portfolio Charts](https://stockmarketstack.com/tools/portfolio-charts) never touches a
ticker. It runs annual, inflation-adjusted total returns from 1970 for twelve home countries, and
every chart is computed for every start year rather than one.

The [comparison of Portfolio Visualizer and testfolio](https://stockmarketstack.com/compare/portfolio-visualizer-vs-testfolio)
works through which free tier answers which question, and
[what to use instead of Portfolio Visualizer](https://stockmarketstack.com/alternatives/portfolio-visualizer) takes its
modules one at a time.

## The settings that change the number

**Total return or price return.** A price series leaves out every dividend and coupon; a
total-return series reinvests them. Portfolio Visualizer has a Reinvest Dividends choice that
defaults to yes. testfolio reinvests only when a portfolio's "Invest dividends" box is ticked,
and says its preset tickers already track total return, so the box changes nothing for them.
Curvo assumes every fund accumulates, distributing ones included. Portfolio Charts measures each
asset's total return as a snapshot every 31 December.

**Rebalancing.** Each tool offers a different menu, read on 9 October 2026:

- **Portfolio Visualizer:** annual, semi-annual, quarterly, monthly or none, or bands set as
  an absolute and a relative deviation, defaulting to 5% absolute and 25% relative.
- **testfolio:** a frequency with an optional offset, applied at the close of the period's last
  trading day, plus absolute and relative bands that can run alongside the calendar.
- **Curvo:** monthly to every three years, or none, or an absolute band of 5%, 10%, 15% or 20%.
- **Portfolio Charts:** annual, fixed. Its methodology page says the rule is built into the maths.

The two band types are different rules. Portfolio Visualizer's documentation gives the example:
a 60% target rebalances at 65% or 55% under the 5% absolute band, and a 10% target at 12.5% or
7.5% under the 25% relative one. A tool on monthly data can only see drift at month ends, so a
band breached and recovered inside a month never fires.

**Contributions and withdrawals.** Portfolio Visualizer offers a fixed contribution, a fixed
withdrawal or a percentage withdrawal, monthly, quarterly or annually, optionally
inflation-adjusted with CPI-U, and applies any fee before the cash flow. testfolio takes several
cash flow legs, each with its own amount, frequency, offset and end date, as a fixed sum or as a
percentage of the portfolio for withdrawals only. Curvo takes a one-off amount or a recurring
contribution; its interface has no withdrawal option. Portfolio Charts puts contributions and
withdrawals in specific calculators, always at constant purchasing power. PortfoliosLab models
neither.

**Inflation.** Portfolio Visualizer uses US CPI-U. testfolio uses US CPI for dollars and local
CPI or HICP for six other reporting currencies, and its inflation switch applies to cash flows
too. Curvo uses the Belgian consumer price index, which on its card's check ended seven months
before the market data did. Portfolio Charts is always real, deflated by each home country's own
CPI.

**What CAGR and drawdown mean in each.** The [CAGR](https://stockmarketstack.com/glossary/cagr) formula takes two balances,
and the tools disagree about which two. Portfolio Visualizer computes it from the start and end
balance, so contributions are inside it, and shows a time-weighted figure and an IRR beside it.
testfolio says its CAGR ignores cash flows and behaves like a
[time-weighted return](https://stockmarketstack.com/glossary/time-weighted-return), with a money-weighted figure separate.
Curvo's interface defines CAGR against the total amount invested over the simulation. The
[maximum drawdown](https://stockmarketstack.com/glossary/maximum-drawdown) depends on the sampling: daily on testfolio,
month-end on Portfolio Visualizer and Curvo, year-end on Portfolio Charts, whose own FAQ says
annual data reports the mildest drawdowns and daily data the deepest.

## Where this breaks

**The series before the fund existed.** Every long backtest of a young fund is a splice, and the
splice is the assumption. testfolio's SIM tickers join a modelled segment to the real fund with
nothing on the chart to show where; its card records TQQQ from February 2010 at 42.3% CAGR and
the simulated TQQQSIM from 1986 at 13.3%, one instrument and two start dates. Curvo assumes
perfect tracking of the index, says itself that there is always a tracking error, and 44 of its
504 index series had stopped updating on its card's check without being marked. Portfolio Charts
fills its oldest years from a priority list that ends in substitutes, such as ex-US large-cap
blend standing in for ex-US small-cap value before about 1975. Portfolio Visualizer's sample
output says plainly when the youngest fund constrained the period and which older share class
would extend it.

**The fund list survived.** The funds you can type in are the ones that exist today. A strategy of
"the funds I would have picked in 2000" is tested on funds that were not merged, closed or
renamed since, which is [survivorship bias](https://stockmarketstack.com/glossary/survivorship-bias) at the level of the menu.
Running on index or asset-class series avoids the closed funds and keeps the hindsight in the
choice of index.

**Dividends you did not get.** Curvo treats a distributing fund as accumulating, so the cash you
received and spent is compounded inside the result. Its index series mix net-of-withholding
total return (277 of them), gross total return (206) and price only (21), and a portfolio built
across the three compares unlike things. Portfolio Visualizer's documentation says mutual fund
distributions usually reach its data within two business days of the ex-date. And testfolio with
"Invest dividends" unticked runs a real ticker on price alone.

**The start date.** A mix tested from one year and again from the next can report a different
CAGR and a different worst drawdown, and a longer window can only find a deeper drawdown, never a
shallower one. Read a rolling-returns chart or Portfolio Charts' Heat Map, which gives a CAGR for
every start year at every holding period, before quoting one number.

**Fees counted twice, or never.** Portfolio Visualizer's data is already net of each fund's
expense ratio, so subtracting the expense ratio again double counts it. Portfolio Charts refunds
the expense ratio to show returns before fees, so its figures need the cost taken off by you.
Curvo has a switch for the TER and fields for a management fee and a per-transaction fee.
Portfolio Visualizer's backtest page says its results reflect no trading costs and no taxes;
testfolio's turnover and tax estimate treats every dividend as a capital gain for simplicity and
calls itself an estimate.

**Resolution.** Daily, monthly and annual data produce three different drawdowns for one history.
Compare drawdowns only between tools on the same sampling.

## If you outgrow this

**When the rule needs code** — bands that depend on volatility, cash flows tied to a schedule no
form offers, thousands of variants — [bt](https://stockmarketstack.com/tools/bt) does allocation and rebalancing over a frame
of prices in Python, and the rest of [backtesting frameworks](https://stockmarketstack.com/categories/backtesting-frameworks)
handles entry and exit rules rather than static mixes.

**When the question is a withdrawal plan**, a backtest of the accumulation is the wrong tool.
[FI Calc](https://stockmarketstack.com/tools/ficalc) and [cFIREsim](https://stockmarketstack.com/tools/cfiresim) replay withdrawals against every
historical cycle, and [why two retirement calculators disagree](https://stockmarketstack.com/guides/why-retirement-calculators-disagree)
covers the series and conventions behind their success rates. A forward projection is a
[Monte Carlo simulation](https://stockmarketstack.com/glossary/monte-carlo-simulation), and its generator decides the answer
the way the stand-in series decides a backtest's.

## FAQ

### Why does the same allocation show a different CAGR in two backtesters?

Usually because the two tools fed it different inputs, not because one is wrong. Check the start date each one actually used, whether dividends were reinvested, whether returns are nominal or after inflation, whether fund fees are in the data, and whether contributions sit inside the CAGR. Portfolio Visualizer's CAGR includes cash flows, testfolio's ignores them, and Curvo's divides by the total amount invested.

### Is a backtest that runs before a fund existed a real result?

No. The years before inception come from a stand-in, an index with a fee deducted, an older share class, a similar fund or a modelled series, joined onto the fund's own record. That shows how an exposure behaved, not what any holder of that fund received, and testfolio, for one, does not mark the join on the chart.

### Should dividend reinvestment be switched on?

For comparing an allocation with an index, a fund's published return or another backtest, yes, because those are total-return figures. Portfolio Visualizer reinvests by default, testfolio reinvests per portfolio when "Invest dividends" is ticked, and Curvo and Portfolio Charts always reinvest. A price-only run understates every income-paying holding by its yield.

### Does the rebalancing frequency change the result?

Yes, and by an amount that is a property of the window tested. Each tool offers a different menu, from Portfolio Charts' fixed annual rule to testfolio's calendar plus absolute and relative bands, and a monthly-data tool can only see drift at month ends. Run the same mix under two rules over the same dates before reading anything into the difference.

## Sources

1. [Help, Methodology, and Tool Guides](https://testfol.io/help) — testfolio, read 2026-10-09
2. [Portfolio Backtester guide](https://testfol.io/guides/portfolio-backtester) — testfolio, read 2026-10-09
3. [Portfolio Visualizer Documentation (FAQ)](https://www.portfoliovisualizer.com/faq) — Portfolio Visualizer, read 2026-10-09
4. [Backtest Portfolio Asset Allocation](https://www.portfoliovisualizer.com/backtest-portfolio) — Portfolio Visualizer, read 2026-10-09
5. [Backtest FAQ](https://curvo.eu/backtest/en/faq) — Curvo, read 2026-10-09
6. [Methodology](https://portfoliocharts.com/user-guide/methodology/) — Portfolio Charts, read 2026-10-09
7. [Data Sources](https://portfoliocharts.com/user-guide/data-sources/) — Portfolio Charts, read 2026-10-09
8. [FAQ](https://portfoliocharts.com/user-guide/faq/) — Portfolio Charts, read 2026-10-09

*Last updated 2026-10-09. A reference page, corrected in place — not a dated post.*
