把資料弄得更差之後,回測看起來可能反而更有說服力。刪掉難看的成交紀錄,用整齊的價格補上缺口,Sharpe 也許就會上升。這種改善可能是個警訊:清理規則或許抹去了策略賴以存活的市場狀況。
資料品質很重要。交叉報價或重複成交,可能造出沒有人實際能成交的價格。但讓不利觀測值消失的篩選條件,同樣也是一種模型選擇。我們應該像懷疑新的訊號特徵一樣,仔細檢視它。
什麼時候,錯誤價格才算是錯誤資料?
先問問這筆觀測值代表什麼。遠離當時市場價格的成交,可能是損毀的紀錄、流動性稀薄時的一筆真實掃單,也可能是特定交易場所的事件。1-minute K 棒出現零成交量,可能代表期間內沒有成交;K 棒缺失則可能表示資料串流中斷。這些情況應該採取不同處理方式。
想像一個簡單的均值回歸策略:價格低於短期移動平均線 1% 時買進,回到平均線時出場。在流動性稀薄的深夜時段,有一筆成交價格比前一筆低 1.2%,接著市場迅速反彈。如果這筆成交是真的,掛著限價單的策略可能會成交。如果它是沒有任何可執行報價支持的錯誤 tick,卻把這筆成交算進去,就等於憑空創造優勢。
刪除 K 棒不見得比較安全。策略可能仍有掛單留在市場中,下一筆真實成交也可能讓訂單成交。合理的重播需要模擬策略當時能觀察到什麼,以及訂單有可能以什麼價格成交。
清理規則會如何影響結果?
明確設定不同的資料處理方式來執行策略,並比較結果變化。保留原始資料來源,記錄每一筆排除或修正,以及這麼做的原因。接著說明結果有多少是取決於這些決定。
| 資料處理方式 | 可能的好處 | 對回測的風險 |
|---|---|---|
| 移除超出交易所文件所載錯誤範圍的成交紀錄 | 避免已知無效紀錄造成極端值 | 在快速變動的市場中,規則可能把真實成交誤判為錯誤 |
| 缺失區間沿用前一筆價格 | 避免指標因資料缺口而無法運算 | 可能創造出實際上沒有成交過的價格 |
| 使用整合報價,而非最後成交價 | 更能呈現掛單顯示的可執行價格 | 報價量、交易場所的存取條件和排隊位置仍然會造成影響 |
| 依統計門檻刪除所有離群 K 棒 | 降低對極端值的敏感度 | 可能刪掉策略虧損最嚴重的真實壓力時期 |
假設未經篩選的結果 Sharpe 為 0.9,排除 0.8% 的 K 棒後,Sharpe 升至 1.4。這本身不代表資料品質有所提升。檢查遭移除的 K 棒是否集中在波動飆升時段、它們對 P&L 的占比是否顯著,以及排除規則是否在看到結果之前就已訂定。
建立資料例外紀錄:資料來源、時間戳記、受影響欄位、採取該處理方式的原因,以及決策是在檢視策略績效之前還是之後做出的。
如何測試清理是否改變了策略優勢?
固定策略設定,使用相同日期比較幾種合理的資料處理方式。可行時納入原始資料重播、文件記載的修正集合,以及針對仍有歧義的觀測值所採用的保守執行情境。每次執行都要一併呈現交易筆數、週轉率、回撤,以及受影響區間對 P&L 的貢獻,並列出 Sharpe。
接著檢視發生變化的交易。如果排除一小部分可疑成交紀錄後,策略表現最佳的獲利交易消失了,就逐筆查看這些紀錄。如果消失的是虧損交易,也要同樣仔細檢查。只有在清理規則傷害回測結果時才特別審慎,代表這項規則已經介入研究判斷。
為了讓研究可重現,請將供應商檔案或其校驗和、清理程式碼和例外清單都做好版本管理。供應商可能會修訂歷史資料;下次執行時,應能分辨是策略變了,還是輸入資料變了。
可是,資料清理不是必要的嗎?
是。保留明顯損毀的紀錄,可能憑空造出一筆交易、扭曲波動率,或讓指標無法運作。也沒有人該把原始資料串流當成絕對真相。實際的重點更明確:清理需要證據、固定不變的規則和敏感度檢查,因為清理可能改變回測所聲稱代表的市場樣貌。
資料修正讓績效變好時,請問問自己:它移除了什麼觀測值?如果當時還沒看到權益曲線,你還會做出同樣的決定嗎?如果答案不確定,就把兩個版本都保留在研究紀錄中。兩者之間的差異也是結果的一部分。
← 所有文章


