Sharpe Ratio vs Sortino Ratio: Formulas and When to Use Each

Choosing between the Sharpe ratio and the Sortino ratio is not a matter of taste. It depends on a testable property of your return distribution: symmetry. When a strategy's returns are roughly symmetric around their mean, the two metrics tell a similar story. When they are skewed — as is common with options-selling, trend-following, or mean-reversion strategies — the two ratios can disagree sharply about which strategy is preferable, and knowing why matters more than knowing the formulas by heart.
Both metrics belong to the same family: reward per unit of risk. The difference lies entirely in how "risk" is defined. Sharpe treats all volatility, upside and downside alike, as something to penalize. Sortino penalizes only the downside. That single design choice changes how each ratio ranks strategies whose distributions are not bell-shaped.
The Sharpe ratio: formula and assumptions
William Sharpe introduced the reward-to-variability ratio in his 1966 paper "Mutual Fund Performance," later refining the definition in his 1994 revision "The Sharpe Ratio." The formula is:
Sharpe = mean(R_p - R_f) / std(R_p)
Where R_p is the periodic return of the portfolio or strategy, R_f is the risk-free rate over the same period, and std(R_p) is the standard deviation of those returns. To annualize a ratio computed on daily or monthly data, multiply by the square root of the number of periods per year (sqrt(252) for daily returns, sqrt(12) for monthly).
The elegance of the Sharpe ratio is also its limitation. Standard deviation is a symmetric measure: a return of +5% contributes exactly as much to the denominator as a return of -5%. This is a reasonable simplification if returns are approximately normally distributed, but it silently assumes that investors dislike upside volatility as much as downside volatility — which is rarely true in practice. Nobody complains about a portfolio that occasionally jumps sharply higher.

Photo: RDNE Stock project (Pexels)
Skewness, kurtosis, and why symmetry matters
Two statistical moments beyond mean and variance determine how badly this symmetry assumption breaks down: skewness and kurtosis.
Skewness measures the asymmetry of a distribution. A negatively skewed return series has a long left tail — frequent small gains punctuated by occasional large losses. This is the classic signature of short-volatility and options-selling strategies: they harvest a steady premium most of the time, then experience infrequent, severe drawdowns. A positively skewed series has a long right tail — frequent small losses offset by occasional large gains — typical of trend-following and long-volatility strategies.
Kurtosis measures tail thickness relative to a normal distribution. High excess kurtosis ("fat tails") means extreme outcomes occur more often than a Gaussian model would predict. Nassim Taleb's "The Black Swan" and "Fooled by Randomness" are built around exactly this failure mode: strategies that look stable under a normal-distribution lens can be one tail event away from ruin, precisely because realized returns are not normally distributed.
When skewness is non-zero, the standard deviation in the Sharpe denominator conflates two very different things: volatility that hurts you and volatility that helps you. A strategy with negative skew can post an artificially high Sharpe ratio right up until the tail event that erases years of gains. This is precisely the kind of distortion that a statistical backtest audit is designed to catch — tools like the one available at /outils on TrueVerdikt are built to flag inflated Sharpe ratios that stem from skewed, non-normal, or overfit return series rather than genuine risk-adjusted skill.

