
2020 年 7 月,本站發表過一篇用 pandas 回測「VIX 大於 40 買進美股」的教學。當時可用的資料只涵蓋到 2019 年,訊號只出現過 4 次。六年過去,市場又經歷了 2020 年 3 月 VIX 收在 82.69 的歷史最高收盤、2022 年整年的空頭,以及 2025 年 4 月的關稅恐慌。這篇文章把資料拉長到 1990 年至 2026 年 6 月,用同一套規則從頭重跑,並逐一檢驗舊版的每個結論。重跑後的關鍵數字:
| 進場規則(1990-2026,S&P 500) | 樣本數 | 持有 250 日平均報酬 | 勝率 | 最差一次 |
|---|---|---|---|---|
| 訊號 A:VIX 收盤突破 40 當天買進 | 12 次 | +22.1% | 83% | -14.3%(2001 年) |
| 訊號 B:VIX 曾破 40、回落到 30 以下再買 | 10 次 | +16.8% | 90% | -18.5%(2001 年) |
| 任意一天買進(無條件基準) | 8,900+ 個交易日 | +10.0% | 81% | 不適用 |
三個重跑後才看得到的事實:
- 恐慌進場的優勢在報酬幅度,幾乎不在勝率。平均 +22.1% 是任意時點 +10.0% 的兩倍以上;但勝率 83% 對 81%,與隨便挑一天買幾乎相同。
- 舊版「等 VIX 降溫再買比較好」的結論在全樣本不成立。降溫進場(訊號 B)的平均報酬反而較低,而且 2001 年那次虧損 18.5%,比訊號 A 的任何一次都深。
- 把訊號做成連續策略會長期輸給買進持有:年化 4.76% 對 SPY 含息的 10.73%。它適合當「手上有閒置資金時的加碼參考」,當成主策略並不及格。
以下是完整的定義、規則、12 次事件明細與方法限制。
VIX 恐慌指數是什麼?
VIX(CBOE Volatility Index,波動率指數)是芝加哥選擇權交易所用 S&P 500 選擇權的市場價格,反推出來的「未來 30 天年化隱含波動率」,因為它在市場急跌時飆高,俗稱恐慌指數(fear index)。這裡更正一個舊版的錯誤:VIX 衡量的是未來 30 天,舊文寫成「預估 12 個月的波動」是錯的。
CBOE 白皮書的做法,是用一籃子不同履約價的選擇權報價,近似一張方差交換(variance swap)合約的價值:
口語拆解: 是履約價 那檔選擇權的買賣中價, 是遠期指數水準, 是到期時間(約 30 天), 是無風險利率。第一項把所有履約價的選擇權價格加權加總,權重 讓價外選擇權也納入計算;第二項是用 與第一個低於它的履約價 之間的差距做小幅修正。整條公式的直覺只有一句:市場越願意花錢買保險(選擇權越貴),VIX 越高。
用一個數字示例感受 VIX 的單位
以下是示意用的換算,並非任何實際報價。假設今天 VIX = 20,代表市場為未來 30 天定價的「年化」波動率是 20%。把年化換算回 30 天的預期波動幅度:
意思是市場認為未來一個月 S&P 500 上下 5.8% 以內的震盪屬於正常範圍。若 VIX 跳到 40,同樣的算法得到上下約 11.5%:市場正在為「一個月內可能再跌一成」的劇烈行情買保險。
1990 年以來 VIX 收盤的中位數是 17.6,歷史最高收盤是 2020 年 3 月 16 日的 82.69。常見的水位解讀:
| VIX 收盤水位 | 市場狀態 |
|---|---|
| 15 以下 | 平靜,保險便宜 |
| 15 ~ 20 | 正常區間(36 年中位數 17.6 落在這裡) |
| 20 ~ 30 | 緊張,通常伴隨明顯回檔 |
| 30 ~ 40 | 恐慌,多數空頭的尖峰落在此區 |
| 40 以上 | 極端恐慌,36 年只出現 12 次首次突破,平均三年一次 |
回測設定:把「恐慌買點」寫成可檢驗的規則
口頭上的「VIX 很高時買進」無法檢驗,必須先寫成規則。本文沿用 2020 年舊文的兩條規則,參數完全不動,只把資料換成 1990 年 1 月至 2026 年 6 月 10 日的完整樣本:
- 訊號 A(恐慌當天買):VIX 收盤首次突破 40 當天買進。「首次」的定義是之前 30 個交易日內不得出現過突破,避免同一波恐慌重複計算。
- 訊號 B(降溫再買):最近 120 個交易日內曾出現 VIX 收盤大於 40,且當天收盤回落到 30 以下,同樣加 30 個交易日的去重條件。這是舊文提出的「等恐慌降溫再進場」版本。
兩種訊號都假設買進 S&P 500 並持有 250 個交易日(約一年)。評估指標是前瞻報酬:
其中 是訊號日收盤的指數水準, 是持有的交易日數。比較基準是「任意一天買進持有同樣天數」的全樣本平均,這比拿大盤年化報酬比較更公平,因為兩者衡量的是同一種持有行為。資料用 Yahoo Finance 的 ^VIX 與 ^GSPC(價格指數,源頭為 CBOE 與 S&P),下載方式見 yfinance 全球指數教學。
順帶更新一個舊數字:舊文說「大盤的平均年報酬率大概是 6%」,那是 2004 至 2019 年那段資料算出來的。全樣本下,S&P 500 價格指數 1990-2026 的年化報酬是 8.6%(不含股息),SPY 含息 1993 年起則是 10.73%,年化的定義是:
為經過的年數。如果你對回測流程本身還不熟,可以先讀回測是什麼的入門指南。
訊號 A:VIX 突破 40 當天買進,12 次事件全表

