2026年十一月10日 · 資料

回測需要的是資料變更記錄,不只是資料快照

回測需要的是資料變更記錄,不只是資料快照

光有一份凍結的市場資料快照,還不足以讓回測值得信賴。它或許能重現相同結果,卻可能掩蓋供應商曾修改產生該結果的輸入資料。

保留快照,也要保存一份變更記錄,讓你查明哪些資料變了、何時變動,以及策略是否受到影響。若研究使用了修正後的成交資料、更新後的基本面、重建的資金費率,或供應商悄悄更新的歷史資料,這點尤其重要。

為什麼可重現的回測仍可能誤導你?

假設你在星期一下載了 5 年的每小時 K 線資料,並執行一個策略。到了星期五,供應商已修正一筆錯誤成交、調整公司行動,或補上資料缺口。你儲存的檔案仍會精確產生星期一的結果。這就是可重現。但如果你改用供應商目前的歷史資料重新執行,結果可能不同,而且你無從得知原因。

問題不只在重大修正。一個被修改的最高價就可能觸發停損;更新後的收盤價可能讓指標跨越門檻。在涵蓋廣泛標的的投資範圍中,一個代號的歷史資料變動,可能改變它的排名,並讓另一項資產被排除在投資組合之外。即使策略程式碼與設定完全相同,最終 Sharpe 也可能漂移。

檔案雜湊能告訴你兩個檔案有所不同,卻不會說明究竟是股票分割調整改變了 40 年的價格、供應商修正了 3 筆成交,還是剖析器把空欄位轉成了 0。

市場資料變更記錄應該包含哪些內容?

在最實用的細節層級記錄變更,並保留足夠脈絡,以便重跑受影響的研究。對 K 線資料流而言,通常需要記錄商品、時間週期、事件時間、變更前後的值、來源,以及你觀察到更新的時間。若供應商提供原始酬載,也要保存下來。

記錄項目保存原因範例
來源版本或擷取時間確認使用的是哪個供應商版本快照擷取時間:2026-11-02 08:15 UTC
變更欄位與舊值/新值呈現實際變動內容ETHUSDT 1h 最高價:3,412.10 → 3,418.60
變更分類區分資料修正與轉換作業延遲成交修正、股票分割調整、回補資料
處理流程與結構描述版本區分來源編輯與你自己的處理作業正規化器 v7、調整後 K 線結構描述 v3

面對大型資料集時,請儲存不可變的快照,以及一份精簡清單,列出快照的校驗碼、來源版本與擷取時間。對有變動的資料分區加上逐列差異。這樣能取得實用的折衷:仍可完整重跑研究,又不必把每一筆未變動資料都複製到另一張稽核表。

如何衡量一項修正是否重要?

別只計算變更了多少列。使用相同程式碼、參數、手續費與執行假設,分別以舊資料和新資料重跑受影響的策略。比較策略決策,以及產生結果的過程。

  1. 從差異資料找出受影響的商品與事件時間。
  2. 找出哪些特徵、訊號、委託或投資組合權重使用了這些紀錄。
  3. 重跑範圍最小且有效的時間窗口,並納入任何回溯期與未平倉部位狀態。
  4. 比較委託、成交、曝險、週轉率、回撤與最終績效。

舉例來說,供應商修正某根 1-minute K 線的最高價 $0.02,可能影響 1,000,000 筆資料,卻不會影響日線動能策略。反之,停損價位上的一根 K 線被修正,就可能造成重大影響。應衡量策略決策受到的影響;變更紀錄筆數並不是理想的替代指標。

請分開看待這兩個問題:「我能用儲存的資料重現結果嗎?」以及「策略當時能取得這個版本的資料嗎?」變更記錄有助於回答兩者,但第二個問題還需要特定時間點的可用性記錄。

這需要多少成本,什麼時候值得投入?

追蹤變更會增加儲存空間、資料匯入工作與營運決策的負擔。供應商可能沒有穩定版本可供查核,有些歷史資料流也會定期重建,卻沒有清楚的修正通知。你無法記錄自己從未觀察到的變更。

從可能改變研究結論的資料著手:停損邏輯使用的 K 線、經公司行動調整的股票資料、特定時間點的基本面,以及經重建的資金費率或未平倉量序列。對廣泛且穩定的資料集,每日清單加上資料分區校驗碼或許已足夠。若更新頻繁,或交易決策對個別紀錄十分敏感,就加入欄位層級的差異。

批評者指出,完整且永久封存供應商每次回應的做法可能成本高昂,仍無法還原資料來源當時掌握的資訊。他們說得沒錯。解方是把稽核範圍限定在重要的資料與決策,並記錄其中的缺口。快照讓你重跑實驗;變更記錄則讓你解釋實驗結果為何改變。

資料工程回測可重現性量化研究
← 所有文章