Analisi: Indice di Sortino

Definizione:

L'indice di Sortino è una modifica dell'indice di Sharpe sviluppata da Frank Sortino. A differenza dell'indice di Sharpe, ignora la volatilità positiva, concentrandosi solo sui ribassi che sono pericolosi per l'investitore.

Interpretazione:

Mostra quanto il rendimento compensa il rischio. Il valore finale indica direttamente quale percentuale di rendimento corrisponde all'1% di deviazione al ribasso.

Il valore target generalmente accettato dell'indicatore è ≥ 2, ma occorre sempre tenere conto del rapporto con il benchmark e della situazione di mercato.

Esempio:

Portafoglio:

  • Tasso privo di rischio (RFR) = 2%
  • 1° gennaio 2025: deposito di 1000
  • 03/03/2025 acquisto di NASDAQ:AAPL (quantità: 1, prezzo: 190, commissione: 0)
  • 11/04/2025 data di calcolo dell'indice di Sortino. Ultimo prezzo di AAPL = 198,15

Indice di Sortino del portafoglio 0,047%:

  • Il rischio di ribasso è scarsamente compensato dal rendimento
  • Ogni punto percentuale di deviazione al ribasso accettata ha portato solo lo 0,047% di rendimento in eccesso

Indice di Sortino di riferimento -0,817%:

  • Per ogni punto percentuale di deviazione al ribasso, il portafoglio ha perso lo 0,817% di rendimento rispetto al tasso privo di rischio.

Nota: occorre tenere conto della natura a breve termine del periodo osservato, preso per semplificare il calcolo.

Calcolo:

Indice di Sortino = (Rp − RFR) / DD

  • Rp (Rendimento del portafoglio) — rendimento del portafoglio in percentuale, calcolato mensilmente per il periodo utilizzando il metodo TWR
  • RFR (Tasso privo di rischio) — ricavato dalle impostazioni del portafoglio. Poiché il tasso annuale è impostato nelle impostazioni, deve essere convertito nel tasso per il periodo prima del calcolo
  • DD (deviazione al ribasso) — deviazione standard tra i valori negativi della performance per il periodo

Esempio di calcolo dell'indice di Sortino:

  • Calcolo mensile dell'RFR:

 2 / 12 = 0,167%

  • Calcolo dell'Rp:

Performance per periodi:

  • Gennaio: 0
  • Febbraio: 0
  • Marzo: 3,2% (ottenuto: pv al 31 marzo → ((1032,13 − 1000) / 1000) * 100 )
  • Aprile: −2,3% (ottenuto: ((1008,15 − 1032,13) / 1032,13) * 100 )

Rp = (0 + 0 + 3,2 − 2,3) / 4 = 0,225

  • Calcolo DD:
  • Gennaio: min(0, 0 − 0,167)² = 0,0279
  • Febbraio: min(0, 0 − 0,167)² = 0,0279
  • Marzo: min(0, 3,2 − 0,167)² = 0
  • Aprile: min(0, −2,3 − 0,167)² = 6,1009

DD = ((0,0279 + 0,0279 + 0 + 6,1009) / 4)^(1/2) = 1,24%

  • Calcolo del rapporto di Sortino:

SR = (Rp − RFR) / DD = (0,225% − 0,167%) / 1,24% ≈ 0,047%

Riferimenti in Pine:

//@version=6
indicator("Sortino ratio example")
method downsideDeviation(array<float> returns, series float targetReturn) =>
    float sum = 0.0
    for r in returns
        if r >= targetReturn
            continue
        sum += math.pow(r - targetReturn, 2)
    sum /= returns.size()
    float result = math.sqrt(sum)

method sortinoRatio(array<float> returnsArray, series float annualBenchmark) =>
    var int numberOfperiods = 12
    if barstate.islast
        float fixedPeriodReturn = annualBenchmark / numberOfperiods
        float downsideDev       = returnsArray.downsideDeviation(fixedPeriodReturn)
        float avgReturn         = returnsArray.avg()
        float result            = (avgReturn - fixedPeriodReturn) / downsideDev

array<float> arr = array.from(0, 0, 3.2, -2.3)
float sortino = sortinoRatio(arr, 2)
plot(sortino, precision = 3)

Nota:

Se tutte le transazioni sono state effettuate nel mese corrente rispetto alla data di calcolo dell'indicatore, l'indicatore non verrà calcolato, poiché non è stato completato un intero mese solare.