Delisted stock data for survivorship-bias-free backtesting
Updated every trading day -- stock data current through 2026-09-09.
Why delisted tickers matter
MarketParquet stock history includes delisted securities, so a backtest is not limited to companies that survived until today. Stock files cover 1-minute, 5-minute, 30-minute, 1-hour, and daily bars back to January 2000.
Stock and ETF prices are split-adjusted: historical prices are retroactively divided by later split factors so series remain continuous and directly comparable. Dividends are deliberately not embedded in the price series -- see the methodology page for why.
Terminal-date workflow
Files are partitioned by trading date under by_date/stock_{timeframe}/YYYY/YYYY-MM-DD.parquet.
Each file contains all symbols for that trading day, including names that later
disappear from active listings.
import polars as pl
df = pl.scan_parquet("by_date/stock_daily/2024/*.parquet")
by_symbol = (
df.group_by("symbol")
.agg([
pl.col("date").min().alias("first_seen"),
pl.col("date").max().alias("last_seen"),
])
.collect()
)
Available stock files
Related
stock data hub · browse stock daily · pricing · intraday stock data · yfinance limitations