Take today's S&P 100. Test any strategy on those 100 names going back ten years. It will look better than it should.
Why? Today's list is the companies that survived and grew. The ones that shrank, were taken over or failed dropped out along the way. Testing on today's list means your past quietly skips every loser.
Two examples from our own data
A delisted stock. Walgreens Boots Alliance (WBA) left the US market during our data period. If we'd built the universe from current listings, it would vanish from history. We keep its SEC identifier in a list of "extra" companies so its filings stay in the past data.
A renamed ticker. BNY Mellon changed its ticker from BK to BNY in 2026. Join on today's ticker and the old history disappears. Small things like this silently shrink a dataset in a biased way.
Where we couldn't fix it
Our India history uses today's Nifty 50 members. We don't yet have point-in-time membership for past years. That makes the India backtest look better than real time could have, and we say so on the research page wherever it applies.
Being open about a bias you couldn't remove is better than hiding it.
How to reduce it
- Use point-in-time index membership: the list as it was on each date.
- Keep delisted companies and their full price and filing history.
- Map ticker changes to a permanent ID (CIK for SEC filers, ISIN elsewhere).
- When you can't, say so next to the result.
The question to ask
When you see a backtest on "the S&P 500 since 2010", ask: which S&P 500? The one in 2010, or today's?
From Quantooo Lab, the makers of quantooo.com, a free, open and educational quant lab: every formula, every test and every failure is public. See it here: https://quantooo.com/research
Educational, not investment advice.
