2026年十月13日 · 研究

回測發現 20% 超額報酬:有多少來自一個錯誤時間戳?

回測發現 20% 超額報酬:有多少來自一個錯誤時間戳?

回測年化報酬達 20%。它使用 8 年資料、1,640 筆交易,並採用乾淨的走步式切分。接著,我們把供應商目前的歷史資料換成當時記錄的數值,超額報酬就降到 3%。

令人意外的不是原始報酬,而是其中 17 個百分點仰賴修訂後的資料。這種事後資訊可能藏在經濟數據發布、公司基本面、指數成分,甚至看似簡單的市場欄位中。歷史資料告訴你來源現在怎麼說;時點資料集則呈現你的策略當時可能掌握的資訊。

為什麼事件發生後,歷史資料還會改變?

有些數值一開始是估計值,之後才會修正。週五發布的經濟統計數據,可能在下個月修訂;公司可能重編財報中的盈餘數字;資料供應商也可能修正錯誤報價、補上缺漏區間,或以最終值取代初步數值。只保存最新數值的資料庫,會讓這些變更看起來像是從一開始就如此。

如果策略依據公布營收為公司排名,或在預定數據發布後交易市場,這就很重要。若它提早幾個月看到修正後的數字,回測便給了它決策當下市場上不存在的資訊。訊號計算可能毫無瑕疵,但輸入資料仍然來自錯誤版本的歷史。

這裡有個容易踩到的陷阱:名為 date 的欄位,通常描述的是數值涵蓋的期間,而不是數值何時可以取得。標記為 3 月 31 日的季度營收資料,可能直到 5 月才公布。這個標籤指的是企業營運期間,不代表策略當時掌握的資訊。

回測應該使用哪個時間戳?

請分別追蹤數值的有效期間與可取得時間。可能的話,也要保留發布時間與資料匯入時間。策略只能在數值發布且系統收到後使用;如果兩者時間不同,保守重播時應採用較晚的時間。

時間戳描述內容用途
有效時間數值所指的期間或事件依據測量對象整理觀察值
發布時間來源發布此版本的時間避免資料在發布前就出現
匯入時間系統收到此版本的時間記錄傳遞延遲與晚到的回補資料

例如,假設一家公司的季度銷售涵蓋 1 月到 3 月,於美東時間 5 月 8 日 16:15 公布,並在 16:17 傳入你的研究資料庫。若策略在 5 月 8 日收盤時做決策,而收盤決策時間是 16:00,就不能使用這份報告。若策略在隔天早上決策,則可以使用。光看季末日期,無法回答這兩個問題。

如何測試修訂是否左右了結果?

用同一套策略跑 2 次:一次使用每個歷史決策時間當時可取得的資料版本,另一次使用最新修訂後的歷史資料。固定執行假設、標的範圍與程式碼。兩者差異代表修訂敏感度,而不是另一場策略比較。

接著檢查差異從何而來。績效是否在發布日改變?最大的差異是否集中在幾家重編財報的公司,或少數修正過的觀察值?策略是否在相關資訊發布前就進場交易?一次小規模的事件層級稽核,往往比再畫一張累積報酬圖更能說明問題。

20%使用最新歷史資料的報酬
3%使用時點數值的報酬
17 個百分點修訂敏感度差距

這些數字僅供示意,不代表普遍適用的扣減幅度。真正有用的是針對你自己的策略,盡可能在交易與成本相同的條件下進行成對比較。如果修訂後的版本勝出幅度很大,請先找出造成差異的欄位與日期,再相信回測的醒目數字。

時點資料稽核應記錄哪些內容?

先從策略實際使用的欄位著手。逐一確認來源、時間戳的含義、修訂政策,以及能否取回先前版本。詢問供應商如何記錄更正:覆寫資料列、新增版本資料列,還是使用獨立的稽核紀錄。產品頁上寫著「歷史資料」,並不足以釐清這些問題。

範圍也要訂得實際。如果策略只使用交易所成交資料與 K 線,經濟數據修訂可能無關緊要。但 K 線修正與供應商回補資料仍可能造成影響,尤其當訊號依賴流動性不足的市場或精確的事件時間窗時。

無法取得時點歷史資料時

不要默默把今天的數值當成昨天就已存在。請將該欄位標記為限制,避免用它來支持仰賴歷史可得性的主張,或採用保守的延遲假設,並呈現結果因此改變多少。只要明確說明延遲時間,並在結果中保留這項限制,延遲代理值仍可用於研究。

回測的目的是運用當時存在的資訊集,重建一項決策。如果你的資料只能呈現最新版本,誠實的結論就有其界線:它可以用今天重建的歷史資料測試策略,卻無法證實歷史上的交易者當時確切能看到什麼。

回測資料工程公司行動時點資料
← 所有文章