← 研究動態
一般讀者2026/05/16 下午12:03

用 VIX 切三段看訂單流預測跳動:一次方法論的誠實失敗

方法論台指期訂單流跳動風險高波動樣本外

讀者互動

已追蹤瀏覽 0 次,登入會員可按讚與收藏。

分享到:LINEFacebookX / Twitter

用 VIX 切三段看訂單流預測跳動:一次方法論的誠實失敗

研究上有一句話常被忽略:「失敗的實驗也是結果。」在 K1128 這次嘗試裡,我們本來想證明一個聽起來很合理的故事—— 當市場恐慌(VIX 高)的時候,訂單流的不平衡(OFI)對台指期下一根 K 棒是否「跳動」更有預測力 。結果是:原始的、能拿來實盤交易的設計 沒有過關 ;而退而求其次的描述性分析雖然出現耐人尋味的訊號,卻也讓我們看清,2020 年的疫情把「歷史能教未來什麼」這個假設撕裂得多徹底。

這篇文章把 K1128 的設計、為什麼失敗、以及我們從失敗裡學到什麼,都用一般讀者能跟上的方式說清楚。

故事的開頭:K1125 的尾巴

K1125 用台指期 5 分鐘 K 棒做了一件事:用「 訂單流不平衡 」(Order Flow Imbalance, OFI) 與它的絕對值,加上當下這根 K 棒是不是跳動,來預測 下一根 K 棒是不是會跳動 。所謂「跳動」是用 Lee-Mykland (2008) 的非參數方法偵測的,大致的概念是:把同期的「正常波動」估出來後,看當下這根 K 棒的報酬有沒有超出一個門檻,超出就標為「跳」。

K1125 的結果有個很尷尬的形狀:

  •  2020 年(疫情高波動) :整體 OOS(樣本外)AUC 約 0.580,看起來訂單流真的能預測跳動。
  •  2021 年(市場相對冷靜) :OOS AUC 掉到 0.547,幾乎沒什麼預測力。

K1125 也試過把 VIX 直接乘上 |OFI| 當成連續互動項(M4 模型),結果是 災難級失敗 ——樣本外比對連 baseline 都打不過。

於是 K1128 的問題很自然: 與其用一條連續曲線去描述「VIX 越高、訊號越強」,不如直接把資料切成三段(低 VIX、中 VIX、高 VIX),分開估三個模型 。這樣每段可以有自己的截距、自己的斜率,不用假設效果是線性的。

怎麼切?兩種方式都有問題

主設計:用 IS(樣本內)資料訂三段門檻

正派的做法是這樣:

  1. 用 2017-2019(IS 資料)算出 VIX 的 33% 與 67% 分位數當作切點
  2. 把這兩個切點 搬到  2020-2021(OOS 樣本外)資料上分組
  3. 在每一段裡,用 IS 子樣本去訓練 K1125 的 M3 模型,然後到對應 OOS 子樣本去驗證

這個設計的優點是:完全沒有偷看 OOS 資料,是真的能套到實盤的「明天用」。

 訂出來的切點 :

  • 低 VIX:≤ 12.07
  • 中 VIX:12.07 - 14.99
  • 高 VIX:> 14.99

問題立刻來了。

為什麼主設計會「退化」

我們把這些切點套到 2020-2021 OOS 資料上,發現:

段別IS 樣本數OOS 樣本數OOS 跳動數狀態
低 VIX (≤12.07)10,585 0 0沒辦法估
中 VIX (12.07-14.99)10,4518541跳動數不足
高 VIX (>14.99)10,462 20,060 32唯一能估

讀懂這張表: 疫情把整段 OOS 的 VIX 推高到完全跳出 IS 的歷史分布 。IS 期間(2017-2019)的 VIX 範圍只有 9.14 到 37.32;OOS 期間(2020-2021)的 VIX 範圍是 15.01 到 82.69。 OOS 完全沒有「低 VIX」的觀察,中 VIX 也只剩 854 筆、僅 1 個跳動事件 。

也就是說,當你拿「歷史的尺」去量「危機後的世界」,刻度根本對不上。

只剩高 VIX 段能跑模型。結果如下:

  • M1(只用「當下是不是跳」當特徵)OOS AUC =  0.5148 
  • M3(加上 |OFI| 與 OFI)OOS AUC =  0.5926 
  • M3 vs M1 的比較統計強度 =  +1.31 

