Sharpe Ratio & Sortino Ratio
9 min read
Compare risk-adjusted returns across strategies using the two most important performance ratios in quantitative finance.
9 min read
Compare risk-adjusted returns across strategies using the two most important performance ratios in quantitative finance.
A backtest with Sharpe 3.0 and a backtest with Sharpe 0.6 can describe the same strategy — the difference is what you put in the denominator. This lesson is about getting the denominator right.
The Sharpe ratio measures excess return per unit of total volatility: SR = (R_p − R_f) / σ_p. The Sortino ratio replaces σ_p with downside deviation σ_d, so only losses below a target (MAR) count as risk. Both are typically annualized by multiplying by √(periods per year) — for crypto's 24/7 market, that's √365 daily or √(365·24) hourly.
Prereq: you should be comfortable with mean and standard deviation before reading on.
The Sharpe ratio (William F. Sharpe, 1966) is the most widely cited risk-adjusted return metric in finance:
SR = (R_p - R_f) / sigma_p
where: R_p = mean portfolio/strategy return over the chosen period R_f = risk-free rate over the same period (often 0 for crypto) sigma_p = standard deviation of excess returns (R_p - R_f), not total
Sharpe's original paper defines σ on the excess return series (r_i − r_f,i), not the raw return series. In practice, when R_f is constant or zero, σ on excess and total returns is identical — so the distinction only matters when the risk-free rate fluctuates meaningfully (rare for short-horizon crypto, common for multi-year equity studies).
Equity markets trade ~252 days/year, so equity Sharpe is annualized as SR × √252. Crypto trades 24/7, so the right factor is √365 for daily returns and √(365·24) ≈ 93.6 for hourly returns.
Annualization factor by period - crypto daily uses sqrt(365), not sqrt(252)
Always disclose the annualization basis. A "Sharpe of 1.5" without a period is meaningless — it could be daily, monthly, or annualized.
The Sharpe ratio treats a 5% up-day and a 5% down-day as equally "risky" because variance is symmetric (squared deviations don't distinguish sign). For trend-following, long-vol, or asymmetric crypto strategies, that's a problem — Sharpe penalizes the very upside you're paid for.
Sortino & Price (1994) replace σ with downside deviation σ_d, summing only squared shortfalls below a target rate (MAR — Minimum Acceptable Return):
sigma_d = sqrt( (1/n) * sum_i min(r_i - MAR, 0)^2 ) Sortino = (R_p - MAR) / sigma_d
where: MAR = Minimum Acceptable Return (commonly 0 for crypto) sigma_d = downside deviation: only shortfalls below MAR contribute n = total observations (NOT only the negative ones)
Sharpe treats a 5% up-day and a 5% down-day as equally risky because variance is symmetric. Sortino (Sortino & Price, 1991/1994) replaces σ with σ_d, which only sums squared shortfalls below MAR. Result: strategies with positive skew (trend-following, long-vol) finally look as good on paper as they feel.
| Metric | Numerator | Denominator (risk) | Penalizes upside vol? | Best for |
|---|---|---|---|---|
| Sharpe | R_p − R_f | σ_p (total std) | Yes | Mean-reverting, near-Gaussian returns |
| Sortino | R_p − MAR | σ_d (downside std) | No | Trend-following, asymmetric strategies |
| Calmar | Annualized return | Max drawdown | No | Long-horizon evaluation, retail comprehension |
| MAR (Managed Accounts Reports) | CAGR | Max drawdown | No | CTAs, fund-comparison contexts |
| Information Ratio | R_p − R_benchmark | Tracking error | Yes | Active vs benchmark performance |
Sortino is typically ~1.3–1.5× the Sharpe for the same strategy when returns are negatively skewed less than the strategy is positively skewed. If your Sortino is lower than your Sharpe, you have negative skew — large rare losses dominating the downside tail.
Consider a BTC mean-reversion bot with 365 daily returns:
Step-by-step:
Worked example: BTC mean-reversion bot, 365 daily returns, R_f = 0
| Quantity | Computation | Value |
|---|---|---|
| Daily Sharpe | (0.10 - 0) / 2.0 | 0.05 |
| Annual Sharpe | 0.05 * sqrt(365) | 0.96 |
| Daily Sortino | (0.10 - 0) / 1.4 | 0.071 |
| Annual Sortino | 0.071 * sqrt(365) | 1.36 |
The gap between 0.96 and 1.36 is the asymmetry premium — the strategy's downside is meaningfully smaller than its total volatility, so Sortino rewards it.
Rules of thumb for annualized Sharpe in retail crypto context (caveats below):
| Annualized Sharpe | Interpretation |
|---|---|
| < 0 | Losing strategy |
| 0 – 1 | Marginal; could be noise |
| 1 – 2 | Decent retail edge |
| 2 – 3 | Strong; rare for discretionary, common for systematic |
| > 3 | Suspicious unless multi-strategy portfolio, market-neutral, or HFT |
A Sharpe above 3 in a single-strategy retail backtest almost always reflects overfitting, look-ahead bias, or survivorship bias — see biases in backtesting.
Both ratios are parametric — they assume σ summarizes risk and that returns are roughly Gaussian. Three failure modes matter:
Crypto liquidations, exchange outages, and gap risk produce returns far outside what σ implies. When tails are fat, σ understates true risk and SR overstates skill. Outliers can wreck your Sharpe — a single 8σ event in your sample makes the ratio worthless without robust adjustment.
See also skewness and kurtosis for the distributional context: negative skew + excess kurtosis = SR/Sortino flatter the strategy.
If you backtest 100 strategy variants and report the best Sharpe, you've inflated the estimate by approximately √(2·ln(N))·σ_SR ≈ 3·σ_SR for N=100. The Deflated Sharpe Ratio (Bailey & López de Prado, 2014) corrects for this.
The standard error of an estimated Sharpe is approximately:
SE(SR) \approx \sqrt{\frac{1 + 0.5 \cdot SR^2}{n}}
For n = 100 and SR = 1, SE ≈ 0.11 — meaning a "Sharpe of 1.0" is really "1.0 ± 0.22" at 95% confidence. Below 100 trades, your point estimate is noise. The Probabilistic Sharpe Ratio (PSR) gives you a confidence-adjusted version.
Bailey & López de Prado (2012, 2014) propose two corrections:
If you're publishing or sizing real capital based on a Sharpe figure, report PSR alongside it. A PSR < 95% on a "great" Sharpe usually means the result isn't statistically distinguishable from noise.
The Sharpe ratio is SR = (R_p − R_f) / σ_p, where R_p is the portfolio return, R_f is the risk-free rate, and σ_p is the standard deviation of excess returns. It's typically annualized by multiplying by √(periods per year) — √365 for daily crypto returns.
Sortino replaces total standard deviation σ_p with downside deviation σ_d, which only counts squared shortfalls below a target rate (MAR). This stops upside volatility from being penalized — useful for trend-following or asymmetric strategies where positive skew is a feature, not a risk.
Multiply by √365, not √252. Crypto trades 24/7, so all 365 days contribute returns. For hourly returns, use √(365·24) ≈ 93.6. Always disclose the annualization basis when reporting a Sharpe figure.
For annualized retail crypto strategies: SR above 1 is decent, above 2 is strong, and above 3 is suspicious unless you're running multi-strategy or HFT. Numbers above 3 from a single-strategy backtest typically reflect overfitting or survivorship bias.
Negative skew. Sortino is normally higher than Sharpe because downside deviation σ_d is smaller than total σ. If yours is lower, your loss distribution has more mass in the left tail than the right — large, rare losses dominate downside risk.
No. The standard error of an estimated Sharpe is approximately √((1 + 0.5·SR²) / n). With n = 30 and SR = 1, your 95% confidence interval spans roughly ±0.4 — wide enough that "Sharpe 1.0" is statistically indistinguishable from "Sharpe 0.6" or "Sharpe 1.4". Wait for 100+ observations.
PSR (Bailey & López de Prado, 2012) gives the probability that the true Sharpe exceeds a benchmark, conditional on sample size, skewness, and kurtosis. It's the right metric when you want to ask "is this Sharpe statistically real?" rather than just reporting the point estimate.
The Sharpe ratio is itself a signal-to-noise statistic — mean over std. For a deeper treatment of SNR in trading metrics, continue to Signal-to-Noise Ratio.