← 研究動態
研究2026/03/27 上午11:03

數據分析最常犯的錯——我們差點把錯誤策略推薦給你

時區數據分析錯誤誠實

讀者互動

登入會員可按讚與收藏。

分享到:LINEFacebookX / Twitter

持續追蹤這項研究

收藏、追蹤與明日提醒只保存必要識別資料,可在會員中心檢視或刪除。

研究資訊不構成個人投資建議;提醒僅代表研究更新,不代表交易訊號。

訂閱研究摘要

研究摘要與新文章,不轉售、不寄廣告,隨時可退訂。

數據分析最常犯的錯,我們差點把錯誤策略推薦給你

想像一下:你去看醫生,醫生診斷後說要開抗生素。但就在你拿到處方籤的前一刻,他突然停下來重新確認病歷,然後發現原來你對那個抗生素過敏。一個小小的最終確認,避免了一場可能的災難。

這就是我們上個月差點發生的事。只不過主角不是藥方,而是一個看似表現優異的投資策略。


從一個讓人心動的數字開始

今年 3 月,我們的研究系統正在測試一個利用美股 S&P 500(SPY)動能來預測台股(0050)隔夜缺口的策略。

結果讓人興奮: Sharpe Ratio 1.08 ,t 統計量 4.25,5 段跨期驗證全數通過。

對非技術讀者解釋一下:Sharpe Ratio 是衡量「每承受一單位風險,能賺多少報酬」的指標。1.0 以上在投資界通常代表策略有實質價值;t 統計量超過 3.0 才算達到我們設定的嚴格統計門檻(Harvey 2016 建議值)。

這個策略編號 K519,幾乎已經排進準備上架的佇列。


但等等,最後的確認

在任何策略正式對外公布之前,我們有一個例行程序:重新驗證數據對齊方式,確認沒有 前瞻偏誤 (look-ahead bias)。

前瞻偏誤是量化策略研究中最致命的陷阱。它的意思是:如果你在分析「過去」的時候,不小心用了「未來」才有的數據,結果就會虛假地美好。就像你如果能看到明天的報紙,今天買彩券當然百戰百勝,但現實世界做不到。

K521 是我們針對 K519 做的最終驗證實驗,專門檢查數據對齊有沒有問題。


發現了什麼

問題的核心是一個 時區錯誤 。

美股(SPY)在台北時間凌晨 5 點收盤。台股則在早上 9 點開盤。

我們的策略邏輯是:「如果美股昨天上漲,今天台股隔夜缺口可能也是正的。」這聽起來完全合理,美股週四(台北時間週五凌晨 5 點)收盤 → 台股週五早上 9 點開盤,這中間有 4 個小時的資訊傳遞窗口。

 但問題是:我們的程式碼在合併數據時,用的是「當天」的美股收盤價,而不是「前一天」的。 

具體來說:程式使用了 這個函式,理論上應該用「最近一筆較早的數據」,但實作上卻讓台股週五的數據去匹配 週五 的美股收盤,而週五的美股收盤是週五凌晨 5 點,那時台股 已經交易了一整天了 。

換句話說,我們用了當天台股交易完的資訊,去預測當天台股的走勢。這是典型的前瞻偏誤。

在 3,909 個交易日的數據中,有  96.7% 的數據點 都犯了這個錯誤。


奇特的結果:修正後 Sharpe 反而飆升到 4.4

這裡有個讓人意想不到的轉折。

理論上,如果一個策略有前瞻偏誤,修正後表現應該會 下降 ——因為那些「超能力」被拿走了。

但 K519 恰恰相反:

版本Sharpe Ratio年化報酬
有 bug(K519)1.084.4%
修正後(K521) 4.45  16.9% 

修正之後,Sharpe 從 1.08  跳到 4.45 ,年化報酬從 4.4% 升到 16.9%,最大回撤從 -4.4% 縮小到 -1.8%。

這是怎麼回事?

原來,前瞻偏誤在這裡反而 稀釋了信號 。正確的信號是「美股昨天的表現」,但 bug 版本把 96.7% 的信號換成了「美股今天的表現」(與台股幾乎同步,沒有預測力)。這等於在一杯純果汁裡加了 97 份水,果汁還在,但被稀釋到幾乎感覺不出來了。

修正後,我們才看到真正的信號強度:美股昨晚收盤與台股今天開盤缺口的相關性高達  0.611 ——過去 16 年每一年都是正數,最差的年份 Sharpe 也有 3.49。


但這個策略還是不能上架

即便修正後的 Sharpe 高達 4.45,我們還是沒有把這個策略推薦給一般投資人。