讀法:高 VIX 段下 M3 的 AUC 確實比 baseline 高,但「兩模型比較」的統計強度只有 +1.31, 沒到嚴格統計檢驗門檻(要求 ≥ 2.0) 。

而最關鍵的「H1 假說:低/中/高三段 AUC 是否單調遞增」根本 沒辦法測 ——因為低與中段都退化了。

 主設計的最終裁定 :FAIL(沒有達到預先設下的三重門檻)。

次要設計:用 OOS 自己的資料切(只能做描述)

為了至少看一眼「是不是真的高 VIX 段比較有訊號」,我們 退一步 用 OOS 自己的 VIX 分布算切點:

  • 低 VIX:12.3 - 18.84
  • 中 VIX:18.86 - 25.34
  • 高 VIX:25.35 - 82.69

並且 用整個 IS 訓練好的同一個 M1 / M3 模型 ,分別去三段 OOS 子樣本上看表現。注意這個設計 用了 OOS 的資訊 去切段,所以 不能拿來宣稱實盤可用 ——它只是一個描述性的視角。

OOS 段別VIX 範圍樣本數跳動數M1 AUCM3 AUC比較統計強度
12.3-18.87,074160.5300.562+0.53
18.9-25.36,894110.4990.496+1.85
   25.4-82.7  6,946  6 0.499 0.626  +3.59 

兩個觀察:

  1.  高 VIX 段確實達到嚴格統計檢驗門檻 :M3 vs M1 的比較統計強度 +3.59,超過嚴謹研究所要求的 ≥ 3.0。M3 的 AUC 從 0.499 跳到 0.626,是這次研究裡最像樣的訊號。
  2.  但完全不是單調遞增 :低 0.562 → 中 0.496 → 高 0.626,是個  U 型 而不是樓梯狀。中 VIX 段甚至比低 VIX 段還差。

為什麼會這樣?三個可能的解釋

 解釋一:中段樣本太小 。中 VIX 段只有 11 個跳動事件,AUC 估計的不確定區間很寬,0.496 可能是抽樣噪音。

 解釋二:高 VIX 段樣本也很小 。整個高 VIX 段只觀察到  6 個跳動事件 。AUC = 0.626 與比較統計強度 +3.59 看起來漂亮,但這是建立在 6 個事件上的。如果這 6 個事件的時點稍微挪一下,數字可能完全不同。

 解釋三:訊號真的只在極端市況浮現 。台指期的訂單簿在平常市況下流動性夠厚,大筆 OFI 不會立刻造成跳動;但在 VIX > 25 的恐慌期,流動性被抽走,同樣強度的 OFI 就會把價格直接推穿,這個機制聽起來合理,但 目前的證據強度遠遠還不能下定論 。

真正的教訓不是統計,是研究設計

這次實驗最值得寫下來的, 不是那個 +3.59 的數字 ,而是「 用 IS 切點到 OOS  的設計在危機資料上會退化」這件事。

寫得直白一點:

當 OOS 期間發生了 IS 從沒見過的市況(疫情、戰爭、政策大轉彎),用「歷史分位數」當作未來分組的標準會崩壞。歷史的低 VIX 分位數,在危機後變成「永遠到不了」的水位。

這不是台指期專屬的問題,是 所有用市場狀態切資料的研究 都要面對的陷阱。它意味著:

  • 如果你的研究設計仰賴 IS-based 切點(regime split, percentile threshold, quantile-based grouping), OOS 包含結構性大事件時極可能整段塌陷 。
  • 解法之一: 把 IS 拉長到包含先前的危機 (例如 2008 GFC、2011 美債上限、2015 中國貶值),讓 IS 的 VIX 分布更廣。
  • 解法之二: 用展開窗口(expanding window)動態更新切點 ,而不是釘在 2017-2019 那個樣本。
  • 解法之三: 乾脆放棄離散切段,改用連續函數 (樣條函數、B-spline)去描述 VIX 對訊號強度的調節作用。

這三條路就是 K1129、K1130 的設計方向。

圖:三段 OOS 表現一覽

K1128 VIX 三段樣本外結果

四面板分別是:(1) 三段 AUC 對比;(2) 比較統計強度;(3) 高 VIX 段 M3 模型的係數;(4) 次要設計(OOS 內部切點)下三段的對比。

結論

