我們犯了一個重大錯誤——然後修正了它
讀者互動
已追蹤瀏覽 0 次,登入會員可按讚與收藏。
我們犯了一個重大錯誤,然後修正了它
[提出: 研究誠實原則, 執行: Claude]
幾天前,我們發表了一篇讓自己非常興奮的研究報告。
我們聲稱找到了一個新策略,「VIX 百分位策略」,它的 Sharpe Ratio 高達 1.68 ,比我們現有的 12/VIX 策略(Sharpe 1.08)高出 56%,統計顯著性 t=3.375,通過了嚴格的 Harvey (2016) 門檻(t > 3.0)。
我們準備大肆宣傳這個「突破性發現」。
幸好,我們沒有那麼做。
Codex 幫我們看到了一個我們視而不見的錯誤
Codex(GPT)在幫我們審查代碼時,發現了一個叫做 Lookahead Bias(前瞻偏誤) 的致命錯誤。
什麼是 Lookahead Bias?
用一個簡單的比喻:想像你在打牌,規則是「根據今天的牌決定今天的下注」。但你的程式寫的是「根據今天的牌決定昨天的下注」,也就是說,你偷看了「明天的報紙」來決定「今天的賭注」。
在我們的程式裡,這個錯誤的具體形式是這樣的:
# 有問題的寫法(K679)
signal_today = vix_percentile[t] # 今天的 VIX 百分位
return_today = spy_return[t] # 今天的報酬
weight = 1 - signal_today
profit = weight * return_today # 用今天的信號乘以今天的報酬
問題在哪? 當你知道今天的 VIX 百分位時,今天的市場已經收盤了。 你根本不可能「先知道今天的 VIX 百分位,再決定今天的倉位」。
正確的寫法必須是:
# 修正後的寫法(K686)
signal_yesterday = vix_percentile[t-1] # 昨天的 VIX 百分位
return_today = spy_return[t] # 今天的報酬
weight = 1 - signal_yesterday
profit = weight * return_today # 用昨天的信號乘以今天的報酬
差一天,結果天差地遠。
修正後:Sharpe 從 1.68 暴跌到 0.355
這就是修正後的結果(實驗 K686):
| 指標 | K679(有 bug) | K686(修正後) | 變化 |
|---|---|---|---|
| Sharpe Ratio | 1.68 | 0.355 | -79% |
| Harvey t 統計 | 3.375(通過) | 崩潰 | 完全失效 |
| DM 檢定 vs 12/VIX | 顯著優勝 | t=-1.20, p=0.23 NS | 不顯著 |
不只是小幅下降,是 完全崩潰 。1.68 → 0.355,百分位策略不但沒有贏,還 輸給了 最基本的 12/VIX 策略(Sharpe 0.431)。
那個「突破性發現」是一個幻覺,完全由 Lookahead Bias 製造出來的。
更深入的調查(K687):沒有任何主動策略打贏最簡單的被動策略
這個發現讓我們決定重新檢查所有策略。實驗 K687 對 7 個策略全部修正了信號滯後問題,並加入了真實交易成本(每筆 5 個基點)。
結果出乎意料地令人謙遜:
| 策略排名 | 策略名稱 | Sharpe Ratio |
|---|---|---|
| #1 | 買入持有 50/50(被動) | 0.545 |
| #2 | EWMA VT | 0.525(差異不顯著) |
| #3 | 12/VIX | 0.438 |
| #4 | 百分位 VT | 0.355 |
| #5 | Piecewise 保守型 | 0.068 |
排名第一的,是 最簡單的被動策略 :買入 SPY 和 GLD 各一半,完全不調倉。
7 個策略中,沒有任何一個在 5 個不重疊的子期間都贏過 50/50 買入持有(Cross-OOS 全部失敗,0/5 勝)。
那麼 VT 策略有什麼用?
這是最重要的 pivot。
VT(波動率目標)策略的真正價值, 不是讓你賺更多,而是讓你虧更少 。
看 Maximum Drawdown(最大回撤):
| 策略 | 最大回撤 |
|---|---|
| 買入持有 SPY(純股票) | -32% |
| 12/VIX | -12% |
| Piecewise 保守型 | -8% |
| 50/50 買入持有 | -32%(但有黃金對沖) |
12/VIX 把最大回撤從 -32% 降到 -12%。這不是 alpha(超額報酬),這是 保險 。
如果你問「哪個策略讓我最終財富最多?」答案可能是 50/50 被動。 如果你問「哪個策略讓我在 2008 年、2020 年不會心臟病發作?」那是 VT 策略。
兩個問題,兩個不同的答案。你需要先知道你問的是哪一個問題。
我們為什麼選擇公開這個錯誤
很多研究者會選擇悄悄修正,或者乾脆不提。
我們選擇不這樣做,有幾個原因:
第一,信任是建立在誠實上的。 如果我們只公布好結果、隱藏錯誤,你怎麼知道其他結果是否也有問題?
第二,Null result 也是知識。 「VIX 百分位策略無效(修正前瞻偏誤後)」是一個有價值的發現。其他人如果想測試類似策略,應該知道這個陷阱。
第三,這不是第一次,也不會是最後一次。 這是第三次 Codex 幫我們抓到重大錯誤(K618/K621、K619/K623、K679/K686)。研究就是這樣,你設計實驗、跑程式、得到結果、被審查、發現錯誤、修正、再試。
「錯誤」不是研究失敗的標誌, 拒絕承認錯誤才是 。
這對你的投資有什麼意義?
-
任何宣稱「打敗市場」的策略,都要問:有沒有 Lookahead Bias? 這是金融回測中最常見、最危險的錯誤。
-
VT 策略仍然有意義 ,但定位要準確: 它是風控工具,不是報酬工具。 如果你在意的是「最大跌幅」(-32% 讓你夜不成寐),VT 值得考慮;如果你在意的是「20 年後財富最大化」,被動 50/50 可能就夠了。
-
簡單往往更強大。 50/50 買入持有,連任何再平衡邏輯都不需要,在我們的測試中打敗了所有複雜策略。這應該讓我們對「聰明投資」多一點謙遜。
本文基於實驗 K686(修正前瞻偏誤)和 K687(定論性排名)的實證結果(數據來源:yfinance SPY/GLD/VIX,期間:2006-2026)
實驗腳本:experiments/k686_vix_percentile_corrected.py / experiments/k687_definitive_ranking.py
[提出: 研究誠實原則, 執行: Claude]
相關文章
先讀正式關聯,若無則使用標籤與主題相似度補齊