36 年來,VIX 收盤首次突破 40 只發生過 12 次。每一次的進場點、持有 250 個交易日的報酬,以及持有期間曾經歷的最深跌幅如下:
| 進場日 | 事件背景 | VIX 收盤 | 250 日報酬 | 期間最深跌幅 |
|---|---|---|---|---|
| 1998-08-31 | LTCM 與俄羅斯違約 | 44.28 | +40.8% | 0.0% |
| 2001-09-17 | 911 恐怖攻擊復市日 | 41.76 | -14.3% | -23.2% |
| 2002-07-22 | 網路泡沫後段 | 41.87 | +21.2% | -5.3% |
| 2002-09-19 | 網路泡沫尾聲 | 40.65 | +21.7% | -7.9% |
| 2008-09-29 | 金融海嘯,TARP 首次被否決 | 46.72 | -5.6% | -38.9% |
| 2010-05-07 | 閃電崩盤與歐債 | 40.95 | +21.3% | -7.9% |
| 2011-08-08 | 美債降評 | 48.00 | +24.3% | -1.8% |
| 2015-08-24 | 人民幣貶值恐慌 | 40.74 | +15.4% | -3.4% |
| 2020-02-28 | COVID 崩盤起點 | 40.11 | +29.6% | -24.3% |
| 2020-06-11 | COVID 二次恐慌 | 40.79 | +40.6% | 0.0% |
| 2020-10-28 | 美國大選前恐慌 | 40.28 | +39.9% | 0.0% |
| 2025-04-04 | 關稅衝擊 | 45.31 | +30.3% | -1.8% |
平均 +22.1%、中位數 +23.0%、勝率 83%(10 勝 2 敗)。把持有期縮短,平均報酬降低但勝率反而更高:持有 125 日平均 +13.1%(勝率 92%),持有 60 日平均 +8.2%(勝率 92%),對照任意時點的 60 日基準只有 +2.3%。
兩次虧損值得放大看。2008 年 9 月 29 日進場後,S&P 500 又繼續跌了 38.9% 才見底,250 個交易日後仍虧 5.6%:這就是舊文用「賠了 40% 的資產,非常恐怖」描述的那條藍線,全樣本重跑後它依然是最痛的一次。2001 年 9 月那次更說明問題:911 復市日進場,60 日後還有 +9.4%,但網路泡沫的下跌趨勢沒有結束,250 日後反而虧 14.3%。VIX 突破 40 抓的是「恐慌尖峰」,不保證是「趨勢底部」,這兩件事在 2008 與 2001 都明確分離過。
另外注意 2020 年出現了三次訊號(2 月、6 月、10 月),三段 250 日的持有期互相重疊,吃到的是同一波 V 型反彈。把它們當成三個獨立樣本會高估訊號的穩定性,這一點在文末的方法限制裡有完整交代。
訊號 B 重檢:等 VIX 降溫再買,舊結論不成立
2020 年舊文的主打結論是:VIX 飆高代表恐慌還沒結束,應該等它降溫(曾破 40、回落到 30 以下)再進場,當時看到的 4 次訊號全部獲利。全樣本重跑後,這個結論翻了一半:
| 進場日 | VIX 收盤 | 250 日報酬 | 期間最深跌幅 |
|---|---|---|---|
| 1998-10-29 | 29.50 | +19.4% | 0.0% |
| 2001-10-25 | 29.46 | -18.5% | -29.4% |
| 2002-08-15 | 29.43 | +5.8% | -16.5% |
| 2002-11-01 | 29.30 | +16.2% | -11.1% |
| 2009-05-19 | 28.80 | +25.2% | -3.2% |
| 2010-05-10 | 28.84 | +15.1% | -11.8% |
| 2011-10-14 | 28.24 | +17.0% | -5.4% |
| 2015-08-27 | 26.10 | +9.4% | -8.0% |
| 2020-05-08 | 27.98 | +43.4% | -3.7% |
| 2025-04-17 | 29.65 | +34.9% | -2.4% |

