Market-data tradeoffs · Survivorship

Dead ETFs are part of the backtest

A provider can handle today’s delistings well and still erase yesterday’s failed funds. Historical absence is a separate data-quality problem from an inaccurate terminal price.

Survivorship bias is usually described as choosing today’s winners and forgetting companies that disappeared. Market-data APIs can introduce the same bias before a strategy selects anything: a dead security may simply return no history.

An empty response looks safer than a wrong bar, and for many live applications it is. In a historical simulation, however, erasing the whole series removes the very failures the test is supposed to include.

1. See the invisible failure

Suppose an ETF strategy forms a portfolio from every eligible fund on the first trading day of each month. If the data source now returns only funds that survived, the old candidate sets are already contaminated. The code can have perfect signal timing and still overstate performance because liquidated products never reach the first filter.

This failure is harder to notice than a price spike. A malformed bar appears in a chart or a continuity test. An absent instrument produces no row, no exception, and often no reason to investigate unless the researcher maintains an independent universe census.

2. Measure retention by instrument class

StockQL tested a labeled 70-symbol delisting sample on August 20, 2026. Financial Modeling Prep handled delisted common stocks well: in 51 cases, the series stopped within days of the last real trade. But seven liquidated ETFs or funds returned no history at all, including NETX, MUD, DJTU, DKNX, and SMCL. The provider’s delisted-company catalog also began only on October 31, 2023.

EODHD retained the dead series in this sample, although some terminal data needed lifecycle or price-quality review. That creates a real tradeoff. A retained but questionable series can be quarantined, compared, or repaired. A series that is absent from the source cannot be reconstructed from that source alone.

The sample does not establish a timeless score for either vendor. It establishes a testable defect class: retention must be measured separately for common shares, ETFs, closed-end funds, preferreds, warrants, and any other instrument a strategy admits.

3. Reconstruct the historical universe

A survivorship-safe store needs more than old prices. It must preserve the membership facts that determined eligibility at the time:

  • Keep delisted instrument rows instead of deleting them.
  • Record a civil delisted_at date separately from the last price date.
  • Preserve old ticker tenures when a symbol is reused.
  • Store dated availability transitions instead of overwriting state without history.
  • Build each backtest universe as of the simulated date, not from the current active-symbol list.

StockQL follows that shape. Delisted rows remain addressable; old tenures survive ticker reuse; current screens can exclude inactive or stale instruments while historical research still sees the evidence that existed then.

4. Compose retention and lifecycle evidence

For survivorship-sensitive ETF research, StockQL favors the source that retains historical series, then uses additional catalogs and current prints to judge lifecycle state. For common-stock terminal accuracy, the relative strength can reverse. The product does not force one provider ranking across both domains.

A practical QA run starts with an independent list of securities known to have closed or liquidated, requests their full histories, and records three outcomes: retained, present but suspect, or absent. Repeat the census over time. “No data” is a result that belongs in the audit, not a row to drop before counting.

Next: why a split can rewrite years of adjusted prices →