Tools / Portfolio backtest

What would it actually have done?

Any mix of ETFs, index funds and institutional asset classes against their real history. No account, no lookback cap, and no limit on how many times you run it.

Free, no signupNo 10-year lookback capUnlimited runs
Save, load or export a setup

Setups stay in this browser. Export a file to back them up or move them between devices.

Start from
Paste your portfolio or open a CSV

Copy two columns from a spreadsheet, or put a ticker or exact asset-class name and its percentage on each line. Review the matches before replacing your holdings.

Percentages must total 100; use 60 for 60%. Up to 40 holdings per import. No balances or extra columns. To distinguish a ticker from an asset name, use ticker:GOLD or asset:Gold.

The paste and file are read in your browser. Reviewing tickers requests their names and history from our server; your percentages and raw file are not sent with those requests or to analytics. We count ticker requests to improve coverage, without recording your allocation.

Holdings

100.0% of 100%
US Large Cap
Asset class
%
US Aggregate Bonds
Asset class
%
Settings
Date range
Cashflows, fees and rebalance bands

A zero band disables that trigger. Bands are checked at month end alongside the regular schedule. Costs are charged to both purchases and sales.

Recurring cashflows

Positive amounts add money; negative amounts withdraw. Percentage legs must be negative. Growth is measured from the backtest start. Flows occur at month end in the listed order, before rebalancing.

One-time cashflows

Allocation glidepath

Add dated target allocations to move gradually from the starting mix. Weights interpolate each month and rebalance at every month end, including trading costs. Each anchor must total 100% using the active holdings.

Calculated in your browser. Your allocation stays with you.

Free email alerts

Save this setup as an opt-in monthly backtest alert to your verified account email. Checks use available cached history and are processed periodically; this is not a live market alert. No paid plan is required. Custom series remain fixed until replaced. Clear any final-month limit before enabling an alert.

Custom monthly data & portfolio tickers

Import consecutive month-end total returns with CSV columns month,return_percent. These series stay in your browser and are included when you explicitly save, export or share this setup. No missing months are invented.

A captured portfolio ticker uses returns excluding external cashflow jumps, with its captured fees and rebalancing. It is a fixed history and does not update automatically.

Daily ticker study & custom data

A separate daily study with its own inputs. Use listed tickers or import your own daily history. All holdings must share a quote currency and trading calendar. Bundled monthly asset classes cannot supply daily observations.

Import a custom daily series

CSV columns: date,close,adjusted,dividend,split. Use YYYY-MM-DD dates, positive prices, cash distributions per share and a split factor of 1 on ordinary days. Adjusted prices must include splits and reinvested distributions. Your file stays in this browser session.

Additional cashflows and glidepath

Recurring cashflows

Positive amounts add money; negative amounts withdraw. Percentage legs must be negative. Growth is measured from the backtest start. Flows occur at month end in the listed order, before rebalancing.

One-time cashflows

Allocation glidepath

Add dated target allocations to move gradually from the starting mix. Weights interpolate each month and rebalance at every month end, including trading costs. Each anchor must total 100% using the active holdings.

The simple month-end flow runs first, followed by additional recurring legs and one-time legs. Glidepath targets are applied at confirmed month ends. The rules above still govern daily fees, bands and calendar rebalances.

Portfolio tickers and synthetic series

A portfolio ticker captures its flow-neutral return index, including the captured study’s fees and rules. It does not refresh automatically or carry separate distribution payments.

Leverage, cash and expense modifiers

Uses adjusted total returns and resets leverage each observed day. Uninvested cash earns the chosen rate. Borrowed exposure above 1× pays the spread; short positions also pay the spread on their short notional. Fees accrue over calendar time. This is a synthetic scenario, without margin calls, slippage or changing borrowing availability. SEC explanation of daily resets.

Convert a series with daily exchange rates

Select the source in the modifier controls above, then upload date,rate. Every rate must be target-currency units per one source-currency unit, for example USD per GBP. Each source observation needs an actual rate; no rates are filled or interpolated.

Zero-coupon bond from a yield history

