A return without a denominator is a boast. "Up 30% this year" tells you nothing until you know how much risk was rented to earn it — a 30% return from a strategy that quietly risked ruin is worse, not better, than a steadier 12%. Risk-adjusted performance is the discipline of dividing the reward by the risk, and the choice of denominator is where the honesty lives. Four numbers do most of the work, and each answers a slightly different question.
1. Sharpe — reward per unit of total volatility
The Sharpe ratio (Sharpe 1966/1994) is the original: mean excess return divided by the standard deviation of returns. It is the reward-to-variability ratio, the lingua franca of performance — annualize it by multiplying by the square root of the number of periods per year, and every desk on earth will know what you mean. Its one blind spot is that it treats all volatility as bad, punishing a strategy for its upside surprises exactly as much as for its downside ones.
2. Sortino — punish only the downside
Upside volatility is not risk; it is the point. The Sortino ratio (Sortino & Price 1994) fixes Sharpe's symmetry by dividing excess return by the downside deviation — the target semideviation, which counts only the returns that fell below your target:
downside deviation = √( (1/N) · Σ min(rᵗ − target, 0)² )
For a strategy with a fat right tail and a controlled left one — the shape you actually want — Sortino reads higher than Sharpe, because it stops charging you for your good days. It is the more honest ratio whenever the return distribution is asymmetric, which is almost always.
3. Maximum drawdown — the number you have to live through
Volatility is what a strategy does; drawdown is what an investor endures. Maximum drawdown is the largest peak-to-trough decline of the compounded equity curve, and it is often the real constraint on whether a strategy is survivable — the number that decides whether you stay invested at the bottom or capitulate at the worst possible moment. Two strategies with identical Sharpe ratios can have wildly different worst-case paths, and the one with the shallower drawdown is the one you can actually hold.
4. Calmar — return per unit of pain
Calmar closes the loop by dividing the annualized return by the maximum drawdown: growth earned per unit of worst-case decline. Where Sharpe and Sortino measure reward against the wobble of the path, Calmar measures it against the deepest hole in it. For anyone whose tolerance is defined by how far down it can go before they quit, it is the most intuitive of the four.
5. Computing them
Our open-source orderflow-metrics library ships all of them, dependency-free, in TypeScript and Python, with the conventions documented so the numbers are reproducible:
import { sharpeRatio, sortinoRatio, maxDrawdown, calmarRatio } from "orderflow-metrics";
const returns = [0.011,-0.006,0.009,-0.021,0.014,0.004,-0.010,0.017,-0.028,0.008,0.012,-0.007];
sharpeRatio(returns); // 0.0172 — reward per unit of total volatility (per period)
sortinoRatio(returns); // 0.0231 — per unit of downside deviation only
maxDrawdown(returns); // 0.0280 — worst peak-to-trough drop, 2.8%
calmarRatio(returns, 252); // 1.40 — annualized return per unit of max drawdown
On this series Sortino (0.0231) sits above Sharpe (0.0172) exactly because it ignores the upside moves that inflate the total-volatility denominator. The Python distribution exposes the same functions (sharpe_ratio, sortino_ratio, max_drawdown, calmar_ratio), plus annualized_sharpe_ratio. They pair with the tail-risk tools in our Value-at-Risk article and the wider market-microstructure toolkit — install from our open-source page (npm and PyPI, MIT-licensed).
6. Conclusion
The same return can be a triumph or a warning depending on what it is divided by. Sharpe measures it against total volatility, Sortino against the downside alone, drawdown against the deepest hole in the path, and Calmar against worst-case pain. Report one and you have a headline; report all four and you have an audit. Explore the rest of the toolkit in our quantitative research library, or read the implementation in our open-source metrics.