Historical Market Data for Backtesting: What You Actually Need
Market data for backtesting is historical price, fundamental and macro data that reproduces what you could have known at each past decision point. The bar is higher than for charting: anything that was revised, restated or delisted must appear exactly as it was at the time.
The checklist
Before trusting any historical market data API for research, check these six things:
- Survivorship-free universe. Survivorship bias means testing only on companies that still exist, which overstates returns because failures are missing. Your universe must include delisted stocks.
- Corporate actions and adjustments. Splits and dividends must be available as dated events, with the choice of unadjusted or adjusted prices.
- Point-in-time fundamentals. Look-ahead bias means using information that was not available at the decision time — for example restated financials or fundamentals before their filing date. Fundamentals must be stored as first reported, usable only after the filing's acceptance time.
- Macro vintages. Revised macro data is a classic look-ahead trap. You need every vintage of each series so you can request the number as it was first published.
- Bar sizes that match your strategy. Daily bars for slow strategies; intraday bars if your entries and exits depend on the session.
- Costs you can model. One-time pricing makes it feasible to own the history outright and re-run experiments without a meter running.
What FinzData covers
FinzData is built around exactly this checklist:
- Survivorship-free US stocks, including 8,500+ delisted symbols, plus 231 ETFs.
- 1-minute, 5-minute, 30-minute, hourly and daily bars since 2000, with splits and dividends as dated events.
- SEC fundamentals point-in-time: each value as first reported, usable after the filing's acceptance time.
- 20,000+ FRED/ALFRED macro series with every vintage kept — ALFRED keeps every vintage of FRED series.
- 13F holdings for every manager since 2013 and CFTC COT positioning since 1986 for context signals.
- A free 12-month tier to evaluate, then one-time history from $195 or per ticker from $19.
import finzdata as fd
# Survivorship-free daily bars, delisted names included
aapl = fd.Ticker("AAPL").history(interval="1d", start="2010-01-01")
# A multi-asset test universe in one call
px = fd.download(["SPY", "QQQ"], start="2010-01-01")
An honest boundary: tick and order-book data
FinzData does not carry tick, order-book or real-time data. If your research depends on message-level detail, queue position or microstructure, you need an exchange-licensed tick vendor such as Databento. See our FinzData vs Databento comparison for where each fits — many teams use both: a tick vendor for execution research and FinzData for survivorship-free daily/intraday history, point-in-time fundamentals and macro vintages.
Putting it together
A defensible backtest combines all of the above: a universe that includes the dead, prices adjusted the way you traded, fundamentals and macro as they were known on the day, and bar sizes that match the strategy's clock. Once the data is right, the remaining risk is your own search process — which is what the deflated Sharpe ratio is for.
FAQ
What is survivorship bias in backtesting?
Survivorship bias means testing only on companies that still exist today. Because failures and delisted names are missing from the sample, the backtest overstates returns. A survivorship-free universe keeps every stock that traded, including delisted ones.
What is point-in-time data?
Point-in-time data stores each value as it was known on each date. For fundamentals that means the figure as first reported, usable only after the filing's acceptance time; for macro data it means every vintage of a series, so a backtest can use the number as first published rather than today's revised figure.
Does FinzData provide tick or order-book data?
No. FinzData provides 1-minute, 5-minute, 30-minute, hourly and daily bars. If your research needs tick-level or order-book data, you need an exchange-licensed tick vendor such as Databento.
What does historical stock data for backtesting cost?
FinzData has a free 12-month tier for evaluation. Full history is sold as a one-time purchase from $195, or per ticker from $19, rather than as an ongoing subscription.