Sortino & Downside Deviation — Only Penalizing Down Moves
4-section structure: Concept / How We Compute / How to Read / Caveats.
1. Concept
Sharpe Ratio is the most common risk-adjusted return metric. But it has a questionable assumption: it treats upside volatility as risk.
A rocketing stock has high standard deviation. Its Sharpe gets dragged down by upside moves — but upside is good for investors, not a risk to be punished.
Sortino fixes this:
Sortino = Excess Return / Downside Deviation Downside Deviation = √(mean(min(Rt − target, 0)²))
Only considers days when returns fall below target. Typically:
- target = 0 → only loss days
- target = Rf → below risk-free days
Upside volatility no longer pollutes the denominator, aligning better with intuitive "risk" perception.
2. How We Compute
Formula
Sortino = (annual return − annual Rf) / annual downside deviation
annual return = mean(daily_return) × 252
annual Rf = rf_daily × 252
annual dd = sqrt(mean(min(Rt − 0, 0)²)) × √252
Target Choice
We use target = 0 (distinguishing "loss day" vs "non-loss day"). Benefits:
- Easier cross-stock comparison
- Most intuitive for retail investors
MAR-based version with target = Rf_daily is supported in backend (UI toggle planned).
Rf Source
Reuses v2.43 dynamic Rf chain:
^IRX(US 13W T-Bill latest yield)- Taiwan CBC 10Y bond yield
- 1.5% fallback
Annual Rf is shown on card hover.
Individual vs Portfolio
- Stock: past 252 trading days' simple daily returns
- Portfolio: NAV-derived daily returns
- Identical formula, target, Rf — directly comparable
Insufficient Sample
Sample < 60 days or downside deviation = 0 → available: false.
3. How to Read
Level Table
| Sortino | Interpretation |
|---|---|
| > 2.0 | 🟢 Excellent |
| 1.0 – 2.0 | 🟢 Good |
| 0.5 – 1.0 | 🟡 Acceptable |
| 0 – 0.5 | 🟠 Borderline |
| < 0 | 🔴 Below Rf |
Sharpe vs Sortino Comparison (Most Useful Trick)
| Sharpe | Sortino | Interpretation |
|---|---|---|
| 1.0 | 1.0 | Symmetric up/down (normal) |
| 1.0 | 2.0 | Upside big, downside small → Sharpe underrates |
| 1.0 | 0.5 | Many down days → Sharpe missed the risk |
| neg | neg | Bad fundamentals, move on |
Rule of thumb: stocks with Sortino/Sharpe > 1.3 tend to "drop less" — worth prioritizing.
Portfolio Sortino Usage
-
1.0 → strategy sustainable
- < 0.5 → consider rebalancing (add negative-correlation assets, reduce high-vol positions)
Pair with P0.2 correlation matrix: low Sortino + high correlation → must rebalance.
4. Caveats
⚠️ Sharpe vs Sortino Aren't "Right vs Wrong"
- Sharpe: overall risk profile (including total vol)
- Sortino: investor-pain perspective (downside only)
Look at both. Modern portfolio management leans toward Sortino, but Sharpe remains academic standard.
⚠️ Pure Uptrend Inflates Sortino
If a stock only rises in the sample window (e.g., AI stocks 2023-2024), downside σ approaches zero and Sortino becomes extremely high (we show unavailable if σ=0). Don't treat such Sortino as sustainable — market reversals rebuild the denominator quickly.
⚠️ Most Sample-Sensitive of All Metrics
More reliant on tail events than Sharpe. If 252 days missed major downturns:
- downside σ too small
- Sortino inflated
- Actual drawdown will crash the number
Mitigate: combine with P1C.1 VaR/CVaR. VaR doesn't fake-high when sample has no big drops — it just says "can't compute" (insufficient sample).
⚠️ Not for Short Horizons
- < 3 months → too few samples, unstable
- Minimum 60 days; recommend 252 days
⚠️ Target Philosophy
Using target = 0 per above rationale. Some institutions use target = Rf (MAR) — meaning "losses are returns below X%". Both valid, different perspectives:
- target = 0 → sensitivity to absolute losses
- target = Rf → sensitivity vs risk-free baseline
Backend supports target = Rf; UI toggle not yet exposed.
Further Reading
- Sharpe Ratio
- VaR vs CVaR: Worst 5% Loss
- Beta & Volatility
- Ulcer Index + Calmar (Phase 1C.3 upcoming)
Try It
- Stock Analysis → Risk: Sortino card beside VaR/CVaR
- Portfolio: Portfolio Sortino below Rolling Sharpe
- Click 📐 for formula, target, Rf source, sample size
- Compare same stock's Sharpe vs Sortino — big gap means asymmetric up/down behavior