投資教室⚠️ 風險最大回撤、Ulcer Index、Calmar — 三個角度看「跌得有多痛」
⚠️ 風險6 分鐘閱讀

最大回撤、Ulcer Index、Calmar — 三個角度看「跌得有多痛」

MDD 看最深、Ulcer 看平均、Calmar 看報酬配不配得上痛苦。三個互補,心理無法忍受大回撤的投資人優先看 Calmar。

最大回撤、Ulcer Index、Calmar — 三個角度看「跌得有多痛」

本文採用本站四段式教學結構:概念 / 本站怎麼算 / 怎麼看數字 / 注意事項。

1. 概念

風險指標有很多種。波動度(標準差)告訴你「上下晃動多大」;VaR / CVaR 告訴你「最糟的單日會虧多少」。

但對投資人來說,最直接的痛苦感受是:

「從我買進到現在,這檔從最高點跌了多少?」

這就是回撤(Drawdown)。回撤有三個互補的衡量方式:

指標回答的問題
Max Drawdown (MDD)歷史上最深的一次回撤有多深?
Ulcer Index (UI)整段歷史平均有多痛(不只看最深那次)?
Calmar Ratio每承受 1% 最大回撤,換來多少年化報酬?

2. 本站怎麼算

2.1 Max Drawdown (MDD)

running_max = 到每個時間點為止的歷史最高價
drawdown_t = (price_t − running_max_t) / running_max_t   # 負值
max_dd = min(drawdown)                                    # 最負那個

:某股從 100 漲到 150,再跌到 90:

  • running_max = 150
  • drawdown = (90 − 150) / 150 = −40%
  • MDD = −40%

2.2 Ulcer Index (UI)

ulcer = √(mean(drawdown²)) × 100

取每日回撤的平方平均開根號再乘 100。數學上是 quadratic mean,會放大深度回撤。

為什麼是「平均有多痛」而不是「最深那次」?

  • 你看 MDD = −40% 可能只是某一個 trough
  • 但如果這檔在 20 天內就反彈回頂了 → 痛苦短暫
  • 另一檔 MDD 一樣 −40%,但在底部盤了 6 個月 → 痛苦漫長

Ulcer 能區分這兩種;MDD 不能。

2.3 Calmar Ratio

annual_return = (price_end / price_start) ^ (252 / n_days) − 1
calmar = annual_return / |max_drawdown|

這是**「報酬 / 最慘時痛苦」**的比率。Calmar 把年化報酬跟 MDD 綁在一起,回答:「投資人得到的收益,配得上所承受的最大痛苦嗎?」

2.4 資料源與窗口

  • 個股:過去 252 個交易日收盤(來自 _calc_risk_series
  • 投組:投組日 NAV 序列
  • 樣本 < 30 日 → available: false

2.5 API 欄位

  • 個股 /api/stock/{symbol}/risk-metricsdrawdown
  • 投組 get_portfolio_analyticsdrawdown(另保留舊 max_drawdown_pct 正數欄位相容 legacy UI)

3. 怎麼看數字

3.1 Max Drawdown 色階

MDD 範圍色階判讀
> −10%🟢穩健(債券型、公用事業)
−10% ~ −25%🟡一般權值股、大型成長股
< −25%🔴高波動成長股、週期股

3.2 Ulcer Index 色階

UI 範圍色階判讀
< 5🟢低痛苦(穩健股、存股標的)
5–12🟡中等
> 12🔴高痛苦(投機、小型股)

3.3 Calmar Ratio 色階

Calmar 範圍色階判讀
> 1.0🟢優秀(每 1% MDD 換 > 1% 年報)
0.3–1.0🟡合格
< 0.3🔴回撤不值得

3.4 三個一起看(最實用的判讀矩陣)

MDDUlcerCalmar判讀
🟢 理想投資標的(穩中求勝)
🟡 閃崩型(MDD 嚇人但歷史大部分時間平穩 + 報酬夠高)
🟡 拖泥帶水(沒大跌但長期低迷)
🔴 痛苦標的(深且久跌、報酬不足)

3.5 Sharpe / Sortino / Calmar 三者差異

比率分母的意涵心理對應
Sharpe總波動(上下都算)波動不耐性
Sortino下行波動只在乎下跌
Calmar單次最大回撤無法承受大崩盤的投資人

心理上無法忍受 −40% 回撤的人,應該優先看 Calmar。


4. 注意事項

⚠️ MDD 對樣本極端敏感

252 日內如果剛好沒發生大事件 → MDD 會很溫和 → Calmar 會漂亮。 牛市尾段的 Calmar 最有誤導性

對策

  • 搭配 P1C.1 的 VaR / CVaR 看尾部
  • 使用較長窗口(本站目前 252 日,未來會提供可切換)
  • 搭配 P2.3 歷史壓力測試(Phase 2 規劃)

⚠️ Max DD 沒有「重置」

本站用「一路走來 running max」的經典演算,回撤不會因為時間久就被遺忘

  • 某股 2008 年跌 −50%,2024 年還在看這個 MDD
  • 好處:長期體質呈現穩定
  • 壞處:早期一次巨震會「永遠掛記」

業界有些做法會用「滾動窗口 MDD」(例如過去 3 年 MDD),但會在窗口邊界跳動。本站選簡單穩定版。

⚠️ Ulcer Index 是「等級」不是「百分比」

雖然 Ulcer 顯示為數字(例如 8.5),它不是「平均回撤 8.5%」。數學上是 quadratic mean × 100。

正確讀法

  • 用於兩檔之間相對比較(A = 5 比 B = 10 的確「痛苦少一半」)
  • 不要當作「預期回撤」

⚠️ Calmar 牛市會虛高

  • 2020 年 3 月的崩盤後 → 2021 牛市中 Calmar 會爆表(MDD 小、年報高)
  • 這不代表未來會繼續

這是大家常誤判的點:Calmar 高 ≠ 風險低,只是過去剛好沒出事

⚠️ 投組的 Max DD 有 legacy 相容問題

  • 舊欄位 max_drawdown_pct正數(例:35.0 表示 −35%)
  • 新欄位 drawdown.max_drawdown_pct負數(例:−35.0 表示 −35%)

原因:舊 UI 依賴正數版本;新 UI 統一學術慣例用負值。API 兩者同時回傳。

⚠️ 樣本短時 Calmar 不穩

  • < 1 年樣本:年化報酬推算失真、MDD 可能還沒出現
  • 本站 min_sample = 30;建議至少 252 日才看 Calmar

延伸閱讀

  • 〈Sharpe Ratio:衡量你的投資效率〉
  • 〈Sortino 與下行標準差 — 只懲罰下跌波動〉
  • 〈VaR vs CVaR — 真的踩到最差 5% 會虧多少〉
  • 〈投組壓力測試〉(Phase 2 規劃)

動手試試看

  • 打開 個股分析 → 風險,VaR/CVaR/Sortino 下方新增 MDD / Ulcer / Calmar 三卡
  • 打開 投組頁,下一列可以看到組合版
  • 比較同一檔的 Sharpe / Sortino / Calmar — 選擇對你痛苦感受最重要的那個當決策主軸
  • 點 📐 查看公式與本站參數

學完了?自己動手試試看

用 CTSstock 的工具實際操作一次,加深理解

查看台積電的 MDD / Ulcer / Calmar