不自欺的回測
回測很容易做得漂亮,也很容易做錯。它真正的用途是淘汰爛想法,不是承諾獲利。
回測很容易做得漂亮,也很容易做錯。它真正的用途不是承諾獲利——而是在你拿錢去冒險之前,淘汰那些行不通的想法。
一個無法殺掉你想法的回測,不是證據。它是裝飾。
把每一種成本都算進去
點差、手續費與隔夜利息都必須在模型裡。點差是最常被漏掉的一項,而對短線策略來說傷害最大——它可能就是獲利因子 1.3 與 0.9 之間的差別。
滑價也應該被建模,至少以每筆交易一筆固定的不利金額來處理。如果你的優勢小於一個合理的滑價假設,那它並沒有優勢。
前視偏差
當一個訊號使用了在決策當下還拿不到的資訊,就發生了前視偏差。經典版本是用當根 K 線的收盤價,在同一根 K 線的收盤價進場——你不能交易一個你還沒看到的價格。
更細微的版本包括在開盤時用一個含當根 K 線的移動平均值來做決策,以及用全樣本的統計量來正規化參數。這些全部會膨脹結果,而且沒有一個能單靠淨值曲線被偵測出來。
存活者偏差
如果你在一個「今天還存在」的商品集合上測試,你就已經排除了每一個失敗或被下市的商品。你的結果描述的是一群存活者,而不是你當時原本要從中挑選的那一群。
對短線的 CFD 與外匯策略來說,這件事的影響比股票小,但在指數與個股 CFD 上仍然會咬人,因為成分股清單會在你測試的期間內改變。
過度擬合是預設結果
只要有足夠多的參數與足夠多次的嘗試,你幾乎可以把任何一段歷史擬合得很漂亮。擬合出來的結果精確地描述過去,對未來則毫無預測力。
防禦方式只有:少數參數、大樣本、以及樣本外確認。如果一個參數的小幅變動就大幅改變你的結果,你看到的是一個擬合出來的假象,不是一個穩健的效應。
策略庫
Explore our library of research-driven systematic trading strategies.
重點整理
- 把點差、手續費、隔夜利息與滑價都建模——比成本還小的優勢不算優勢
- 前視偏差代表任何訊號都不能使用決策當下還拿不到的資料
- 存活者偏差排除了在你測試期間失敗的商品
- 如果參數的小變動就讓結果崩壞,那是擬合出來的,不是找到的
- 每一次測試都要把點差、手續費與隔夜利息算進去
- 避免前視偏差,讓任何訊號都不使用未來資料
- 當心你的商品集合裡的存活者偏差
- 參數愈多,擬合雜訊的方式就愈多
提出一份不含成本的回測報告,然後對實盤結果感到意外。