Calmar Ratio: Formula, Max Drawdown, and Python Implementation
The Calmar Ratio, introduced by Terry Young in 1991 in the newsletter California Managed Accounts Reports (hence "Cal-Mar"), measures risk-adjusted return by dividing annualized geometric return by maximum drawdown. Where the Sharpe Ratio and Sortino Ratio penalize volatility, the Calmar uses the worst actual loss sequence in the strategy's history — the number traders and allocators feel directly in their accounts. CTA fund managers and trend-following allocators prefer Calmar because it answers a concrete question: how many years of annual return does it take to recover from the worst observed drawdown?
A Calmar of 1.0 means recovery takes one year of CAGR. A Calmar of 2.0 means recovery takes six months. A Calmar of 0.5 means two full years. The ratio translates directly into recovery-time language.
The Calmar Ratio Formula
The formula has two components: the annualized geometric return (CAGR) and the maximum drawdown expressed as a positive decimal:
A Calmar above 1.0 means the annual return exceeds the worst drawdown — the strategy claws back its worst loss within a year of CAGR. Below 1.0, recovery from the worst drawdown takes more than a full year of average gains.
Maximum Drawdown
Maximum drawdown (MaxDD) is the largest peak-to-trough decline in the equity curve, expressed as a decimal (e.g., 0.35 for a 35% decline). It is computed by scanning forward through the compounded equity curve, tracking the running peak, and recording the deepest trough relative to that peak:
The key implementation detail: drawdown is computed on the compounded equity curve starting at 1, not on the raw return series. This ensures the percentage decline is measured correctly from the actual capital peak. A return series of [+50%, −40%, +20%] has a max drawdown of 40% only from the intermediate peak — the equity curve [1.0, 1.5, 0.9, 1.08] correctly captures the 0.9/1.5 − 1 = −40% trough.
Annualized Return (CAGR)
The Calmar uses geometric annualized return — the compound annual growth rate (CAGR) — not the arithmetic mean. For n period returns with N periods per year:
The geometric formula correctly captures compounding losses. A strategy with +50% in year 1 and −50% in year 2 has an arithmetic mean of 0% per year but a CAGR of −13.4% — because 1.5 × 0.5 = 0.75, representing a 25% total loss over two years. Pairing CAGR with max drawdown ensures both components reflect real dollar outcomes, not statistical abstractions.
Interpretation Benchmarks
Calmar benchmarks are lower than their Sharpe equivalents because max drawdown is typically a much larger number than period standard deviation. A strategy with 20% max drawdown and 18% CAGR has Calmar 0.9 — solid risk-adjusted performance — but would show Sharpe roughly in the 1.0–1.5 range:
| Annualized Calmar | Verdict | Notes |
|---|---|---|
| < 0 | Losing | CAGR is negative. Stop trading the setup. |
| 0 – 0.5 | Weak | Equity-index passive range (~0.3–0.5). Recovery takes 2+ years of CAGR. |
| 0.5 – 1.0 | Marginal | Covers costs with limited margin. Recovery takes 1–2 years of CAGR. |
| 1.0 – 3.0 | Good | Target range for systematic strategies. Annual return exceeds worst drawdown. |
| > 3.0 | Exceptional — scrutinize | Often indicates look-ahead bias, short sample, or near-zero observed drawdown. |
Recovery interpretation: Calmar directly encodes recovery time. Calmar 1.0 → one year of CAGR recovers the worst drawdown. Calmar 0.5 → two years. Calmar 2.0 → six months. For allocators who ask "how long until I'm whole?", Calmar is the most immediately intuitive of the three standard ratios.
Python Implementation
import math
def max_drawdown(equity_curve: list[float]) -> float:
"""Peak-to-trough percentage decline as a decimal (0.0 to 1.0)."""
peak = float("-inf")
max_dd = 0.0
for val in equity_curve:
if val > peak:
peak = val
if peak <= 0:
continue
dd = min((peak - val) / peak, 1.0)
if dd > max_dd:
max_dd = dd
return max_dd
ANNUALIZATION = {
"daily": math.sqrt(252),
"weekly": math.sqrt(52),
"monthly": math.sqrt(12),
"annual": 1.0,
}
def calmar_ratio(returns: list[float], periodicity: str = "daily") -> float:
"""
Annualized geometric return (CAGR) divided by maximum drawdown.
Args:
returns: list of period returns as decimals (e.g., 0.01 for 1%)
periodicity: "daily" | "weekly" | "monthly" | "annual"
Returns Calmar Ratio. Returns infinity when max drawdown is zero and
return is positive; 0 when max drawdown is zero and return is non-positive.
"""
n = len(returns)
if n < 2:
return 0.0
factor = ANNUALIZATION.get(periodicity, ANNUALIZATION["daily"])
periods_per_year = factor ** 2 # sqrt(252)**2 = 252, sqrt(52)**2 = 52, etc.
# Equity curve starting at 1.0 (compounded from each period return)
equity = [1.0]
for r in returns:
equity.append(equity[-1] * (1 + r))
if any(v <= 0 for v in equity):
return 0.0
total_return = equity[-1] - 1
dd = max_drawdown(equity)
if dd == 0:
return float("inf") if total_return > 0 else 0.0
# CAGR: (1 + total_return)^(periods_per_year / n) - 1
annualized_return = (1 + total_return) ** (periods_per_year / n) - 1
return annualized_return / dd
Example: Evaluating Three Strategies Side by Side
# Compare Sharpe, Sortino, Calmar on a trend-following strategy
# annualized_sharpe / annualized_sortino: see the Sharpe & Sortino guides
daily_returns = [...] # your return array as decimals
sharpe_val = annualized_sharpe(daily_returns, periodicity="daily")
sortino_val = annualized_sortino(daily_returns, periodicity="daily")
calmar_val = calmar_ratio(daily_returns, periodicity="daily")
print(f"Sharpe: {sharpe_val:.3f} (excess return / total vol)")
print(f"Sortino: {sortino_val:.3f} (excess return / downside vol)")
print(f"Calmar: {calmar_val:.3f} (CAGR / max drawdown)")
print(f"Sortino/Sharpe: {sortino_val/sharpe_val:.2f}x (expect ~1.41 for normal)")
# CTA trend-followers typically: Sharpe 0.5–1.0, Sortino 1.0–2.0, Calmar 0.5–1.5
When Calmar Diverges from Sharpe and Sortino
The three ratios tell different stories and diverge most on strategies with a single catastrophic historical drawdown, or on strategies with asymmetric return distributions:
- High Sharpe, Low Calmar: Daily volatility is moderate, but the strategy experienced one large drawdown that dominates the Calmar denominator — even if the strategy recovered, the historical max drawdown remains. Common in equity long-only strategies during bear markets, or in option-selling strategies with periodic blowups.
- Low Sharpe, High Calmar: Daily volatility is high (many oscillating periods), but the strategy never had a severe directional peak-to-trough decline. Common in mean-reversion strategies that swing around a stable level. The daily noise is high but directional risk is structurally limited.
- All three high: The ideal profile — consistent excess return, low downside skew, and proportionally small drawdowns. When Sharpe > 2, Sortino > 3, and Calmar > 3 simultaneously in a backtest, scrutinize for look-ahead bias before committing capital.
Option-selling paradox: Covered-call and cash-secured-put strategies can show excellent Sharpe and Calmar during calm markets — premium harvesting produces steady gains with small observed drawdowns. Both ratios collapse when short gamma positions blow up in volatility events. Report max drawdown during high-volatility regimes (e.g., VIX above 30) alongside the full-history Calmar for a more complete picture.
Calmar vs. Other Risk Metrics
| Metric | What it penalizes | When to prefer it |
|---|---|---|
| Sharpe Ratio | Total volatility (up and down) | Default choice; symmetric payoff strategies; comparing strategies with similar skew |
| Sortino Ratio | Downside volatility only | Trend-following, long volatility; strategies with known positive skew |
| Calmar Ratio | Max drawdown (not volatility) | CTA-style funds; drawdown-sensitive allocators; strategies where recovery time matters |
| Information Ratio | Tracking error vs. benchmark | Long-only equity strategies benchmarked against an index |
Best practice is to report Sharpe, Sortino, Calmar, and max drawdown together. Sharpe captures average vol efficiency; Sortino reveals skew direction; Calmar anchors recovery time; max drawdown is the absolute pain threshold. AlgoDrill's calculator computes all three simultaneously from your return series.
Failure Modes: When Calmar Misleads
- Missing-regime sample bias: A Calmar computed on a pure bull-market period will show artificially low max drawdown because the strategy never encountered a real bear market. When conditions change, max drawdown can jump from 10% to 40%, collapsing Calmar from 3.0 to 0.75 overnight. Always check that the backtest spans at least one full market cycle (bull and bear).
- V-shaped recovery distortion: After a steep drawdown followed by rapid recovery, CAGR spikes while max drawdown remains at the historical peak. Calmar appears temporarily elevated right after recovery even though the long-run profile is unchanged. Rolling Calmar (3-year window) smooths this artifact.
- CAGR vs. arithmetic mean confusion: Using arithmetic annualized return (mean × N) instead of CAGR overstates the numerator for volatile strategies due to variance drag. A 25% arithmetic return with 20% annual volatility corresponds to a CAGR closer to 23% (variance drag ≈ σ²/2 = 2 points). Always use the geometric compounding formula.
- Short sample: Max drawdown can only stay flat or increase as the sample grows — a longer backtest always reveals deeper drawdowns. A 6-month backtest may show MaxDD of 5% when the true 5-year max is 35%. Treat any Calmar computed on fewer than 60 periods as a directional signal, not a firm conclusion.
- Single-event denominator sensitivity: One catastrophic month can permanently rewrite the Calmar denominator, even if the strategy recovers fully. A strategy with three years of Calmar 2.0 can become Calmar 0.4 after one severe month if max drawdown triples. This path-dependence is a structural difference from Sharpe, where no single observation dominates as heavily.
Calmar and Position Sizing
Like Sharpe and Sortino, Calmar does not directly determine position size — that is the Kelly Criterion's domain. But Calmar provides a critical sanity check: a strategy with Calmar below 0.5 has historical drawdowns that exceed annual gains, making Kelly sizing potentially reckless — even optimal Kelly sizing cannot overcome a denominator that erases more than a year of CAGR. The practical sequence: compute Calmar to evaluate whether the drawdown profile is survivable; use Sharpe to evaluate per-unit-of-volatility efficiency; apply Kelly to determine the optimal fraction.
A high Calmar with low Sharpe is typically a mean-reversion profile — steady but not efficient per unit of daily noise. A high Sharpe with low Calmar is a potential tail-risk situation — the strategy looks great on daily data but experienced (or is at risk of) a severe sustained drawdown. Both profiles should drive different Kelly fractions and different stop-loss rules.
Frequently Asked Questions
- What is a good Calmar Ratio for algorithmic trading?
- A Calmar Ratio above 1.0 is generally considered the baseline for a viable systematic strategy — it means your annualized return exceeds your worst historical drawdown. Above 3.0 is exceptional for a live strategy and warrants scrutiny for look-ahead bias, a short sample that omitted bear-market regimes, or overfitting. Passively managed equity indexes show long-run Calmar in the 0.3–0.5 range. CTA funds with verified multi-decade track records typically show Calmar in the 0.5–1.5 range. Values below 0.5 suggest either thin edge or excessive drawdown relative to return.
- How is the Calmar Ratio different from the Sharpe Ratio?
- The Sharpe Ratio divides excess return by standard deviation — it captures average volatility across all periods. The Calmar Ratio divides annualized return by maximum drawdown — it captures the worst single loss sequence in the strategy's entire history. Calmar is more intuitive for drawdown-sensitive allocators: it directly answers how many years of annualized return it would take to recover from the worst drawdown. A Calmar of 2.0 means the worst drawdown equals six months of CAGR; a Calmar of 0.5 means the worst drawdown equals two full years of CAGR.
- What time window should I use for the Calmar Ratio?
- The standard hedge-fund reporting convention is a 36-month (3-year) rolling window, which avoids penalizing a fund for a deep drawdown that occurred more than three years ago and has since been recovered. For systematic strategy evaluation, using the full backtest history is more conservative and appropriate — it captures every drawdown the strategy ever encountered, not just recent ones. Rolling Calmar (computed monthly on a trailing 36-month window) is useful for tracking how the ratio evolves across market regimes.
- Why does the Calmar Ratio use geometric (CAGR) return instead of arithmetic return?
- Geometric annualized return (CAGR) represents what a buy-and-hold investor actually earns over time. Arithmetic return overstates performance for volatile strategies: a strategy that returns +50% one year and -50% the next has an arithmetic mean of 0% but a geometric return of -13.4% (because 1.5 x 0.5 = 0.75). Since max drawdown captures actual peak-to-trough capital loss, pairing it with geometrically compounded return ensures both components reflect real dollar outcomes — you cannot use CAGR earnings to offset drawdown in arithmetic terms.
- Can the Calmar Ratio be negative?
- Yes. A negative Calmar means the strategy's annualized return (CAGR) is negative — it is losing money. Because max drawdown is always 0 or greater, a negative Calmar unambiguously indicates a losing strategy. Unlike the Sharpe Ratio (where negative-Sharpe comparisons become unreliable), two negative Calmar strategies can be compared meaningfully: -0.1 is better than -0.5 because the first loses less per unit of its historical worst drawdown.
- What does a very high Calmar Ratio mean in backtesting?
- A Calmar above 5.0 in a backtest almost always indicates a methodology artifact. The most common cause is a short sample period that omitted bear-market regimes — the strategy never experienced its worst possible drawdown, so max drawdown is artificially near zero. Other causes: look-ahead bias inflating the CAGR; survivorship bias; or extreme overfitting. Check that the backtest spans at least one full market cycle (bull and bear). A Calmar computed on 2020–2021 data alone will almost always be misleadingly high because the COVID crash recovery dominated returns while the drawdown reset.
Run the Calmar Ratio calculator on your own return series — paste comma-separated returns and get annualized Sharpe, Sortino, and Calmar instantly.
Open Calmar Calculator → Drill Risk Metrics Flashcards →