原因在於 實作限制 。

這個策略需要在台灣時間凌晨 5 點(美股收盤的瞬間)下單,在早上 9 點(台股開盤)出場。這個 4 小時的窗口,普通投資人用的是現貨市場(0050 ETF), 現貨市場在早上 9 點才開盤,根本無法在凌晨 5 點買進 。

若要執行這個策略,你需要台指期(TX),那是大戶的遊戲,有保證金門檻和操作複雜度。對於一般投資人,這個機會窗口事實上是關上的。

這個資訊傳遞機會是真實的,是學術界已知的「時區資訊傳遞效應」(K521 就是對應知識庫中 I8 項目的驗證)。但 知道規律和能否賺到錢是兩回事 。


我們為什麼要告訴你這些

有些團隊遇到這種情況,可能會選擇沉默,不提 bug,不解釋來龍去脈,直接埋單了事。

我們的選擇是公開記錄這一切。

理由很簡單: 研究的價值在於可信賴,而可信賴的基礎是誠實 。

一個 Sharpe 1.08 的策略,如果基礎數據有問題,那它什麼都不是。一個因為找到 bug 而看起來「表現退步」的策略,也不是真正的退步,那只是誠實面對現實。

我們在 中完整記錄了 bug 的類型、影響的比例(96.7%)、修正前後的所有數字、以及策略在現實中的實作限制。任何人都可以追蹤、核實、或提出異議。


給所有投資人的啟示

如果你在閱讀任何投資策略的回測報告,這個故事給了你一個具體的問題清單:

  1.  數據是否有前瞻偏誤?  有沒有用到「現實中不可能提前知道」的信號?
  2.  時間戳對齊了嗎?  不同市場、不同時區的數據合併時,有沒有考慮實際的資訊到達時間?
  3.  即使策略理論上可行,執行上呢?  窗口夠嗎?需要什麼帳戶?成本是多少?

最後一個最重要的教訓: 一個看起來變差的修正,有時候反而是更誠實的進步。  那個從 1.08 跳到 4.45 的數字,不是我們做得更好了,而是我們終於看清楚了真實的樣子。

就算最終沒辦法讓一般人從這個發現中獲利,至少我們沒有讓你相信一個有缺陷的策略。


本文基於實驗 K519、K521(2026-03-27),完整數據與程式碼記錄於 experiments/ 目錄。[提出: 用戶, 執行: Claude]

相關文章

先讀正式關聯,若無則使用標籤與主題相似度補齊

📄
K1884:拿 VIX1D 對照 SPY 同一天的已實現變異,年化分母、報價時點與盤中窗口各自能把答案改掉多少
一般讀者版〈一日恐慌指數開盤報的當日變異,平均是 SPY 盤中實際的 1.56 倍:這個數字該怎麼讀〉給的是水準與讀法。這篇處理做這個比較時要先決定的三件事:VIX1D 要除以哪一個年化分母、要拿哪一個時點的報價、已實現變異要涵蓋盤中哪一段。 K1884 的結果顯示,這三個選擇造成的偏移,與要量的效果同一個量級;選錯任何一個,程式不會報錯,只會回答另一個問題。 先釐清估計量。K1884 量的是同一…
→
📄
K1378:VIX 長期成分讓 SPY 波動預測勝過 GJR-GARCH,這個優勢在疫情窗外更穩定
做風險控管或選擇權定價的人,常要在兩種日頻波動模型之間取捨:只用報酬本身的 GJR-GARCH,或在 GARCH 之外加一個由 VIX 驅動的長期成分。後者多了一個外部變數要維護,值不值得,要看它的預測優勢從哪裡來。如果優勢只來自 2020 年那種市場崩跌的少數日子,平常用它就只是多背一個依賴;如果優勢出現在一般日子,它才是日常可用的改進。 K1378 用 SPY 的樣本外一步預測回答這個問題:A…
→
📄
K1862:HAR-RV 一個月波動預測的誤差,平均偏誤不隨波動水位變號,隨水位變寬的是誤差分布
用 HAR-RV 預測未來一個月波動的人,常會想加一層修正:波動很高時把預測往下調,波動很低時往上調,理由是 HAR 的均值回歸可能修正過頭。這層修正值不值得加,取決於 HAR 的誤差是否真的隨預測當下的波動水位系統性變號。 一般讀者版〈HAR 波動預測的誤差往哪邊偏:六成交易日高估,平均誤差卻幾乎是零〉處理的是整體偏誤。這篇處理條件結構:依預測當下的波動水位把樣本外日子分成五組,誤差的平均、中位…
→