台股回測衛生 — 用當日已公告的狀態排除,而不是用今天的清單過濾過去
回測裡最貴的謊言是用今天的清單過濾過去。今天還在市場上的個股是已經活下來的那一批,拿它們回頭跑十年,績效自然漂亮——那叫存活者偏誤;更糟的是,用今天才知道的「這檔後來出事了」去剔除歷史樣本,那叫前視偏差。本頁的做法只有一條原則:排除必須以當日已公告的狀態為準。先說命名:backtest-hygiene 是本頁的網址代號,實際端點在 /v1/screener/ 命名空間下,站上並不存在另一個名為 backtest-hygiene 的獨立資料集。也請注意本頁提供的是當日應排除清單,不是保證乾淨的樣本。
backtest-hygiene 與 /v1/screener/ 的對應關係
頁面叫 backtest-hygiene,端點卻在 screener 命名空間下:/v1/screener/hygiene?date=YYYY-MM-DD 回傳當日應排除清單,/v1/screener/hygiene/timeseries 回傳月頻各類排除數量。這是一個命名不同步,我們明講以免誤會。
再說一次:站上並不存在另一個名為 backtest-hygiene 的獨立資料集。backtest-hygiene 是網址代號,資料本體就是 screener 命名空間下的那份排除清單。
清單裡有哪四類,以及怎麼標時間
四類狀態為處置中、注意股票、全額交割、已下市。每一筆都附上狀態、生效區間(起訖日)、與資料截止日;查詢時帶入 date 參數,回傳的是那一天已經公告生效的狀態,不是今天回頭補標的狀態。
月頻端點提供各類排除數量隨時間的變化,可以用來檢查你的樣本在不同年份被排除的比例是否穩定。比例突然變化通常對應制度調整,而不是市場體質變化。
存活者偏誤與前視偏差:為什麼下市個股不能刪
下市個股必須留在歷史樣本裡,直到它下市的那一天為止。把它從整段歷史中事後刪除,等於假裝當年沒有人買過它——這會系統性地高估策略績效。
同理,不可以用今天的處置或注意名單去過濾過去的交易日。當天沒有被公告的狀態,在當天就不存在;把它提前套用,就是把未來資訊塞進過去。
這頁不能拿來做什麼
本頁不選股、不排名、不推薦、不預測、不給目標價。排除清單是樣本處理的輸入,不是投資標的的篩選結果:被排除不代表這檔公司不好,只代表在那一天它處於某個交易狀態。
也請不要把它讀成安全保證:本頁提供的是當日應排除清單,不是保證乾淨的樣本。你的樣本還有很多其他的髒污來源(價格調整、股本變動、資料補登),那些需要你自己處理。