DEV Community

FinzData
FinzData

Posted on Edited on Originally published at finzdata.com AI-assisted

Survivorship bias doubled our momentum backtest. Here are the numbers.

If you backtest stock strategies on a list of today's tickers, your results are too good. The list leaves out every company that went bankrupt, was bought or was delisted, so your strategy never holds the losers that disappeared. That is survivorship bias.

Everyone has heard of it. Few people measure it. We did, on three common strategy setups, and the answer surprised us: the bias ranged from 1.25 to 3.66 points a year.

Disclosure: we build FinzData, the data and backtest service used here.

The setup

Each test runs the same strategy twice, January 2005 to October 2026:

  1. Point-in-time: the universe on each date is every US stock that actually traded that day, delisted names included.
  2. Survivors only: the same universe, minus every stock that is no longer trading today. This is what you get from a current ticker list.

Each strategy holds the top 100 names by its signal and pays 10 basis points of trading costs. Momentum rebalances monthly and reversal weekly.

The results

Strategy CAGR, point-in-time CAGR, survivors only Bias $1 became (PIT vs survivors)
12-1 momentum, top 3,000 6.89% 10.55% +3.66 pts $4.28 vs $8.92
12-1 momentum, top 1,000 7.18% 8.43% +1.25 pts $4.54 vs $5.85
1-week reversal, top 1,000 8.53% 11.48% +2.95 pts $5.97 vs $10.72

What we learned

The bias grows with the universe. Momentum on the top 1,000 stocks was inflated by 1.25 points a year. On the top 3,000 it was 3.66 points, and the survivors-only test dropped 5,997 stocks. Smaller companies delist more often.

Strategies that buy losers get hit hardest. One-week reversal buys last week's worst performers. Some of those later delisted, and survivors-only data quietly removed them.

The size depends on the strategy. Across these tests it ranged from 1.25 to 3.66 points a year. You cannot assume a fixed haircut; you have to measure each strategy.

Your benchmark is biased too. The equal-weight top-1,000 benchmark returned 7.36% a year point-in-time and 8.67% survivors-only. A survivors-only test flatters the strategy and the yardstick at the same time.

A weak idea can look fine. Point-in-time, 12-1 momentum on the top 3,000 trailed its equal-weight benchmark by 5.96 points a year. On survivors-only data the gap shrinks to 3.80 points.

Run it yourself

Every number above came from one call each to a survivorship_audit tool, which runs both versions and reports the difference. The easiest way to try it is from an AI assistant. In Claude Code:

claude mcp add --transport http finzdata https://api.finzdata.com/mcp
Enter fullscreen mode Exit fullscreen mode

Then ask: "Run a survivorship audit on 12-1 momentum, top 3,000 US stocks, 2005 to today." The same server works in Claude, ChatGPT and Cursor. No sign-up is needed for the last 6 months of data; a free key gives 12 months.

What else is in FinzData

The whole market, remembered: every one of the 16,000+ US stocks that has traded on the NYSE and Nasdaq in the last 26+ years, delisted included, point in time. Around them: 139 futures markets with every contract since 2007, the VIX and Cboe volatility indexes with the VIX futures curve, options-market gamma for single stocks, ETFs and the major indexes, 5,100+ ETFs, and crypto since 2015. Macro exactly as it was known: 22,700+ series including CPI, payrolls, wages, GDP and the Treasury yield curve, every vintage kept. Plus COT positioning since 1986. Bars at every resolution you backtest on: tick, 1-minute, 5-minute, 15-minute, 30-minute, hourly and daily, with tick-level trades on the Institutional plan. In pandas with one line: pip install finzdata.

Also in the same API: options chains, 79 FX pairs, 123 indexes, 13F holdings, insider trades, short interest, SEC fundamentals as filed, congressional trades, election spending, FINRA margin debt, ship transits through 28 chokepoints, and the Global Macro Pulse and Quantitative Model.

Full write-up with run IDs for replay: https://finzdata.com/research/survivorship-bias-backtest-case-study

Historical simulations, not investment advice.

Top comments (0)