研究方法 偏差控制

第 3 章

偏差控制與驗證

大多數散戶回測都會受到系統性偏差影響,令結果看起來遠比現實理想。我們已識別出六種最常見的偏差,並針對每一種建立嚴格的控制機制。

01

前視偏差

危害最大

定義

前視偏差是指策略使用了在作出交易決定時實際上無法取得的資訊。最常見的形式,是以第 T 根 K 線的收市價產生訊號,再同樣以第 T 根 K 線的收市價執行交易。現實中,收市價要在 K 線收市後才能得知,而此時市場已經收市。

✗ 有偏差(多數散戶工具的做法)

於第 T 根 K 線收市時產生訊號 → 同樣於第 T 根 K 線收市價成交。這在現實中不可能做到——你無法以剛剛才得知的價格進行交易。

✓ 我們的做法

於第 T 根 K 線收市時產生訊號 → 交易排隊等候 → 於第 T+1 根 K 線開市價成交。這是現實中最早可以執行的價格。

我們同時防範的其他前視偏差形式

  • 使用第 T 根 K 線的最高價/最低價觸發止損——這些數值要在 K 線收市後才能得知
  • 指標計算引用了「未來」的期間(例如居中移動平均線)
  • 使用整個數據集的最小值/最大值進行標準化,而非滾動最小值/最大值
  • 策略參數在整段期間內優化,再於同一段期間內測試
  • 盈利驚喜訊號在公布日期之前就使用了實際每股盈利(EPS)
02

倖存者偏差

高估風險

倖存者偏差是指回測只納入目前仍在交易所上市的股票。在測試期間倒閉、被收購或被除牌的公司都被排除在外——儘管它們在當時都是有效的交易標的。結果是歷史回報看起來比實際好得多,因為所有「輸家」都已被悄悄地從數據集中剔除。

對恒生指數成分股範圍的量化影響:

~15–20%

在 10 年回測中,恒指成分股的歷史紀錄至少包含一隻已除牌股票

~3–8%

動量策略因倖存者偏差而高估的典型年度回報

100%

我們的回測在歷史股票範圍中全部包含已除牌證券

✗ 有偏差的股票範圍

只對目前標普 500 指數內的 500 隻股票進行測試,過往所有破產、除牌及被剔除的個案均被排除。回報偏差:每年 +3% 至 +8%。

✓ 我們的做法

每個歷史日期的股票範圍,均包含當日所有已上市的股票——包括其後被除牌或破產的股票。即時點(point-in-time)股票範圍建構。

03

過度擬合(曲線擬合)偏差

最為常見

過度擬合是指策略在歷史數據上被過度優化,以致實際上只是「記住」了過去,而非學到可以推廣的規律。一個擁有 12 個參數、全部以 3 年數據調校的策略,會呈現亮麗的歷史表現,卻會在實盤交易中立即失效。

我們如何偵測及防止過度擬合

最少參數數量

我們傾向採用自由參數少於 5 個的策略。每增加一個參數,曲線擬合的風險便會倍增。

參數敏感度測試

我們將每個參數上下調整 ±10–20%,並衡量對回報的影響。穩健的策略會呈現平滑而平坦的曲面,而非尖銳的峰值。

交叉驗證

我們把歷史期間分為 5 個互不重疊的區段,並衡量所有區段之間結果的一致性。

最少交易次數

交易少於 50 次的回測,統計證據並不足夠。我們要求至少 100 次完整的來回交易。

蒙地卡羅模擬

我們將交易順序隨機打亂 10,000 次,以衡量回報分布,以及隨機排序下的最壞情況。

04

選擇偏差

經常被忽略

選擇偏差是指選取哪些標的進行回測,在有意或無意之間受到這些標的過往表現的影響。若只在過去十年升幅最大的股票上測試動量策略,結果必然帶有偏差。

標的選擇

我們在查看結果之前先界定交易範圍。範圍準則建基於客觀篩選條件:市值、流動性、行業——而非歷史表現。

時間區間選擇

我們使用每個標的可得的完整歷史,而非刻意挑選的區間。若測試 2010–2024 年,便會包含 2015 年中國股災、2018 年調整及 2020 年新冠股災。

策略選擇

我們記錄所有測試過的策略,而不僅是有效的那些。發表偏差(只展示表現好的結果)也是選擇偏差的一種。

基準選擇

用作比較的基準在測試開始前已經確定。我們不會在看到結果後更換基準,以令相對表現看起來更好。

05

優化偏差

參數風險

優化偏差是過度擬合的一種特定形式。當你對數百種參數組合進行網格搜尋並挑選表現最佳者時,你找到的並非「真正」的最優參數,而是因隨機雜訊而剛好在該段歷史期間表現最好的參數。

說明:為何「最佳」參數具有誤導性

在同一組數據上測試 100 種參數組合 → 在 5% 顯著水平下預期的偽陽性:約有 5 個策略僅憑巧合便看起來表現良好
測試 1,000 種組合 → 預期偽陽性:約 50 個。「最佳」策略可能完全是隨機結果。
我們的做法:先界定參數 → 根據經濟邏輯選擇參數,只測試一次,並在不作進一步修改的情況下呈報該結果。

我們的優化規則

  • ● 策略參數在執行樣本內回測之前已經設定
  • ● 若使用優化,只會在訓練集上進行——絕不會在驗證集上進行
  • ● 我們會呈報優化曲面(而不僅是峰值),讓讀者可以看到穩健程度
  • ● 我們傾向選用位於平坦高原的參數值,而非狹窄的峰值
  • ● 滾動前推優化:定期重新優化參數,模擬真實的適應性管理
06

樣本外驗證

最後關卡

樣本外(OOS)測試是最重要的驗證步驟。策略在訓練集上開發及優化完成後,會在一段完全獨立的保留期間內測試一次。OOS 結果不可用於進一步修改策略——否則該保留期間就不再是真正的樣本外。

15 年回測的典型數據分割

訓練期 (60%)
策略開發
驗證期
(20%)
OOS 保留期
(20%)
第 1 年 第 9 年 第 12 年 第 15 年

滾動前推測試

滾動前推測試是更精密的 OOS 測試形式,模擬真實交易者定期重新優化策略的過程。我們並非採用單一固定的訓練/測試分割,而是使用滾動視窗:以最初 N 根 K 線優化,於其後 M 根 K 線測試,向前推進 M 根 K 線,然後重複。

滾動視窗

我們使用 12 個月的優化視窗,每次向前推進 3 個月,每個視窗各自獨立。

一致性檢查

我們衡量滾動前推表現與樣本內表現的比率。比率高於 50% 代表策略穩健。

兩者並列呈報

所有報告均並排顯示樣本內及滾動前推(樣本外)結果,確保完全透明。

偏差控制摘要

偏差類型 典型影響 我們的控制 狀態
前視偏差 影響極大——可令呈報回報倍增 下一根 K 線開市價執行;事件驅動引擎 已控制
倖存者偏差 年度回報高估 +3–8% 包含已除牌股票的即時點股票範圍 已控制
過度擬合 策略在實盤交易中失效 參數敏感度;蒙地卡羅;≥100 次交易 已控制
選擇偏差 只展示刻意挑選的優勝者 預先界定股票範圍;完整歷史;呈報所有測試 已控制
優化偏差 虛假的「最優」參數 經濟邏輯;滾動前推;偏好平坦高原 已控制
缺少 OOS 驗證 樣本內結果 ≠ 實盤結果 60/20/20 分割;滾動前推測試 已控制