What's under the hood.
Every backtest on this site uses real historical prices. This page documents where the data comes from, how often it's refreshed, and the assumptions that go into every calculation.
Data sources
Yahoo Finance
All historical price files are populated by pnpm seed which calls the public Yahoo Finance chart endpoints. Equities and ETFs use adjusted-close prices (split- and dividend-adjusted). Crypto uses USD-denominated daily close. Commodities use the continuous front-month futures contract via the =F suffix (GC=F for gold, SI=F for silver).
CoinLore + Yahoo
The current-price displays on calculator pages call CoinLore for crypto and the Yahoo Finance quote endpoint for equities and commodities. Responses are cached at the edge for 60–300 seconds. If either provider returns an error, the page falls back to the most recent close in the historical dataset.
How prices are processed
- ›Adjusted closeEquity and ETF series use split- and dividend-adjusted close prices. This means a long-window backtest implicitly reinvests dividends; the headline return is total return, not price return.
- ›Trading-day fillEach scheduled buy looks up the price at the next available trading day on or after the scheduled date. Weekends and US market holidays roll forward to the next session.
- ›Crypto continuous coverageCrypto markets trade 24/7. Yahoo's daily series has one row per UTC day; we treat each row as that day's close in USD.
- ›No spread, no fees, no taxesAll calculators assume zero commission, zero spread, and no taxes. Real venues charge 0–1% per trade and may incur withholding or capital-gains tax. Real returns will be slightly lower.
- ›Fractional unitsBuys are allowed to acquire fractional shares or coins. If your venue does not support fractional units, real-world buys would round down each period.
Refresh cadence
Historical JSON files are regenerated periodically via pnpm seed and a fresh site is deployed. Each calculator's sitemap lastModified entry tracks the newer of the page source and the underlying data files, so search engines see realistic freshness signals rather than synthetic built-just-now timestamps.
The live price endpoints (/api/prices/crypto, /api/prices/equity) are cached at the edge for short windows (60 seconds for equities, 300 seconds for crypto). Stale-while-revalidate keeps responses snappy under load. Both routes are disallowed in robots.txt because they serve raw JSON for the calculator UI and have no value as indexable pages.
Asset coverage
Known limitations
- !Past performance is not a predictor of future returns. A backtest tells you what would have happened under the chosen rules; it does not promise the same outcome going forward.
- !Survivorship bias affects every asset list on this site. The assets supported are ones that survived to today. Many failed projects, delisted stocks, and dead coins are not represented.
- !Forecast modes apply a constant growth rate and cannot model drawdowns, regime changes, or correlation between assets. Treat forecasts as planning illustrations, not predictions.
- !All amounts are in nominal USD. To translate into real (inflation-adjusted) dollars, deflate the result by your assumed inflation rate.
- !Yahoo Finance occasionally backfills or corrects historical data. A new seed run may slightly change a long-window backtest result.