Survivorship-bias-free Taiwan equity data

Most Taiwan price datasets silently drop companies once they stop trading, which inflates backtest returns through survivorship bias. TW Market Data keeps the full daily price history of the TWSE universe — 1,687 stocks and 5.2 million daily rows since 2004-02-11 — including 311 stocks that have since stopped trading (delisted or long-suspended), 264 of them with an official delisting date. So your universe as-of any past date reflects what was actually tradable then, not just today's survivors.

What survivorship bias is and why it distorts backtests

Survivorship bias occurs when a dataset silently drops companies that stopped trading, so a backtest only sees today's survivors. That inflates returns and understates risk, because the failures that would have hurt the strategy are missing from the historical universe.

What you need for a point-in-time universe

Reconstructing the universe as-of a past date requires the price history of stocks that later stopped trading, plus a last-trading-date / delisting reference, so the universe reflects what was actually tradable then rather than what still trades today.

How TW Market Data handles stopped-trading names

The TWSE daily price series retains 311 stocks that have stopped trading (delisted or long-suspended for more than 90 days), 264 of them carrying an official delisting date. Coverage runs from 2004-02-11, and TPEx daily prices go back to 1994-01-05, so you can reconstruct a point-in-time universe rather than only today's survivors.

Common questions

1Do you include delisted / stopped-trading stocks?
Yes. The TWSE daily price history retains 311 stocks that have stopped trading (delisted or long-suspended), 264 of them with an official delisting date, so backtests can be survivorship-bias-free.
2How far back does the Taiwan price history go?
TWSE daily prices go back to 2004-02-11 (5.2 million rows across 1,687 stocks); TPEx daily prices go back to 1994-01-05.
3Why do free datasets usually lack delisted companies?
Because the official company-profile endpoints publish the currently traded universe. A company that has stopped trading simply stops appearing, so a universe rebuilt from today's file contains only today's survivors — the bias is introduced by the collection method, not by any single dataset.
4How do I build a point-in-time universe?
Take the price history including stopped-trading names, then filter each date's universe to the stocks actually trading on that date using the last-trading or delisting reference. Never rebuild the historical universe from a current-day listing file.

Want to query this data yourself? Create a free account.

Related articles