Answer

This answer is currently available in Chinese only; an English version is coming soon.

台股下市股的歷史股價要去哪裡找?

官方免費來源與多數台股資料集,都只提供「今天還在掛牌」的股票。一檔公司下市之後,它的歷史股價通常就從資料裡整個消失,於是你的回測宇宙只剩活下來的公司,報酬被系統性高估——這就是倖存者偏差。TW Market Data 保留 311 檔已停止交易個股的完整日線價史(其中 262 檔帶有官方登記的下市日期),回溯至 2004-02-11,所以你可以查任何一檔已下市代號,看到它當年真正的成交價。

為什麼查不到下市股的歷史股價

這不是資料源做壞了,而是它們的設計目的不同。交易所的公開端點回答的是「現在市場長什麼樣」:TWSE 的當日行情端點只回傳當天有掛牌的標的,公司基本資料端點也只列現存公司。一家公司終止上市之後,它就不再是「現在的市場」的一部分,自然從回傳裡消失。對看盤、對報價,這完全合理。問題只在你要回頭看歷史的時候才出現。

倖存者偏差怎麼把回測做漂亮

假設你在 2010 年用某個選股條件挑 50 檔股票,然後用今天拿得到的資料回測到現在。如果資料裡不含後來下市的公司,那些真正歸零、下市、被合併的標的就從來沒進過你的投資組合——但在 2010 年當下,它們是你選得到的。回測因此只讓你在「事後證明活下來的公司」裡挑,報酬被墊高、最大回撤被壓低,而且不會有任何錯誤訊息告訴你這件事。這是回測最安靜也最致命的偏誤之一。

  • 報酬被高估:失敗的標的不在樣本裡,虧損沒有被計入。
  • 風險被低估:真正的尾部事件(下市、全額交割、長期停牌)從歷史中消失。
  • 選股條件被高估:任何在當年會選到後來下市公司的條件,看起來都比實際安全。
  • 不會報錯:資料看起來完整、程式跑得順,錯誤只反映在結論上。

我們保留了什麼(可以自己驗)

上市個股日線自 2004-02-11 起,涵蓋 1,682 檔、約 5.2 million 筆。其中 311 檔是已經停止交易(下市、終止上市或長期停牌逾 90 日)的個股,它們的價史沒有被刪除,而是完整留著;262 檔另外帶有官方登記的下市日期,可以直接拿來當作宇宙成員資格的截止點。這些數字取自資料庫實測快照,不是估算。

怎麼查一檔已下市代號

查法和查一檔正常股票完全一樣,換掉 symbol 就好。要注意的是:免金鑰試用的五檔(2330、2317、2454、0050、2603)都是仍在交易的股票,所以要查已下市標的需要帶 API key。回應裡每一筆都帶 source_role 與來源軌跡,可以逐欄回推它來自哪個官方端點。

# 查一檔已停止交易個股的完整價史(需帶 key)
curl "https://api.twmarketdata.com/v2/datasets/twse-daily-price?symbol=<已下市代號>&limit=5" \
  -H "X-API-Key: $TWMD_API_KEY"

# 先用免金鑰的五檔確認欄位與回應格式
curl "https://api.twmarketdata.com/v2/datasets/twse-daily-price?symbol=2330&limit=5"

怎麼建一個不偷看未來的宇宙

有了下市日期,宇宙就能按日期重建:在任一個歷史交易日,只納入「當時尚未下市」的標的,而不是用今天的清單回頭套。實務上有三個步驟。

  • 取得證券主檔與官方下市日,作為成員資格的時間邊界。
  • 對每個回測日,篩出當日仍在交易的標的,而不是沿用今天的名單。
  • 價格序列直接取用保留下來的歷史價史,不需要為已下市標的另外補資料。
curl "https://api.twmarketdata.com/v2/datasets/security-master?limit=5" \
  -H "X-API-Key: $TWMD_API_KEY"

資料缺口怎麼處理

另一個會安靜污染回測的做法,是把缺漏的價格用內插或前值補平。補過的序列不會報錯,只會讓結果看起來比實際好,而且事後很難察覺。我們的做法是保留缺口並標示出來,寧可讓你看到一個洞,也不給你一個看不出來的假值。詳細的來源與量測方式寫在資料方法論頁。

Related