Reducing survivorship bias in stock backtests
Reducing survivorship bias requires selecting stocks using information available at each historical decision date, including eligible securities that later delisted. Delisted price histories support that work; historical eligibility, security identity and the value of positions after delisting still need to be established.
What is survivorship bias in a stock backtest?
Survivorship bias occurs when a historical stock study selects securities because they remained listed at a later date, excluding otherwise eligible securities that delisted. Using today's listed stocks to reconstruct an earlier investment universe introduces future information into historical selection, a form of look-ahead bias.
Excluding delisted securities changes the investments a strategy could have held. The size and direction of the return distortion depend on the strategy, weighting, period and reasons for exit. A delisting can follow an acquisition, failure or other event; it does not imply a total loss, and the number of delisted securities alone cannot measure the bias.
For example, a backtest starting in 2010 with today's stock list omits a security that was eligible in 2010 but delisted in 2015. Apply the strategy's historical entry and exit rules to that security, and account for its delisting outcome if the portfolio still held it.
How should a backtest handle reused stock tickers?
A stock ticker can be reassigned to an unrelated security after a delisting, while a continuing security can change its ticker. Joining price histories by symbol alone can create a fictitious return between unrelated investments. A company identifier also needs care: one issuer can have several distinct share classes or securities.
Retain source filenames, coverage dates and available issuer, security and listing metadata. Keep distinct securities separate, and link ticker changes only when the evidence supports continuity of the same investment. An internal identifier records that decision; assigning an identifier does not resolve an ambiguous history.
HistoricalData.net separates stock listing lifetimes using available source records and documented processing rules. A filename or price gap alone is not conclusive identity evidence; incomplete metadata and corporate reorganisations can require additional investigation. See stock coverage and reused-symbol limits.
How do you build a historical stock universe?
A historical stock universe is the set of securities eligible for a strategy on each decision date. Reconstruct eligibility from information available at that time. An archive's current active or delisted status describes the published inventory, not eligibility on every past date.
- Start with covered histories
- Include relevant active and delisted securities. A file's first date is not necessarily the IPO date, and its last date is not necessarily the official delisting date.
- Use past observations
- Apply price, volume and other filters using observations available before the simulated order. A signal requiring the final closing price cannot assume execution at that same close.
- Avoid future-data filters
- Requiring a price record on every date through the end of a backtest excludes securities that delist during the test. Apply any minimum-history rule using only the history available at the decision date.
- Use dated index membership
- For an S&P 500 or other named-index strategy, use historical constituents and membership effective dates. An announcement-based signal also needs the time the announcement became available.
- Record eligibility changes
- Log why each security entered or left the universe. Distinguish a strategy exit, delisting, missing observation and failed data-quality check.
Strategies using financial statements, market capitalisation or sector classifications need dated inputs with an appropriate publication-time basis. Historical stock price files alone do not provide those inputs or historical index membership.
How should a backtest value a delisted position?
The last recorded stock price is not necessarily the final value received by a shareholder. After a delisting, a holding may become cash or another security, continue trading elsewhere, become worthless or receive a later recovery. A backtest must retain and account for the position when its price series ends.
- Documented proceeds
- Record cash payments or replacement securities, their timing and the supporting source. A later payment must not become spendable portfolio cash before it was available.
- Unresolved outcome
- State the valuation assumption and compare plausible alternatives. Do not silently assign an unknown terminal value to zero or the last close, or assume the position could have been sold at its last recorded price.
- Missing observations
- Check the trading calendar, halts and coverage before classifying a price series as terminated. A carried valuation is an accounting assumption, not evidence of an executable trade.
HistoricalData.net stock files do not provide delisting reasons, acquisition terms or a complete terminal-return series. Research requiring the investment's value after delisting needs additional corporate-action or security records, or explicit assumptions for unresolved outcomes.
How do stock adjustments affect return accounting?
Stock backtests need a stated return convention: price return or a return including distributions, with explicit treatment of cash and reinvestment. Returns calculated from dividend-adjusted price ratios are not automatically identical to returns calculated from explicit dividend cash flows. Adding the same dividend again to an already dividend-adjusted return double-counts the distribution.
A stock split changes the share count and price per share. A backtest using raw transaction prices must adjust the position quantity consistently. The raw price change across a split alone is not the investment's gain or loss.
HistoricalData.net per-security stock files contain raw prices, split- and dividend-adjusted adj_* values, and recorded event columns. Later corporate actions or corrections can revise earlier adjusted values. Historical dollar-price eligibility filters should use the price basis available on the decision date; today's adjusted price level may reflect later events. See the stock adjustment method and return-accounting checks.
How can you test sensitivity to exclusions?
A survivorship-bias review should report eligible securities, exclusions and unresolved delisting positions by period. Where data permits, compare results with and without important exclusions, holding strategy parameters, execution assumptions and other modelling choices constant.
Useful diagnostics include a survivor-only universe comparison, alternative valuations for unresolved delistings and inspection of large returns at security-identity boundaries. Report changes in returns and drawdowns alongside the number and weight of affected positions. A small difference in one test does not establish that the archive or backtest is free of bias.
Preserve each backtest's input files, manifest, security mappings, universe rules and terminal-value assumptions. Retained inputs make changes caused by data revisions distinguishable from changes in the model.
What does the HistoricalData.net stock archive provide?
HistoricalData.net provides daily and 1-minute price histories for covered active and delisted US securities, including stocks and ETFs. The stock archive begins on 1 October 2003; the available date range varies by security. Securities delisted before the archive start are outside its coverage.
- Price and event data
- Per-security stock CSV files contain raw and adjusted fields with recorded split and dividend events. Retained delisted histories allow researchers to include covered securities that a current ticker list would omit.
- Separate research inputs
- The stock archive does not supply historical index constituents, historical fundamentals, delisting reasons, acquisition terms or a complete record of terminal investment proceeds.
- Coverage and identity
- Check the securities and dates needed for the strategy. Listing-history separation depends on available records and processing rules; neither a coverage count nor a separated filename establishes that every historical security and identity is complete.
The HistoricalData.net stock sample covers July–December 2022 and includes TSLA's split, KO and SPY distributions, and TWTR's final price rows in the archive. The sample tests event handling and a series ending before the sample period ends. TWTR's price rows do not establish the full merger settlement or terminal investment return.