Photo: Diana ✨ (Pexels)
The Sortino ratio: isolating downside risk
Frank Sortino's refinement replaces total standard deviation with downside deviation — a semi-standard-deviation computed only from returns that fall below a Minimum Acceptable Return (MAR), often set to zero or to the risk-free rate:
Sortino = mean(R_p - MAR) / downside_deviation
downside_deviation = sqrt( mean( min(R_p - MAR, 0)^2 ) )
Note the min(x, 0) term: any return at or above the MAR contributes zero to the downside deviation. Only shortfalls below the threshold are squared and averaged. This means a strategy that swings wildly on the upside but rarely dips below its MAR will show a high Sortino ratio and a comparatively lower Sharpe ratio, because Sharpe penalizes that upside variability while Sortino ignores it entirely.
A worked Python example
The following script builds two synthetic strategies with identical mean and identical standard deviation, but opposite skew, and shows how Sharpe and Sortino rank them differently.
import numpy as np
import pandas as pd
from scipy import stats
np.random.seed(42)
n_days = 1000
mar = 0.0 # Minimum Acceptable Return, expressed as a daily return
rf_daily = 0.0 # simplifying assumption: zero daily risk-free rate
# Strategy A: negatively skewed returns (short-volatility profile)
# Frequent small gains, occasional sharp losses.
gains_a = np.random.normal(0.0012, 0.004, int(n_days * 0.92))
losses_a = np.random.normal(-0.03, 0.01, int(n_days * 0.08))
returns_a = np.concatenate([gains_a, losses_a])
np.random.shuffle(returns_a)
# Strategy B: positively skewed returns (trend-following profile)
# Frequent small losses, occasional large gains.
losses_b = np.random.normal(-0.0012, 0.004, int(n_days * 0.92))
gains_b = np.random.normal(0.03, 0.01, int(n_days * 0.08))
returns_b = np.concatenate([losses_b, gains_b])
np.random.shuffle(returns_b)
# Trim both series to the same length for a fair comparison
n = min(len(returns_a), len(returns_b))
returns_a = pd.Series(returns_a[:n])
returns_b = pd.Series(returns_b[:n])
def sharpe_ratio(returns, rf=0.0, periods_per_year=252):
excess = returns - rf
return (excess.mean() / excess.std(ddof=1)) * np.sqrt(periods_per_year)
def sortino_ratio(returns, mar=0.0, periods_per_year=252):
excess = returns - mar
downside = np.minimum(excess, 0)
downside_deviation = np.sqrt((downside ** 2).mean())
if downside_deviation == 0:
return np.nan
return (excess.mean() / downside_deviation) * np.sqrt(periods_per_year)
for name, series in [("Strategy A (neg. skew)", returns_a),
("Strategy B (pos. skew)", returns_b)]:
sr = sharpe_ratio(series, rf_daily)
so = sortino_ratio(series, mar)
skew = stats.skew(series)
kurt = stats.kurtosis(series) # excess kurtosis
print(f"{name}:")
print(f" Std dev (ann.): {series.std() * np.sqrt(252):.4f}")
print(f" Skewness: {skew:.3f}")
print(f" Excess kurtosis: {kurt:.3f}")
print(f" Sharpe ratio: {sr:.3f}")
print(f" Sortino ratio: {so:.3f}")
print()
Running this script reliably produces a Sharpe ratio for Strategy A (negative skew) that is close to, or even slightly above, Strategy B's Sharpe ratio, because both series were constructed to have similar overall standard deviation. But the Sortino ratio for Strategy B comes out meaningfully higher than Strategy A's, because Strategy B's large moves sit on the upside and are excluded from the downside-deviation calculation, while Strategy A's large moves sit on the downside and dominate it. This is the ranking flip in practice: a metric blind to the direction of variance (Sharpe) versus one that isolates harmful variance (Sortino) can reach opposite conclusions about which strategy carries more risk per unit of return.
Practical caveats when computing either ratio
A few implementation details commonly trip up an otherwise correct calculation. First, the choice of the risk-free rate R_f (for Sharpe) or the Minimum Acceptable Return MAR (for Sortino) is not cosmetic — using zero when a nonzero risk-free rate applies, or vice versa, shifts every excess-return figure and therefore the ratio itself. Be explicit about which convention you use and keep it consistent across strategies you intend to compare.
Second, the annualization factor (sqrt(252) for daily returns, sqrt(12) for monthly) assumes returns are independent and identically distributed period to period. Strategies with significant serial correlation — trend-followers with slow-moving positions, for instance — violate this assumption, and naively annualized ratios can overstate or understate the true annual risk-adjusted return. Autocorrelation-adjusted variants of the Sharpe ratio exist for exactly this reason, though they add estimation complexity that is often unwarranted outside of academic-grade analysis.
Third, sample size matters more than either formula suggests at first glance. A Sharpe or Sortino ratio computed on a few dozen trades carries enormous estimation uncertainty, and testing many parameter variants to find the best-looking ratio introduces a multiple-testing bias that inflates the reported number well beyond what a single, honest backtest would produce.

Photo: Саша Алалыкин (Pexels)
Choosing between Sharpe and Sortino
- 1
Inspect the distribution
Check skewness and kurtosis of returns
- 2
Roughly symmetric?
Sharpe is a fair summary
- 3
Skewed or fat-tailed?
Sortino isolates the downside that matters
- 4
Report both
The gap between them is itself informative
A decision framework
Use the Sharpe ratio when:
- Returns are approximately symmetric, with skewness close to zero and no extreme excess kurtosis.
- You need a metric that is widely reported and standardized, making cross-strategy or cross-fund comparison easier — most public track records and factsheets quote Sharpe by default.
- You are doing a first-pass, comparability-oriented screen across many candidate strategies before deeper due diligence.
Use the Sortino ratio when:
- The strategy has a structurally asymmetric payoff profile — short-volatility, options-selling, or trend-following systems are the textbook cases.
- You specifically care about downside protection and are willing to tolerate upside volatility, which is often the case for risk managers evaluating tail exposure rather than raw variance.
- A quick check of skewness and kurtosis (as computed in the script above) shows the distribution is far from normal, which is precisely when Sharpe's symmetric-risk assumption stops holding.
In practice, computing both ratios alongside skewness and kurtosis, rather than relying on Sharpe in isolation, is the more defensible approach — and it is a habit reinforced in TrueTrueVerdikt's ebook on risk management and clean backtesting methodology, which walks through exactly this kind of multi-metric evaluation. It is also worth remembering that any single-metric comparison, Sharpe or Sortino, can be inflated by data-snooping across many backtested variants; see our companion piece on the data-snooping ratio and Sharpe inflation for a deeper treatment of that separate but related pitfall. Marcos López de Prado's "Advances in Financial Machine Learning" and David H. Bailey's work on the Deflated Sharpe Ratio both address this multiple-testing problem directly, and are worth reading before trusting any single backtested ratio at face value.
Disclaimer: This article is provided for educational and informational purposes only. It does not constitute financial, investment, or trading advice. Trading and investing involve substantial risk of loss. Past performance, backtested or live, is not indicative of future results. Always conduct your own research and consult a licensed financial advisor before making investment decisions.
From theory to practice
Measure and control a strategy's risk: drawdown, VaR, Sortino, Calmar and Omega ratios, position sizing and the Kelly criterion.
Analyse portfolio risk
