Sharpe, Sortino and Information ratio

finance stats

The Sharpe ratio is the most common way to judge a fund or a trading strategy. The Information ratio is how a manager hired to beat an index gets judged, and the Sortino ratio answers a fair complaint about Sharpe. This post covers all three.

All three build directly on mean and standard deviation.

Why you need a ratio at all

Fund A returned 12% last year, fund B 8%. Is A better? Not necessarily. If A swung wildly to get there and B was calm, B may have given you more return per unit of risk. Every ratio here has the same shape:

the ratioreturnsrisk

ratio=extra returnrisk\key{\text{ratio}} = \frac{\good{\text{extra return}}}{\risk{\text{risk}}}

They differ only in what “extra” and “risk” mean.

Sharpe ratio

Plain meaning: how much return you got above a risk-free investment, for each unit of total volatility. This is the form in Romero and Balch’s What Hedge Funds Really Do (chapter 2):

Sharpe=rp−rfσp\key{\text{Sharpe}} = \frac{\good{r_p} - r_f}{\risk{\sigma_p}}
SymbolMeaning
rp\good{r_p}the portfolio’s return over the period
rfr_fthe risk-free return over the same period (for example a short-term government bill)
rp−rf\good{r_p} - r_fthe excess return: what you earned for taking risk
σp\risk{\sigma_p}the portfolio’s standard deviation (its volatility)

The book’s own example: the S&P 500 at 10% a year, bills at 2.5%, volatility 15% gives (10−2.5)/15=0.5(10 - 2.5)/15 = 0.5.

With daily data, you annualise by multiplying by 252\sqrt{252}:

Sharpeannual=252×mean(rt−rf,t)std(rt)\key{\text{Sharpe}_{\text{annual}}} = \sqrt{252} \times \frac{\text{mean}(\good{r_t} - r_{f,t})}{\risk{\text{std}}(\good{r_t})}

where rt\good{r_t} are the daily returns. (When the risk-free rate is the same every day, the standard deviation of rt\good{r_t} and of rt−rf,t\good{r_t} - r_{f,t} are identical, so you’ll see both versions.)

Why 252\sqrt{252} and not 252? The top of the fraction (a mean) grows with time, so ×252. The bottom (a standard deviation) grows with the square root of time, so ×√252. Divide one by the other and you’re left with 252/252=252252/\sqrt{252} = \sqrt{252}. (The square-root rule is explained in the standard deviation post.) For monthly data, use 12\sqrt{12}. For weekly, 52\sqrt{52}.

Worked example

Five daily returns: 1%, −2%, 1%, 2%, −1%. Risk-free rate 0, to keep it simple. From the last post, the mean is 0.2% and the standard deviation is 1.6432%.

daily Sharpe=0.21.6432=0.1217\begin{aligned} \key{\text{daily Sharpe}} &= \frac{0.2}{1.6432} \\ &= 0.1217 \end{aligned} annual Sharpe=252×0.1217=1.93\begin{aligned} \key{\text{annual Sharpe}} &= \sqrt{252} \times 0.1217 \\ &= 1.93 \end{aligned}

As a rough guide, an annual Sharpe above 1 is considered good for a strategy, and above 2 is rare. Five days is far too short to trust any of these numbers, of course; this is only to show the arithmetic.

The risk-free rate per day

If the risk-free rate is 4% a year, the daily rate is the 252nd root of the yearly growth:

rfdaily=(1+0.04)1/252−1=0.015565%r_f^{\text{daily}} = (1 + 0.04)^{1/252} - 1 = 0.015565\%

The shortcut 4%/252=0.015873%4\% / 252 = 0.015873\% is close enough for most uses. Many people simply use 0 when rates are very low.

What Sharpe gets wrong

The standard deviation punishes all swings, up and down. A fund with a few huge gains gets penalised exactly like a fund with a few huge losses. Investors don’t mind upside surprises.

Sortino ratio

Plain meaning: like Sharpe, but only the bad days count as risk.

Sortino=E[Rp−T]DD\key{\text{Sortino}} = \frac{E[\good{R_p} - T]}{\risk{\text{DD}}} DD=1n∑t=1nmin⁡(rt−T, 0)2\risk{\text{DD}} = \sqrt{\frac{1}{n}\sum_{t=1}^{n} \min(\good{r_t} - T,\ 0)^2}
SymbolMeaning
TTthe target return, often 0 or the risk-free rate
min⁡(rt−T,0)\min(\good{r_t} - T, 0)how far a day fell short of the target; 0 on days that beat it
DDdownside deviation: the typical size of a shortfall

Good days count as zero shortfall, so they don’t add to the risk. Note that the average is over all nn days, good and bad. That’s the common convention; some references divide by the number of bad days only, which gives a different number, so always check which one a report uses. Annualise with 252\sqrt{252}, as before.

Worked example

Same five days, target 0:

DayReturnmin⁡(r,0)\min(r, 0)Squared
1100
2−2−24
3100
4200
5−1−11
Average0.21.0
DD=1.0=1.0\begin{aligned} \risk{\text{DD}} &= \sqrt{1.0} \\ &= 1.0 \end{aligned} daily Sortino=0.21.0=0.2\begin{aligned} \key{\text{daily Sortino}} &= \frac{0.2}{1.0} \\ &= 0.2 \end{aligned} annual=252×0.2=3.17\begin{aligned} \key{\text{annual}} &= \sqrt{252} \times 0.2 \\ &= 3.17 \end{aligned}