K1128 沒有給我們一個能上線的策略,但它讓我們看清三件事:

  1.  訂單流對跳動的預測能力,可能真的集中在高波動期間 ——這個機制假說沒有被推翻,反而在描述性分析裡看到一點支持。
  2.  嚴格的「樣本內訂切點 → 樣本外驗證」設計在危機資料上會自爆 ,不是策略沒效,是設計工具不夠用。
  3.  研究誠實比看起來漂亮的數字重要 。如果只 cherry-pick 那個 +3.59 的高 VIX 統計強度,會誤導讀者忽略:那是 6 個事件、用了 OOS 切點、且 H1 沒過。

我們選擇把這次的失敗如實寫下來,而不是把它包裝成「成功的描述性發現」。後續的 K1129、K1130 會帶著這次的教訓往前推:用更長的 IS 期、用展開窗口、用連續函數,看訂單流到底在什麼條件下,真的能領先告訴我們「下一根會跳」。

資料來源

  •  台指期 5 分鐘 K 棒 :TAIFEX TX 期貨,2017-2021,沿用 K1124 的快取,共 73,203 根 K 棒,有效預測樣本 52,412。
  •  VIX :yfinance ^VIX 日收盤,套用 T-1 落後(前一個美國收盤對應隔天台指開盤)。
  •  跳動偵測 :Lee-Mykland (2008) 非參數方法,K=16 滾動雙冪變異數,多重檢定 Gumbel 門檻 α=0.01,全期共 115 個跳動(佔有效樣本 0.21%)。
  •  實驗檔案 :experiments/k1128/k1128.pyexperiments/k1128/k1128_results.jsonexperiments/k1128/README.md
  •  參考文獻 :
    • Lee, S.S., & Mykland, P.A. (2008). Jumps in Financial Markets: A New Nonparametric Test and Jump Dynamics. Review of Financial Studies 21(6), 2535-2563.
    • Cont, R., Kukanov, A., & Stoikov, S. (2014). The Price Impact of Order Book Events. Journal of Financial Econometrics 12(1), 47-88.
    • Ang, A., & Timmermann, A. (2012). Regime Changes and Financial Markets. Annual Review of Financial Economics 4, 313-337.

本文是 K1128 實驗的一般讀者解說。完整的方法論、數值結果、Codex 程式審查紀錄與後續延伸方向(K1129、K1130、K1131)見實驗目錄的 README 與 results.json。

相關文章

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

📄
把五分鐘資料切得更細,預測真的會更準嗎?台指期給了一個保守答案
做波動率預測時,很容易想把資料切得更細。一天一筆收盤價太粗,那就看每五分鐘一筆;只看總波動太粗,那就再拆成上漲、下跌、跳動、估計噪音。直覺上,資料越細,模型應該越聰明。 這次台指期日盤實測給的答案比較冷靜:細資料有幫助,但幫助還不夠硬。 VolPred 把台指期日盤的五分鐘資料整理成每日波動,期間從 2017-05-16 到 2026-06-29,共 2219 個原始交易日。正式可判斷的樣本外...
📄
商品 ETF 的方向對了一半,可惜統計撐不住:波動分高低之後的動能 vs 反轉拼圖
商品市場的學界研究這兩年冒出一個新講法:短期的反轉跟動能其實同時存在,誰贏要看當下的波動高低。波動高的時候反轉壓過動能,波動低的時候動能壓過反轉。 聽起來很合理。趨勢交易圈裡這也是常識:行情急的時候追高會被打臉,行情慢的時候趨勢能跑很久。 我們把這個猜想搬到 6 個常見商品 ETF 上實際算。樣本是 2010 年 1 月到 2026 年 6 月,黃金、白銀、原油、天然氣、銅、廣義商品籃,週和月...
📄
數字成立,因果還沒成立:費半暴漲後的台股敘事查核
# 數字成立,因果還沒成立:費半暴漲後的台股敘事查核 最近有一篇市場評論在流傳。文章的口氣很重:AI 泡沫、政客喊盤、外資台指期空單、散戶接盤,最後指向一個熟悉的結論:背後有人在控盤。 我先處理比較基本的問題。裡面的數字到底站不站得住?如果數字是真的,能不能直接推到「黑手操縱」? 我把原文拆成幾個可以驗的部分,用公開資料重算。結果很清楚:**很多數字是真的,但最重的因果結論還沒被證明。** ...