Does my backtest have survivorship bias?
Asked as: does my backtest have survivorship bias
You cannot tell from inside the dataset. The audit is of your selections — the symbols, data sources and strategies that never reached the record.
The short answer
Probably — and the more useful answer is that you cannot find out by looking at the dataset. Survivorship bias is a defect made of absence: the rows that would convict it were never written, so every internal check passes — a check can only inspect the rows that exist. The audit is not of your data. It is of your selections — what was available, what survived to be included, and what left no trace of having been excluded.
That reframing matters because the standard telling of this subject sends a forex trader to look in the wrong place, for a mechanism their backtest mostly does not have, while the doors it actually came through stand open behind them.
The Observable Mechanism
From your own records, without any external data: the list of symbols, timeframes and parameter sets you tried before settling on the one you are testing — if you kept it, which almost nobody does. From your platform and vendor: which instruments and date ranges are available to download today, against which ones you know existed. Each enumeration is a denominator, and the audit below is the attempt to write them down.
The equity story is the wrong map
The way this subject is taught, one mechanism stands in for the whole phenomenon: build a backtest on today’s index constituents and the stocks that delisted are missing, so every long strategy tests better than it would have traded. The story is true, and for an FX trader it is close to useless — currency pairs rarely die the way companies do, so a trader who checks their backtest against the delisting story finds nothing and concludes the bias is absent.
The conclusion does not follow, because the bias is not a fact about delistings. It is any filtering done by attrition, upstream of your analysis, that left no record of what was removed. In a retail FX backtest that selection enters through three doors, and none of them looks like a delisted stock.
The instrument door. Feed histories exist only for venues that survived to serve them. A broker that shut down took its history with it; a vendor that retired an awkward symbol removed its past along with its present; the data you can download today is the data that something chose to keep serving. Which version of history you get is itself venue-shaped — why do two data feeds give different backtests is that subject — but before any two feeds can disagree, the set of feeds that still exist has already been filtered once.
The strategy door — the wide one. By the time a configuration reaches a serious backtest, it has survived a sequence of informal trials: symbols that looked worse, timeframes that were abandoned, parameter sets discarded in a demo and forgotten. Those variants are the strategy pool’s failures, and they are as absent from your final record as a dead company is from today’s index. This door connects survivorship to its downstream twin: backtest overfitting is fitting to noise that is present in the data, survivorship is noise that is absent from it, and the discarded-trial count that how to test a backtest for overfitting asks you to bring is precisely a survivor count from this door.
The record door. Every external record you benchmark against — published strategy results, copy-trading leaderboards, the accounts people link in forums — is a pool whose failures removed themselves. Records that went bad get deleted and restarted; accounts that died stop being linked. What remains visible is the surviving tail of a population whose size nobody wrote down, which is why how do you verify a trading track record treats a record’s existence as the weakest kind of evidence about it.
The Absent Denominator
The three doors share one arithmetic, and naming it is what turns a warning into an audit.
Every statistic computed from a survivor-only record is a numerator whose denominator left no row behind. The backtest return is the numerator; the denominator is every configuration that was tried. The visible leaderboard is the numerator; the denominator is every account that started. The downloadable history is the numerator; the denominator is every feed that once existed. In each case the number in front of you is real — and meaningless in proportion to how much of its denominator is missing, because the missing part did not leave at random. It left by failing.
That is the absent denominator, and it has one property worth engraving: it cannot be recovered from the numerator. No amount of analysis on the surviving data reconstructs the population it survived from. The denominator either was written down at the time, by someone with the discipline to record what was tried before knowing how it would end — or it is gone.
Which is why the one structural defence is to write the denominator down before the outcome exists. That is what pre-registration is, seen from this angle: a denominator fixed in advance, so no later failure can quietly leave it. It is also the reason this site’s own kill ledger publishes its dead hypotheses against the full registry count rather than alone — a kill count without its denominator is a marketing figure, and the register is the denominator, written before the verdicts arrived.
The audit, step by step
Each step is an enumeration, and each can end honestly in either of two ways: a written denominator, or a written admission that the denominator is unrecoverable. Both are findings. Silent optimism is the only wrong result.
- The strategy door first, because it is yours. Write down every symbol, timeframe and parameter family you tried before the configuration under test, as honestly as memory allows. If the count is a reconstruction rather than a contemporaneous record, mark it as one — a remembered denominator is a floor, not a measurement. From today forward, keep the log the overfitting article calls the Search Receipt; it is this audit’s raw material, kept as it happens instead of excavated afterwards.
- The instrument door. List the data sources your test depends on and establish, for each, what governs its historical coverage: how far back it reaches, which instruments were retired or renamed, whether gaps are documented or silent. Where the vendor cannot answer, record that the coverage policy is unknown — that sentence is itself a provenance finding, and tick data provenance is the discipline it belongs to.
- The record door. For any external record your confidence leans on, ask what population it survived from and whether that population’s size was recorded anywhere. If it was not — and for leaderboards and forum records it never is — treat the record as an existence proof, not a performance estimate.
- Close with the status line. For each door, one sentence: denominator recorded, denominator bounded from memory, or denominator unrecoverable. A backtest with three honest status lines attached is a different object from the same backtest without them, whatever the equity curve looks like.
The step this audit cannot perform is quantification. A recovered count establishes that the bias is present; how large it is depends on how the departed members performed, and their performance departed with them. Where the denominator is gone, the honest status is unquantified, not absent — the same terminus the glossary entry reaches, arrived at here from inside your own workflow.
What This Does Not Establish (The Limits)
This article is method. I have measured and published no survivorship figures — no vendor comparison, no coverage census, no estimate of how much any dataset’s absences flatter it — and no such number appears on this page. It names no vendor and no broker.
The audit establishes presence and provenance, never magnitude: a written denominator tells you what the record survived from, not what the missing members would have contributed. And the strategy-door step depends on your own honesty about your own search — nothing external can verify a trial count you did not keep, which is exactly why it is worth starting to keep one now. Status of my own measurements: NOT YET COMPUTED. Hadal carries no affiliate links and takes no commission from any vendor.
Where the measured version publishes
Steps two and three run into the same wall: they need to know what a dataset actually contains, how it has been altered since capture, and whether its structure betrays a history its documentation does not mention. That examination — gap patterns, retired-symbol seams, point-in-time violations detectable from structure, a content-hash manifest pinning the audited file to its report — is the Data Forensics instrument. Its companion on the strategy door is the Overfit Auditor, because a trial count and a survivor count are the same number seen from opposite ends. Both are pre-launch, and both carry outputs marked NOT YET PUBLISHED.
The upstream disciplines are point-in-time data and the Knowable Set — what could actually have been known on the date being simulated — and the downstream consequence of ignoring them is the subject of why do backtests fail in live trading.
If you want the analysis rather than the checklist: read what the Data Forensics instrument measures, and the block stating what it does not establish. It is pre-launch and nothing is for sale.
Claims examined
Claim 01§ claim-82a60168
Survivorship bias doesn't apply to forex, because currency pairs don't go bankrupt.
The claim mistakes one mechanism for the phenomenon. In equities the classic entry point is the delisted stock, so the lesson gets taught with delistings — but the bias is any filtering that attrition finished before you opened the file. A retail FX backtest inherits it through different doors: feed histories that no longer exist because the broker that produced them no longer exists, instruments a vendor stopped carrying, and — the widest door — the strategies that failed earlier in your own search and left no record of having been tried.
Claim 02§ claim-2118ce22
My data vendor is reputable, so my dataset is survivorship-free.
Reputation is a statement about a vendor's intentions, and survivorship does not require any — the selection is performed by attrition, upstream, long before the file reaches you. A vendor can be scrupulous and still carry only the instruments that survived to be carried. Whether a specific dataset is affected cannot be established from the dataset, because the defect is an absence: nothing inside the file marks the rows that are not in it.
Claim 03§ claim-a4c33ef9
My backtest only trades one pair, so there is no universe to be biased.
The claim is true about the instrument dimension and silent about the one that usually matters more. By the time a strategy reaches a serious backtest it has typically survived a sequence of informal trials — symbols that looked worse, timeframes that were abandoned, parameter sets that never made it out of a demo. Those discarded variants are the strategy pool's failures, and they are as absent from the final record as a delisted stock is from today's index. The single-pair framing does not remove the universe; it hides where the universe was.
Each claim above has a permanent address — the § link — whose canonical home is the refutation index, where it carries its variant phrasings and the true proposition stated on its own feet; this article is the evidence behind it. If a claim's text ever changes, it becomes a new claim at a new address, and the old one stops resolving rather than silently meaning something else.
Explore further
Instruments
Concepts
Research
- Why do two data feeds give different backtests?Asked as:
why does my backtest give different results with different data feeds
- Why do backtests fail in live trading?Asked as:
why do backtests fail in live trading
- Why does my backtest use data that did not exist?Asked as:
why does my backtest use data that did not exist yet