Impact-Site-Verification: 0eedbe8d-4e05-4893-8456-85377301e322

Sortino Ratio

Last updated: January 11, 2026

← Back to glossary

The Sortino ratio is the Sharpe ratio’s more opinionated sibling.

Sharpe treats all volatility as “bad”, which doesn’t make much sense if you’re an investor who likes upside surprises. Sortino keeps the same basic idea — return per unit of risk — but it only counts downside volatility as risk.

The formula

Sortino=E[r]rfσdown\text{Sortino} = \frac{E[r] - r_f}{\sigma_{\text{down}}}

Where rr is the return series (we use daily simple returns from close-to-close), E[r]E[r] is the average daily return annualized (not CAGR), rfr_f is the risk‑free rate, and σdown\sigma_{\text{down}} is downside deviation.

What “downside deviation” means (in human terms)

Downside deviation measures how bumpy the downside returns are. The first step is picking a “target” return (sometimes called MAR: minimum acceptable return). Then you focus on returns that fall below that target.

At Gale Finance, the target return is the daily risk‑free rate implied by the annual risk‑free rate:

daily_rf=rfN\text{daily\_rf} = \frac{r_f}{N}

Where NN is the annualization factor (typically 365 for crypto/stablecoins and ~252 for trading‑day assets).

So the downside set is “all days where rt<daily_rfr_t < \text{daily\_rf}”.

How we calculate Sortino at Gale Finance

Most of the methodology mirrors Sharpe:

  1. Returns: daily simple returns from close‑to‑close:

rt=PtPt11r_t = \frac{P_t}{P_{t-1}} - 1

We don’t forward‑fill missing dates. If an ETF doesn’t trade on a holiday, we don’t invent a “flat” return for that day.

We annualize expected return using the arithmetic mean of daily returns:

E[rannual]=rˉt×NE[r_{annual}] = \bar{r}_t \times N

  1. Annualization uses the asset’s calendar: we use 365 for crypto/stablecoins (weekends matter) and ~252 for trading‑day assets (or infer the effective frequency when needed).

  2. Risk‑free rate: we use the average 3‑month Treasury rate over the analysis window (FRED series DGS3MO). If we can’t fetch it, we fall back to a configured default.

  3. Target return (MAR): some Sortino definitions use 0% as the target return. We use the risk‑free rate instead, which matches the “excess return” idea and keeps Sharpe and Sortino comparable.

  4. Downside deviation (our definition): we compute downside deviation using only the downside days, then annualize:

σdown,annual=σ(rtrt<rfN)×N\sigma_{\text{down,annual}} = \sigma\left(r_t \mid r_t < \frac{r_f}{N}\right) \times \sqrt{N}

This is a subtle but important choice. It’s not the only “standard” definition you’ll see.

The textbook alternative (and how it differs)

Many textbooks define downside deviation as the square root of a lower partial moment of order 2 (LPM2). In that approach, non‑downside days contribute 0 and downside days contribute their squared shortfall from the target:

σdown,annual=1Tt=1Tmin(0,  rtMAR)2  ×N\sigma_{\text{down,annual}} = \sqrt{\frac{1}{T}\sum_{t=1}^{T} \min\left(0,\; r_t - \text{MAR}\right)^2}\;\times\sqrt{N}

If you set MAR=rf/N\text{MAR} = r_f/N, this is the “risk‑free target” version. If you set MAR=0\text{MAR} = 0, it’s the “0% target” version.

So what’s the difference?

  • Our denominator asks: “how volatile are the downside days themselves?” (conditional volatility of downside days).
  • The LPM2 denominator asks: “how big are the shortfalls below the target, on average?” (frequency + magnitude of shortfalls).

Both are valid. They measure different things. One important caveat with our conditional-volatility approach is that it doesn’t directly capture how often an asset has downside days — just how violent they are when they show up.

How to read it (and one edge case)

Sortino answers: “how much return did I get for the downside volatility I had to sit through?”

That’s especially useful for assets that can jump around on the upside (crypto is the obvious example). A huge up day can inflate total volatility and make Sharpe look worse, even though nobody is complaining about a big gain. Sortino doesn’t punish that.

One edge case: in a strong bull period, an asset might have very few days below the target return. Then downside deviation can be tiny and Sortino can explode.

In our implementation, we require at least 2 downside observations to compute a downside standard deviation. If there are fewer than 2 downside observations, we return:

  • Sortino = ∞ if the average daily return is above the daily risk‑free rate, otherwise Sortino = 0
  • note: "Insufficient downside observations"

Treat that as a sample‑size warning, not as proof the asset is “infinitely good”.

If you want a broader picture of “what the ugly days look like”, pair Sortino with tail metrics like VaR / Expected Shortfall and downside co-moves.