Taiwan backtest hygiene — exclude by what was announced that day, not by today's list
The most expensive lie in backtesting is filtering the past with today's list. The names still trading today are the ones that survived, and running them back ten years flatters any result — that is survivorship bias. Worse still is removing historical rows because you now know a name later blew up: that is look-ahead bias. This page follows one principle: exclusions must follow the state announced on that day. On naming: backtest-hygiene is this page's URL slug while the endpoints sit under the /v1/screener/ namespace, and no separate dataset called backtest-hygiene exists on this site. Note too that what we provide is a same-day exclusion list, not a guarantee of a clean sample.
How backtest-hygiene maps to /v1/screener/
The page is called backtest-hygiene while the endpoints live under the screener namespace: /v1/screener/hygiene?date=YYYY-MM-DD returns the same-day exclusion list and /v1/screener/hygiene/timeseries returns monthly counts by exclusion type. That is a naming mismatch and we state it plainly.
To repeat: no separate dataset called backtest-hygiene exists on this site. backtest-hygiene is the URL slug; the data itself is the exclusion list under the screener namespace.
The four states, and how time is labelled
The four states are under disposition, on the attention list, full-delivery settlement and delisted. Each row carries its state, effective range and as-of date, and passing a date returns the states that had already been announced on that day rather than states back-filled from today.
The monthly endpoint shows how the count of each exclusion type moves over time, which lets you check whether the excluded share of your sample is stable across years. A sudden shift usually reflects a rule change rather than a change in market quality.
Survivorship and look-ahead: why delisted names stay
Delisted names must remain in the historical sample up to the day they were delisted. Deleting them retroactively across the whole history pretends nobody ever bought them, and that systematically overstates strategy performance.
For the same reason you must not filter past trading days with today's disposition or attention list. A state that was not announced on a day did not exist on that day, and applying it early is exactly how future information leaks into the past.
What this page must not be used for
No screening, no ranking, no recommendations, no forecasts, no price targets. An exclusion list is an input to sample construction, not a verdict on companies: being excluded does not mean a company is bad, only that it was in a particular trading state on that day.
Nor should it be read as a safety guarantee: what we provide is a same-day exclusion list, not a guarantee of a clean sample. Your sample has other sources of contamination — price adjustments, share count changes, late data postings — and those remain your responsibility.