Higher than the Sharpe of 1.93, because the up days no longer count against the fund.

Where Sortino earns its keep

I made up three funds with exactly the same mean and standard deviation, so their Sharpe ratios are identical. Only the shape differs:

Two histograms with the same mean and spread: one has many small losses and a few big gains, the other many small gains and a few big losses.

FundSharpeSortinoWorst dayBest day
Symmetric0.7051.025−3.05%+2.57%
Big gains, small losses0.7051.403−1.01%+6.21%
Big losses, small gains0.7050.830−6.53%+0.99%

(Risk-free rate 4% a year.) Sharpe can’t tell them apart. Sortino ranks the “big losses” fund clearly worst, which is what an investor would say too. Strategies that sell insurance-like options often look like that last fund: steady small gains, then a rare large loss. Their Sharpe can look excellent right up until the bad day.

Information ratio

Plain meaning: how much a manager beat their benchmark, for each unit of straying from it.

A fund manager is usually hired to beat an index, not cash. So “extra return” becomes the return above the index (the active return), and “risk” becomes how much the fund’s return differs from the index’s (the tracking error). This is the version in Grinold and Kahn’s Active Portfolio Management:

IR=E[Rp−Rb]σ(Rp−Rb)=active returntracking error\begin{aligned} \key{\text{IR}} &= \frac{E[\good{R_p} - R_b]}{\risk{\sigma}(\good{R_p} - R_b)} \\ &= \frac{\good{\text{active return}}}{\risk{\text{tracking error}}} \end{aligned}

where Rp\good{R_p} is the fund’s return and RbR_b the benchmark’s.

Romero and Balch (chapter 9) measure skill the same way, but on alpha: the part of the return left after removing what the market explains, using the CAPM (the capital asset pricing model):

IR(α)=mean(α)s.d.(α)\key{\text{IR}}(\good{\alpha}) = \frac{\text{mean}(\good{\alpha})}{\risk{\text{s.d.}}(\good{\alpha})}

For a fund that moves one-for-one with its index (a beta of 1), alpha is simply fund minus index, and the two versions agree.

Worked example

Same five fund days, plus a benchmark: 0.5%, −1.5%, 1%, 1.5%, −1%.

DayFundBenchmarkActive r−br - b
110.50.5
2−2−1.5−0.5
311.00
421.50.5
5−1−1.00

Active returns: mean 0.1%, standard deviation 0.4183%.

daily IR=0.10.4183=0.239\begin{aligned} \key{\text{daily IR}} &= \frac{0.1}{0.4183} \\ &= 0.239 \end{aligned} annual IR=252×0.239=3.79\begin{aligned} \key{\text{annual IR}} &= \sqrt{252} \times 0.239 \\ &= 3.79 \end{aligned}

Two managers

ManagerBeats index byTracking errorIR
A: stays close to the index1% a year2% a year0.50
B: takes big bets3% a year12% a year0.25

B earned three times more extra return, but took six times more risk relative to the index. Per unit of risk, A is twice as good. If you like A’s skill but want more return, you can give A more money to work with, or let A take bigger positions. B’s extra return came with a lot of noise.

The IR leads to the Fundamental Law of Active Portfolio Management, from Grinold and Kahn, as Romero and Balch write it in chapter 9:

IR=IC×BR\key{\text{IR}} = \text{IC} \times \sqrt{\text{BR}}

In plain words: a manager’s IR comes from how good each bet is (the information coefficient, IC, the correlation between forecasts and what actually happened) times the square root of how many independent bets they make each year (the breadth, BR). Small skill applied many times can beat big skill applied rarely. That’s a post of its own.

The code

import numpy as np
K = np.sqrt(252)

def sharpe(r, rf=0.0):
    ex = r - rf
    return K * ex.mean() / ex.std(ddof=1)

def sortino(r, target=0.0):
    downside = np.sqrt(np.mean(np.minimum(r - target, 0) ** 2))
    return K * (r - target).mean() / downside

def info_ratio(r, benchmark):
    active = r - benchmark
    return K * active.mean() / active.std(ddof=1)

r = np.array([1, -2, 1, 2, -1]) / 100
b = np.array([0.5, -1.5, 1, 1.5, -1]) / 100
print(sharpe(r), sortino(r), info_ratio(r, b))    # 1.93  3.17  3.79

Summary

RatioExtra returnRiskUse it when
Sharpeabove risk-freeall volatilitycomparing any two investments
Sortinoabove a targetonly shortfalls below the targetreturns are lopsided (options, credit)
Informationabove a benchmarktracking errorjudging a manager hired to beat an index

All three: annualise daily figures with 252\sqrt{252}, and never trust them on a short history.

Next

Portfolio optimisation: using means, standard deviations and correlations together to find the mix of assets with the best risk-adjusted return.

References

  • Philip J. Romero and Tucker Balch, What Hedge Funds Really Do: An Introduction to Portfolio Management (Business Expert Press, 2014), chapter 2 (the Sharpe ratio) and chapter 9 (the information ratio on alpha, and the Fundamental Law IR = IC × √BR)
  • Richard C. Grinold and Ronald N. Kahn, Active Portfolio Management (2nd ed., McGraw-Hill, 2000)
  • William F. Sharpe, “The Sharpe Ratio”, The Journal of Portfolio Management 21(1), 1994
  • Frank A. Sortino and Lee N. Price, “Performance Measurement in a Downside Risk Framework”, The Journal of Investing 3(3), 1994 (the Sortino ratio is not in the books above)