降溫進場在 2008 那一輪確實漂亮:2009 年 5 月 19 日才進場,避開了訊號 A 在 2008 年 9 月進場後 38.9% 的下殺,持有期間最深只回檔 3.2%,最後賺 25.2%。但它在 2001 年接到了另一把刀:2001 年 10 月 25 日 VIX 降溫、訊號成立,之後網路泡沫繼續跌到 2002 年 10 月,250 日下來虧 18.5%,途中最深虧 29.4%,比訊號 A 在全樣本的任何一次都慘。
兩相比較:訊號 B 的勝率較高(90% 對 83%)、平均報酬較低(+16.8% 對 +22.1%)、最差一次更深。「等降溫」把接刀的痛從 2008 移到了 2001,並沒有消除它。更要緊的是樣本只有 10 次對 12 次,這種幅度的差異完全可能是雜訊。2020 年舊文用 4 個樣本宣稱降溫進場「可能是比較好的投資方法」,是典型的小樣本過度推論,本次重跑正式收回這個說法。
門檻與持有期敏感度:40 是恐慌,30 只是緊張
只測一組參數容易被「剛好漂亮」的數字騙。把門檻換成 30、40、50,持有期換成 60、125、250 個交易日,九宮格全測:

| 門檻 | 樣本數 | 持有 60 日 | 持有 125 日 | 持有 250 日 |
|---|---|---|---|---|
| VIX > 30 | 31 次 | +3.6%(勝率 65%) | +5.5%(勝率 61%) | +6.1%(勝率 61%) |
| VIX > 40 | 12 次 | +8.2%(勝率 92%) | +13.1%(勝率 92%) | +22.1%(勝率 83%) |
| VIX > 50 | 3 次 | +8.1%(勝率 67%) | +13.2%(勝率 67%) | +24.3%(勝率 67%) |
兩個重要的讀法:
- 門檻 30 的成績比無條件基準還差:250 日平均 +6.1%、勝率 61%,輸給任意時點進場的 +10.0% 與 81%。VIX 30 出頭通常代表回檔還在進行中,恐慌未到極端就進場,等於在下跌途中接刀。「VIX 高就買」的口訣,門檻設錯比不設還糟。
- 門檻 50 的數字雖然更高,但樣本只剩 3 次(2008、2020 與其後續),統計上不構成證據。門檻 40 是樣本數與報酬之間比較合理的平衡點,這也是為什麼本文維持舊文參數不動,避免事後挑參數的嫌疑。
把訊號做成連續策略:輸給買進持有
事件研究回答「訊號後平均會怎樣」,但很多讀者真正想問的是:把它當策略執行,長期績效如何?做法:訊號 B 成立就買進 SPY(含股息)持有 250 個交易日,期間再有訊號就延長,其餘時間空手,每次進出場各扣 0.1% 摩擦成本:

