2026年十一月8日 · 研究

你的回測可能太容易重現

你的回測可能太容易重現

完美可重現的回測,可信度可能還不如結果略有波動的回測。可重複性只能證明你能兩次得到相同答案,卻無法說明這個答案是否仰賴某個任意的資料快照、函式庫的小毛病,或未明說的預設值。

這聽起來像是在反對可重現性,其實不是。我們要固定一次執行的條件,才能說清楚它;接著,再刻意變動那些不該左右結果的假設。第一步讓結果可供稽核,第二步則檢驗結果是否有意義。

可重現的回測究竟能證明什麼?

如果相同的程式碼、資料、設定和隨機種子,每次都產生相同的交易和指標,就代表我們已控制一項重要的混淆來源。這樣就能比較某個 agent 的「改進」與它的母版本,也能將修正錯誤和變更手續費方案區分開來。團隊同事可以檢視同一份帳本,並找到相同的成交紀錄。

但結果仍以所有固定下來的條件為前提。想像一個加密貨幣策略,使用的歷史檔案包含 1 分鐘 K 線。你記錄檔案雜湊、固定程式碼,每次重跑都得到 1.4 的 Sharpe。如果供應商之後修正了幾根 K 線,這種乾淨的可重現性描述的仍是舊檔案。它無法告訴你訊號在修正後的歷史資料中是否依然成立,也無法說明當時是否能取得那些經過修正的 K 線。

雜湊很有用,因為它讓依賴關係一目了然。但它無法證明這項依賴無傷大雅。

固定執行條件,檢驗研究發現

我習慣把兩個問題分開來看:我們能否重建這次一模一樣的執行?研究結論能否經得起合理的變動?第一個問題需要不可變更的紀錄,第二個則需要一次只改一項條件,進行有控制的擾動。

應記錄的項目之後可變動的項目可能揭露的問題
原始資料版本與檢查碼供應商修訂版或第二個資料來源是否依賴修正後或特定供應商的數值
程式碼提交版本與套件版本數值等效的另一種實作對運算順序、四捨五入或函式庫的敏感度
手續費、資金費率與成交假設合理可辯護的成本範圍微薄優勢是否仰賴異常有利的執行條件
交易標的範圍與特定時點的成員資格其他符合資格的市場規則是否依賴納入或排除標的的決定

例如,假設某個期貨策略在基準重播中呈現年化超額報酬 8%。重新執行時,將 taker 成本調高 25%、把資金費率移到下一個實際觀察到的結算時點,並依序移除貢獻最大的兩個標的。這不是三種改善模型的方法,而是三項探測:每一項都在檢驗某個合理的細節是否撐起了醒目的結果。

每項探測都要分開進行。如果同時更動資料、手續費方案和執行時點,結果變差時就很難診斷原因。如果某項探測不切實際,就要標示為壓力情境,別把它說成最可能的結果。

別把逐位元相同誤當成數值正確

有些計算對運算順序很敏感。浮點數加法不具結合律,因此以不同順序加總許多筆小額損益,最後幾位數可能會改變。平行歸約、硬體和函式庫版本都可能影響精確輸出。通常這無傷大雅,但有時微小的數值變化會越過門檻、改變部位,讓模擬後續走上另一條路。

因此,我會同時保留精確的產出物,以及供比較使用的容許誤差。記錄交易帳本,而不只記下最終 Sharpe。先比較交易決策與現金流,再依照明確設定的容許誤差比較指標。如果差 1 美分就會改變是否送出委託,就要明確檢查那個邊界。

一份實用的執行紀錄,應包含資料和程式碼的識別資訊、設定、隨機種子、執行環境,以及足夠的中間產出,讓人能從指標一路追溯到成交紀錄和現金流。只有最終分數,稱不上可重現的研究產出物。

何時只是雜訊,何時代表發現

數值變動不一定都代表問題。不同的歸約順序造成指標些微漂移,交易可能完全不變。若門檻附近的交易發生變化,就值得檢視。如果供應商只修訂一小段歷史資料,策略結果就大幅縮水,那麼即使原始執行完全可重現,我們也已從中看見策略本身的脆弱性。

穩健性檢查的批評者有一點說得沒錯:人們很容易不斷更改假設,直到偏好的策略看起來夠穩健;也可能因為某個刻意設得極端的情境會讓策略失效,就否定原本可靠的結果。事先界定合理的變動、完整呈現所有結果,並區分一般替代情境和壓力情境。接著保留基準版本,讓其他研究者能精確重現你看到的結果。

可重現性提供可靠的起點。接下來真正有用的問題是:當執行條件周遭的環境以合理可預期的方式改變時,答案的哪些部分仍然不變?

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