Delisted stock historical data: why delisted names decide a backtest
Delisted stocks hold the worst returns a long-only backtest never sees. What a delisting record must contain, why ticker joins fail, and how halts and transfers differ.
Delisted stock historical data is the price, listing and event history of securities after they stop trading on an exchange. It matters because delistings are where many of the extreme returns live. A bankruptcy often ends with common shareholders receiving nothing, a takeover ends at the deal price, and a removal for failing exchange rules ends somewhere in between. A price file limited to securities that are still listed drops most of the first group. A long-only backtest over such a file reports a return the strategy could not have earned and skips losses it would have taken.
Why the extreme returns live here
Acquisitions end in cash or in the acquirer's shares, usually at a premium to the price before the announcement. Removals for cause, such as a share price below one dollar, a market value below the exchange's threshold, or a failure to file accounts, end in a large loss that is not always total, because the shares may keep trading off-exchange. Bankruptcy and liquidation usually end at or near nothing for common shareholders, who are last in line, though recoveries are not always zero. A stock's loss is bounded at -100%; the omitted group sits near that bound, and it is what a screen for cheap or beaten-down companies selects.
A long-only strategy that never sees these names loses its worst outcomes, the classic survivorship bias, and its return statistics improve. A short-selling strategy loses the mirror image: the collapses that paid for the book are gone. And the same names carry what some strategies are trying to measure. Merger arbitrage earns the spread between the post-announcement price and the deal consideration, and loses when a deal breaks; neither can be measured without the target's final payout in the sample.
What a delisting record must contain
A row of prices is not an event record. A usable record is keyed to a stable security identity, meaning a specific share class linked to its company, not a ticker, and carries the following.
| Field | Why it is needed |
|---|---|
| Stable security identifier | Attaches the event to the share class, not to a reusable label |
| Reason code | Separates a cash takeover from a bankruptcy |
| Last trading date and removal date, kept separate | The last trade is the last price an exit was possible at; membership ends at removal |
| Final payout | Cash per share, acquirer shares with the conversion ratio, or zero |
| Delisting return | From the last close to the final payout, or explicitly missing, never silently zero |
| Knowledge date | When the event became public |
| Successor security and terms | The acquirer's shares, new equity from a reorganization, or the off-exchange ticker |
| Post-delisting venue | Off-exchange market, or none |
| Amendment flag | A corrected record needs its own knowledge date |
Without the reason code and the final payout there is no way to compute the delisting return when it matters. The tempting substitute, carrying the last price forward, records a total loss as a flat line. Without separate announcement and removal dates the event cannot be replayed honestly, the error described under look-ahead bias.
Ticker reuse breaks naive joins
Tickers are a scarce namespace. They are reassigned after delistings, and off-exchange listings append letters, so a company's post-delisting shares look like a different security to a join on the symbol.
One failure merges two unrelated companies: a join on ticker across a delisting and a reassignment produces one price series with a gap and a jump, and a signal computed across it reads a price path that never existed. The other splits one company in two: a ticker change drops the earlier history. The example below is illustrative.
| Date | Ticker | Company | Close |
|---|---|---|---|
| 2011-03-04 | ABCD | Company A | 0.42, final trade |
| 2011-03-07 | ABCD | none, delisted | no trade |
| 2014-08-11 | ABCD | Company B | 12.10, first trade |
Suppose the pipeline also fills gaps by carrying the last price forward, a second common bug. A twelve-month momentum signal evaluated on 2014-09-30 then looks back to a 2013-09-30 "price" of 0.42, carried forward from Company A, compares it with 12.10, and reports a return of +2,781% on a symbol that did not trade for three and a half years. The fix is to join on an identifier minted once per security and never reassigned, with the ticker as an attribute that carries a validity interval.
The Quantverse databank API resolves a ticker to the security that held it on a given date, using the SEC's recorded ticker tenures: META as of today includes its pre-2022 FB history, and FB as of today resolves to the fund that reuses the symbol. The lineage is served as currently known. The catalog entry is CIK, CUSIP and FIGI mappings.
Delisting, halt and transfer
One real episode can involve more than one of these.
| Event | What happens | What the data must do |
|---|---|---|
| Delisting | The security leaves the exchange; it may stop trading or continue off-exchange | Record the final return, or the successor venue, and the removal date |
| Halt | Trading is paused, usually for pending news or a price limit, and normally resumes the same day | Record a gap and a halt flag, not an exit |
| Transfer | The listing moves to another exchange, or to an off-exchange market; the same share class keeps trading | Same security, new venue, possibly new ticker: one series |
The distinction that matters is continuity: did the same share class keep trading, and at what price could it be sold? A delisting followed by off-exchange trading is both a delisting and a transfer, and the series should continue under the new venue. Booking a halt as an exit closes a position at a stale price. Booking a real end of trading as a transfer leaves a position open at a price no longer available. Splicing a successor's prices onto the old series without the conversion terms invents a return.
A worked example
One illustrative small company, bought at its last regular exchange close, and the return between that price and what shareholders finally received.
| Step | Date | Value |
|---|---|---|
| Last regular close on the exchange, the cost basis | 2011-05-13 | 1.05 |
| Exchange announces the company fails a listing standard | 2011-05-16 | public knowledge |
| Last day of trading on the exchange | 2011-05-20 | 0.31 |
| First day off-exchange, new ticker | 2011-05-23 | 0.31 |
| Liquidation filed; shares later cancelled | 2011-08-09 | 0.00 |
From 1.05 to the final payout of zero, the return is -100%. A series that ends at the 2011-05-20 close books -70% and stops. A pipeline that drops the security's rows on its delisting date and closes the position at its last mark, without recording the terminal move, books whatever had been marked by then; if the position was still marked near cost, it books almost nothing.
Repairing this after the fact needs source data the price file does not contain: delisting returns and dates stored with the event, an identifier that survives the move off-exchange, and an as-of date on every query. That is the model described in point-in-time data.
The Quantverse listings, delistings and halts package is designed to store the three event types as separate dated rows with the delisting return carried through removal. It is listed in the catalog as coming soon. Tier contents are on the pricing page.