Historical Data Powered

Free Portfolio Backtester

Compare a hypothetical USD-quoted stock or ETF allocation with SPY using provider split-adjusted closing prices. This is a price-return experiment: dividends, fees, taxes and FX are excluded.

Up to 10-Year Requested Range
SPY Price Comparison
100% Free

Build Your Portfolio

Search for stocks or ETFs above, or select a preset portfolio

Backtest Settings

Start with a clearly defined price-return experiment

Choose a basket, allocate 100% across positive weights and select a common date range. The illustrative presets are convenient inputs, not recommendations, index constituents or historical investment records. Dollar values assume verified USD-quoted securities and fractional shares. No deposits or withdrawals are modeled.

Know what the price series includes

The underlying API route uses FMP historical-price-eod/full. This tool consumes its close field as a split-adjusted price series; it does not silently substitute a dividend-adjusted field. Cash distributions, reinvestment and other corporate actions such as spin-offs are outside the model. A price-only bond or dividend-stock comparison can therefore differ substantially from total return.

Provider reference: FMP price adjustment definitions. Match an issuer or broker record when corporate actions matter.

Allocation, observations and rebalancing

Initial dollars divided by the first common close determine fractional units. Without rebalancing, units remain constant. With rebalancing, the first common close of each new calendar period values the old holdings and resets units to target weights for subsequent observations. This same-close model omits spreads, execution delay, transaction costs and taxes.

Only dates available for every holding and SPY are used. Results show the actual interval and the number of dates omitted from the union of returned observations. The tool cannot prove that the provider returned every market session; missing data and delisted securities can distort a historical comparison.

Interpret the summary numbers

Price return is ending value divided by starting value minus one. Annualization uses elapsed days divided by 365.25. Drawdown is the largest observed percentage decline from a running peak, not a limit on future losses. Calendar-year rows include the move from the preceding observed year-end close; edge years can be partial.

Volatility uses sample standard deviation of simple close-to-close returns times the square root of 252. The illustrative zero-risk-free Sharpe uses the arithmetic mean of those returns, not CAGR. Annual scaling assumes regular observations and does not correct serial correlation. Method reference: William Sharpe’s explanation of the ratio and time dependence.

For a synthetic 50/50 allocation of 1,000 USD, prices moving from 100/100 to 110/90 leave value at 1,000 USD before costs. Returning to equal weights at that close changes the quantities held, not the portfolio’s immediate value. Subsequent outcomes depend on subsequent prices.

Frequently Asked Questions

What return is being modeled?

Split-adjusted price return only, using FMP close. Cash dividends, distributions, reinvestment, spin-offs, fees, taxes and FX are excluded. This is not total return. SPY is an ETF price proxy, not the S&P 500 total-return index. USD quote currency is verified from provider profiles before calculation.

Which portfolios and dates are supported?

Use 1–20 distinct USD-quoted holdings with positive weights totaling 100%, a positive investment and a past range no longer than ten years. Fractional shares are assumed. Missing provider history can prevent a run. The first and last common observations are displayed; a requested boundary more than seven days from common data is rejected.

How is rebalancing modeled?

On the first common observation in a new month, quarter or year, the old holdings are valued at that close and reallocated at the same close for later observations. No transaction costs, order delay or whole-share rounding are modeled. This is a theoretical closing-price convention, not an executable order simulation.

How are volatility and Sharpe calculated?

Observed close-to-close simple returns use sample standard deviation and an assumed 252 observations per year. Sharpe uses their arithmetic mean with a fixed illustrative zero risk-free rate, divided by sample standard deviation and multiplied by the square root of 252. It is unavailable at zero variance. Both annualized metrics are withheld for detected omitted dates or gaps over seven calendar days. Undetected missing sessions and serial correlation remain limitations.

Do yearly results represent complete calendar years?

Not necessarily. The first and last year can be partial. Later years include the move from the preceding year’s final observed close. Best and worst year labels refer only to these observed spans; they are not forecasts or lifetime worst cases.

Are the presets recommendations?

No. They are illustrative current ticker baskets, not point-in-time index membership or recommended allocations. Choosing today’s surviving companies introduces selection and survivorship bias. Prices can be revised, and a historical result does not validate future returns.

Explore Rules in a Separate Pine Script Workflow

Pineify can help draft indicators and strategy code from explicit rules. Review the code and test costs, data and out-of-sample behavior in TradingView. This historical portfolio worksheet does not validate a strategy or execute orders.