| 指標(1993-2026) | 訊號 B 連續部位版 | SPY 買進持有 |
|---|---|---|
| 總報酬 | +371.6% | +2,900.7% |
| 年化報酬(CAGR) | 4.76% | 10.73% |
| 日夏普比率 | 0.55 | 0.64 |
| 最大回撤 | -34.2% | -55.2% |
| 持倉時間佔比 | 26.8% | 100% |
| 完整進出次數 | 7 次 | 0 次 |
結果一翻兩瞪眼:33 年下來總報酬差了七倍以上。訊號本身並沒有失準,持倉期間的報酬仍優於平均;真正的問題是恐慌訊號太稀有:73% 的時間抱著現金看市場上漲,錯過的複利遠大於恐慌進場賺到的超額。本回測的空手期間以零報酬計,若計入貨幣市場利息,連續版年化會略高一些,但量級差距不會翻轉。風險調整後也沒有佔到便宜:日夏普 0.55 還低於買進持有的 0.64,距離本站策略文常用的 1.5 標準更遠。
所以這個訊號的正確用途是清楚的:它是「手上剛好有閒置資金時,值得加碼的時點訊號」,承擔的是已知較淺的回撤(-34.2% 對 -55.2%);它不能取代長期持有部位。想看更多把單一指標做成擇時策略的同類實驗,可以對照美國失業率擇時 S&P 500 的回測,結構性的限制非常類似。
2022 年的盲點:整年空頭,VIX 卻沒收在 40 以上
這是全樣本重跑最有價值的發現之一。2022 年 S&P 500 從高點到低點以收盤計下跌 25.4%,是 2008 年以來最長的空頭之一,但 VIX 收盤全年最高只有 36.45(2022 年 3 月 7 日),訊號 A 與訊號 B 全程沒有觸發。等恐慌訊號進場的人整年空手,既沒有在低點買到,也沒有參與 2023 年的反彈起點。
2024 年 8 月 5 日的日圓套利平倉恐慌則暴露另一種失準:VIX 盤中一度衝到 65.73,收盤卻只剩 38.57,以收盤價判斷的規則同樣沒有訊號,而那天事後看是個不錯的買點。
兩件事指向同一個結構性限制:VIX 事件訊號抓的是「急跌」,抓不到「緩跌」,也抓不到「盤中恐慌、尾盤收斂」。2022 年式的陰跌沒有恐慌尖峰,整段下跌對這套規則是隱形的。如果你的進場計畫完全依賴恐慌訊號,就要接受某些空頭從頭到尾不會給你訊號。同場加映:大跌後除了買大盤,還可以用 Python 篩選逆勢強勢股,那是另一種利用恐慌的方式。
學術文獻怎麼看 VIX 與前瞻報酬
恐慌買點的邏輯並非民間偏方,有對應的研究脈絡,引用時也要分清楚每篇支持的是哪一段機制:
- Whaley (2000) 在《The Investor Fear Gauge》把 VIX 定位成投資人恐懼計,指出 VIX 的異常高點常對應市場短期底部。「VIX 高=逆勢買點」這個直覺的學術源頭就是這篇。
- Giot (2005) 按隱含波動率水位分組檢驗後續指數報酬,發現極高 VIX 水位之後的中長期前瞻報酬顯著為正。本文「突破 40 後 250 日平均 +22.1%、門檻 30 反而無效」的形狀,與他的分組結果同方向。
- Bekaert & Hoerova (2014) 把 VIX 平方拆成「預期實際方差」與「方差風險溢酬」兩個成分,發現對未來股市報酬有預測力的主要是後者。這給恐慌買點一個機制解釋:VIX 飆高時投資人為承擔波動索取超額補償,這份補償之後以較高的前瞻報酬實現。
注意這三篇支持的都是「極端恐慌後的前瞻報酬偏高」,沒有任何一篇宣稱以 VIX 擇時能勝過長期持有,這與本文連續部位版的結果一致。
回測方法與限制
漂亮數字沒有方法支撐就只是行銷。本文的口徑與沒做的事,逐項列明:
| 項目 | 本文做法 |
|---|---|
| 交易成本 | 事件研究不含任何成本與稅;連續部位版每次進出場各扣 0.1%。美股 ETF 沒有台股的證交稅,實際成本以券商手續費與買賣價差為主 |
| 滑價 | 未假設。訊號以收盤價認定並假設同日收盤價成交,實際執行需盤中估算 VIX 或次日開盤進場,會有小幅落差 |
| 標的與股池 | 無選股,單一標的。事件研究用 ^GSPC 價格指數(不含股息,250 日報酬約低估 2 個百分點),連續部位版用 SPY 調整收盤(含股息) |
| 流動性 | SPY 是全球流動性最高的 ETF 之一;指數本身不可直接交易 |
| 排除類別 | 不適用。指數成分股的更替由 S&P 維護,本文層級不受個股下市影響 |
| 前視偏差 | VIX 與指數皆用當日收盤,無財報或公告對齊問題 |
| 權重 | 全倉單一部位,無上限設定問題 |
| 周轉率 | 連續部位版 33 年只有 7 次完整進出,成本影響極小;空手期間現金報酬以零計,未計入利息 |
| 樣本內外 | 全段 in-sample,未做樣本外或滾動測試。門檻 40/30 與持有 250 日沿用 2020 年舊文設定、未重新優化,降低了事後挑參數的嫌疑,但 12 次與 10 次事件的統計力本來就有限,且 2020 年三次訊號持有期重疊、非獨立樣本 |
用 Python 自己重跑一次
核心邏輯不到 20 行。下載資料、定義訊號、算前瞻報酬:
顯示程式碼
import pandas as pd
import yfinance as yf
# 下載 VIX 與 S&P 500(價格指數)收盤價
vix = yf.download("^VIX", start="1990-01-01", auto_adjust=True)["Close"].squeeze()
sp500 = yf.download("^GSPC", start="1990-01-01", auto_adjust=True)["Close"].squeeze()
# 對齊兩個序列的交易日
common = vix.index.intersection(sp500.index)
vix = vix.reindex(common)
sp500 = sp500.reindex(common)
# 訊號 A:VIX 收盤首次突破 40(前 30 個交易日內不得出現過突破)
panic = vix > 40
first_panic = panic & (panic.shift(1).rolling(30, min_periods=1).sum() == 0)
# 每次訊號後持有 250 個交易日的前瞻報酬
forward_250 = sp500.shift(-250) / sp500 - 1
event_returns = forward_250[first_panic].dropna()
print(event_returns.round(3))
print("平均報酬:", round(event_returns.mean() * 100, 1), "%")
print("勝率:", round((event_returns > 0).mean() * 100), "%")含訊號 B、敏感度矩陣與連續部位版的完整腳本可以下載:strategy.py。重跑時資料比 2026 年 6 月更長,數字會略有不同,屬正常現象。
VIX 對台股投資人同樣有用。台股與美股高度連動,本站在 4 種均線指標濾網實測中,把 VIX 長短均線交叉當成台股部位的空頭濾網跑過完整回測,與本文的「美股、事件式進場、固定持有期」是兩種互補的用法。想把這類規則套在台股策略上,用 FinLab 的 Python 套件最快:pip install finlab 之後 from finlab import data 即可取得台股資料,執行回測時套件會自動引導登入;搭配 yfinance 取 VIX,就能複製本文流程。從零開始的讀者可以先讀量化交易完整指南建立框架,再用程式交易教學把想法變成可自動執行的程式。
常見問題 FAQ
VIX 指數是什麼意思?和 S&P 500 是什麼關係?
VIX 是用 S&P 500 選擇權價格反推的未來 30 天年化隱含波動率,反映市場願意為「保險」付多少錢。它與 S&P 500 高度負相關:指數急跌時避險需求暴增,VIX 飆高;指數平穩上漲時 VIX 通常在 20 以下。
VIX 多少算高?多少算恐慌?
1990 年以來 VIX 收盤中位數是 17.6。20 到 30 屬於緊張,30 到 40 是恐慌,收盤突破 40 是極端恐慌,36 年只發生 12 次、平均約三年一次。歷史最高收盤是 2020 年 3 月 16 日的 82.69。
VIX 超過 40 就應該買美股嗎?
歷史統計站在買方這邊:12 次突破 40 後買進持有 250 個交易日,平均報酬 +22.1%、勝率 83%。但 2008 年那次進場後又跌了 38.9% 才見底,2001 年那次最終虧 14.3%。它是勝算不錯的加碼時點,前提是你拿的是可以承受途中再跌四成的閒置資金。
等 VIX 降溫再進場,會比恐慌當天買更好嗎?
全樣本的答案:勝率較高(90%)、平均報酬較低(+16.8% 對 +22.1%)、最差一次更深(2001 年虧 18.5%)。2020 年舊文宣稱降溫進場較好,是 4 個樣本的過度推論,更長的資料不支持。
為什麼 2022 年美股大跌,VIX 卻沒有給訊號?
2022 年是緩跌:S&P 500 收盤計最深跌 25.4%,但跌勢分散在十個月,沒有單日恐慌尖峰,VIX 收盤最高只到 36.45。恐慌訊號的結構性限制就是只抓急跌,抓不到陰跌。想對崩盤型態做更系統的偵測,可以參考 LPPL 泡沫模型的 Python 實作或選擇權 Put/Call 未平倉比率的避險訊號。
VIX 本身可以買嗎?
VIX 是計算出來的指數,不能直接買賣。可交易的是 VIX 期貨、選擇權與相關 ETN/ETF,但這些工具有轉倉成本與期限結構問題,長期持有的損耗極大,性質與「買進恐慌指數等它漲」的直覺差距很大,不適合用本文的持有一年框架去操作。
VIX 歷史資料去哪裡下載?
CBOE 官網提供 1990 年起的每日歷史資料;用 Python 最方便的做法是 yfinance 的 ^VIX 代碼,一行程式碼取得完整序列,詳見 yfinance 下載全球指數教學。對量化名詞不熟的話,詞彙表整理了波動率、夏普比率等核心定義。
延伸閱讀
- 用 Python 回測美國失業率擇時 S&P 500:另一個單一總經指標的美股擇時實測
- 4 種均線指標濾網實測:含 VIX 均線交叉的台股空頭濾網版本
- LPPL 數學模型預測股票崩盤時機:從泡沫動力學的角度偵測崩盤
- Put/Call 未平倉比率避開台股大跌:選擇權籌碼的避險訊號
- 大跌後用 Python 找出強勢股:恐慌過後的選股角度
- 台股選股回測完整指南:把擇時與選股放進同一個框架
投資警語:本文僅供教學參考,不構成投資建議。過去績效不代表未來表現,投資有風險。
最後更新:2026-06|回測區間:1990-01 ~ 2026-06(資料截至 2026-06-10)|作者:FinLab 量化研究團隊(經量化研究員審閱)
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始

