最大回撤、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-metrics→drawdown - 投組
get_portfolio_analytics→drawdown(另保留舊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 三個一起看(最實用的判讀矩陣)
| MDD | Ulcer | Calmar | 判讀 |
|---|---|---|---|
| 低 | 低 | 高 | 🟢 理想投資標的(穩中求勝) |
| 深 | 低 | 高 | 🟡 閃崩型(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 規劃)