Upload dated annual effective yields as date,yield_percent. The model reprices a zero-coupon bond using a flat yield curve and rolls back to the chosen maturity at each close. It excludes coupons, credit defaults, spreads and transaction costs. This is a model built from your inputs, not an observed fund history. Treasury explanation of zero-coupon securities.

Worked example: choose an allocation on earlier data, then check the later period

The constraint

How far back it goes

A backtest reaches as far as its shortest holding, which is usually the constraint people trip over. One fund launched in 2015 caps the whole portfolio at 2015 however old everything else is.

Older mutual funds often solve it. VFINX has tracked the S&P 500 since February 1990 and VBMFX the US aggregate bond market for as long, so a two-fund portfolio built from those reaches back thirty-six years, through 2000, 2008 and 2020, where the ETF equivalents would start in the 2000s.

The 57 asset classes use the app’s documented historical series. Coverage differs by asset and currency; the result names the holding that limits your window. Use an asset class when you want broad exposure without picking a specific fund.

The limit

What a backtest cannot tell you

Every backtest describes one sequence of events that happened once. The period you test largely determines the answer you get: run 2009 to 2021 and equities look unbeatable, run 2000 to 2010 and they look broken. Neither is a forecast.

It is also silently biased toward whatever survived. The funds available to test today are the ones that lasted, and the strategies that look best in hindsight are frequently the ones that were most uncomfortable to hold.

That is why the same portfolio is worth running forwards as well, against published capital market assumptions rather than the past, and through a Monte Carlo simulation that shows the range of outcomes rather than the single one history dealt.

Questions this page answers

Can I paste a portfolio or import a CSV?

Yes. Paste two columns containing a ticker or exact asset-class name and a percentage, or open a local CSV, TSV or text file. Percentages must total 100. Review the matched names, currencies and histories before replacing the holdings. The importer does not guess equivalent funds or rescale your allocation. Ticker lookups send the symbols, not your percentages or raw file.

Is this portfolio backtester free?

Yes. The backtester, research panels, daily studies, custom data, comparisons and exports are free. Calculations do not require signup. Email alerts require a free account with a verified email. Available source history sets the lookback; new market-data requests may wait when provider capacity is busy.

How far back can I backtest?

As far back as the holding existed. VFINX and VBMFX reach February 1990, SPY 1993, QQQ 1999 and VTI 2001. A portfolio's window is set by its shortest holding, so replacing a young ETF with an older mutual fund tracking the same index will often buy you years of extra history.

Can I backtest individual ETFs and mutual funds by ticker?

Yes. Search a supported ticker to load its available monthly history. You can also mix tickers with the 57 asset classes in one portfolio, using real funds alongside broad asset-class histories.

What does the backtest include?

The monthly workspace includes detailed risk metrics, drawdown episodes, rolling analysis, historical withdrawals, CPI purchasing power, returns, attribution, allocation history, tax-lot scenarios, comparisons and regression. Advanced settings add cashflows, fees, rebalance bands and glidepaths. The separate daily workspace supports actual ticker prices, custom CSVs, income, daily trading rules and synthetic series. Download tables, spreadsheets and a PDF report.

Are monthly and daily results interchangeable?

No. Monthly asset-class histories cannot reveal intramonth losses. The daily workspace uses actual daily observations with matching calendars and quote currencies. Price-only returns exclude distributions from invested wealth. Each study states its cashflow, fee, inflation and withdrawal timing. Missing observations are not silently filled.

Can I save or share my work?

Save setups in this browser, export or import JSON, or create a link containing the setup. Private monthly series are included in saved or shared setups. Daily custom and derived series stay in the current session unless you download their CSV. Shared links can reveal your holdings and custom data to anyone who receives them.

Does the tax panel change my backtest return?

No. It estimates a separate liability using synthetic total-return FIFO or HIFO lots and your chosen rates. It does not model jurisdiction-specific taxes, dividend taxation, loss offsets or deductions from the invested path. It is an illustrative scenario.

Why does my backtest start later than I expected?

The window is limited by the shortest history among your holdings: one fund launched in 2015 caps the whole portfolio at 2015, however old the others are. Swapping that holding for a longer-lived equivalent, or for an asset class, extends the window.

Keep reading

A backtest is one path that happened. The simulator runs a thousand that could, on the same holdings.

Open the workstation