Tools / Portfolio backtest

What would it actually have done?

Any mix of ETFs, index funds and institutional asset classes against their real history. Compare any two portfolios: your own holdings, familiar named presets, or an edited version of either. Both use matching dates, currency and settings. No account required.

Free, no signupNo 10-year lookback capUnlimited runs

Tools / Portfolio backtest

What would it actually have done?

Free, no signupNo 10-year lookback capUnlimited runs

Any mix of ETFs, index funds and institutional asset classes against their real history. No account required.

Import CSV or Excel

Bring your portfolio or your own historical data.

Start from
Import holdings CSV / Excel or paste your portfolio

1. Open a CSV or Excel workbook, or paste two columns. 2. Check the columns, weights and matched holdings. 3. Confirm to use them in your backtest. Ticker files are checked automatically. For ISIN files, click Review matches to start the lookup. Your current holdings change only when you confirm.

Paste two columns: ticker,weight or isin,pourcentage, for example VTI,60 and BND,40. For wider files, choose the identifier and weight columns. English and French headings, decimal commas, Excel percentage fields and fractional weights are supported in files. Up to 40 holdings and 2 MB per file. Weights must total 100%; they are never rescaled automatically. Use ticker:GOLD or asset:Gold to distinguish a ticker from an asset class.

The paste and file are read in your browser. Review matches sends security identifiers to our server to check exact holdings and available histories. Identifier checks may use Yahoo Finance, OpenFIGI and Boursorama; ticker histories may use Tiingo. Your file, weights, balances and account details are not sent with these lookups or to analytics. We count ticker requests to improve coverage, without recording your allocation.

Save, load or export a setup

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

Holdings

100.0% of 100%
US Large Cap
Asset class
%
US Aggregate Bonds
Asset class
%
Settings
Date range
Advanced ▾0 cashflows · fee 0.00% · bands 0/0%

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.

Import monthly returns CSV & 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 daily prices CSV

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 import a portfolio from CSV or Excel?

Yes. Open a local CSV, TSV, text or Excel (.xlsx) file, or paste holdings and weights. Use tickers, ISINs or exact asset-class names. English and French column headings are recognised; select the worksheet, identifier and weight columns when needed. Excel percentage cells and fractional weights are supported. Up to 40 holdings can be imported, and their weights must total 100%. Review the security matches, currencies, weights and usable histories, then confirm the holdings before running. The importer does not rescale your allocation or substitute similar funds.

Can I include uninvested cash?

Yes. Use CASH:EUR, for example, or select the currency for a CASH row during review. Supported cash currencies are USD, GBP, EUR, CAD, AUD, JPY and ZAR. Uninvested cash earns 0% interest in its own currency; exchange-rate movements still affect its value when the backtest uses a different base currency. A recognised bank-cash row can be imported from a broker file with an explicit record type and currency. A money-market fund remains a separate security with its own history.

Does my holdings file leave my browser?

The file is read in your browser. Security lookups send the selected tickers or ISINs. Identifier checks may use Yahoo Finance, OpenFIGI and Boursorama; ticker histories may use Tiingo. Your file, weights, balances and account details are not sent with these lookups. You review the extracted holdings before confirming them. Saving or sharing a setup is a separate action; a shared setup link includes the holdings and weights.

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 stocks, ETFs and mutual funds by ticker or ISIN?

Yes. Search a supported ticker or import an ISIN to check for the exact security and its available monthly history. Coverage depends on the instrument and available sources. Unresolved securities or unsupported currency histories are shown for review and block an incomplete portfolio from running. You can mix supported securities with the 57 asset classes in one portfolio.

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 →