Strasmore Research
Formazione Matt ConnorDi Matt Connor

Risk-free rate nello Sharpe ratio: come sceglierlo

Il risk-free rate cambia nel tempo: abbina il rendimento di un Treasury bill alla frequenza dei rendimenti e misura il costo di usare un tasso fisso.

Il risk-free rate nello Sharpe ratio è il rendimento che avresti potuto ottenere nello stesso intervallo senza assumere il rischio che stai valutando. È una serie, con un’osservazione per periodo, espressa nella valuta dei rendimenti. La sua frequenza deve corrispondere a quella dei rendimenti e il tasso va sottratto periodo per periodo. L’annualizzazione si esegue una sola volta, alla fine.

È il mancato rispetto di questa procedura a causare la maggior parte degli errori negli Sharpe ratio pubblicati. Prendere un unico dato all’inizio di una storia ventennale dei rendimenti, di solito il rendimento offerto da un Treasury bill in quella settimana, significa applicare a 22 lo stesso hurdle rate di 22. La nostra guida allo Sharpe ratio spiega cosa misura il rapporto. Questa pagina tratta l’input che quasi nessuno documenta.

Il risk-free rate non è costante

Uno Sharpe ratio calcolato su vent’anni copre una storia dei tassi. Il pannello sotto prende il Treasury bill a tre mesi e sintetizza ogni anno solare con una media e con l’intervallo attorno a essa.

QueryRendimento dei Treasury bill a tre mesi per anno solare
L'esatto SQL dietro ogni numero
SELECT
    toString(toYear(date))                  AS year,
    round(avg(toFloat64(yield_3_month)), 2) AS avg_bill_pct,
    round(min(toFloat64(yield_3_month)), 2) AS low_bill_pct,
    round(max(toFloat64(yield_3_month)), 2) AS high_bill_pct
FROM global_markets.treasury_yields
WHERE date >= '2005-01-01'
  AND yield_3_month IS NOT NULL
GROUP BY year
ORDER BY year
Run this yourself

La media annua è stata pari a 3.22% nel 2005 e a 3.74% nel 2026, su un totale di 22 anni solari. È il percorso tra questi due valori a contare. La linea scende fino a zero, vi rimane per gran parte di un decennio e poi risale. Le colonne con i valori minimo e massimo mostrano quanto il tasso si sia mosso all’interno dei singoli anni. Per questo anche uno Sharpe ratio a un anno richiede una serie coerente, non una sola quotazione.

Quale risk-free rate usare nello Sharpe ratio

La scelta dipende da quattro caratteristiche.

  1. Scadenza breve. Il tasso deve essere quasi certo per un periodo di misurazione. Un bill a tre mesi è adatto a un’analisi mensile. Un titolo a dieci anni non lo è, perché il suo prezzo può cambiare durante il mese misurato.
  2. La valuta dei rendimenti. Una strategia denominata in euro va valutata rispetto a un bill in euro.
  3. La frequenza dei rendimenti. I rendimenti dei bill sono espressi come tassi annui e una quotazione annuale deve essere convertita alla frequenza mensile prima di essere applicata a un rendimento mensile.
  4. Definizioni dei rendimenti comparabili sui due lati. Il rendimento di un bill rappresenta il suo ritorno complessivo. Un rendimento di strategia che esclude i dividendi non è quindi misurato sulla stessa base. Price return e total return spiega questa differenza.

Per la conversione indicata al punto tre sono in uso due convenzioni. La divisione semplice ripartisce la quotazione annua per dodici. La capitalizzazione prende la radice dodicesima di uno più il tasso annuo. Su un bill ipotetico al 5%, i due metodi producono per il mese rispettivamente 0,4167% e 0,4074%: una differenza di circa un basis point che si ripete in ogni mese del campione. I pannelli qui utilizzano la capitalizzazione. Se i rendimenti dei bill ti interessano come investimento e non come hurdle rate, dividend yield e rendimenti dei Treasury e dove parcheggiare la liquidità inattiva trattano l’argomento.

Come costruire una serie mensile di excess return

La costruzione è meccanica: si prende l’ultima chiusura di ogni mese, si calcola il rendimento del mese, si converte la quotazione del bill in un tasso mensile e poi lo si sottrae. Il risultato è una serie di excess return, con un dato per ogni mese. Come si misurano i rendimenti mensili illustra in dettaglio la componente del rendimento.

QueryRendimento mensile, tasso risk-free mensile ed excess, dal 2020 al 2024
L'esatto SQL dietro ogni numero
WITH
    monthly_px AS
    (
        SELECT
            toStartOfMonth(date)           AS m,
            argMax(toFloat64(close), date) AS month_close
        FROM global_markets.stocks_daily_aggs
        WHERE ticker = 'SPY'
          AND date >= '2019-12-01'
          AND date <  '2025-01-01'
        GROUP BY m
    ),
    prior_px AS
    (
        SELECT
            addMonths(m, 1) AS m,
            month_close     AS prev_close
        FROM monthly_px
    ),
    monthly_rf AS
    (
        SELECT
            toStartOfMonth(date)                                       AS m,
            pow(1 + avg(toFloat64(yield_3_month)) / 100, 1.0 / 12) - 1 AS rf_month
        FROM global_markets.treasury_yields
        WHERE date >= '2019-12-01'
          AND date <  '2025-01-01'
          AND yield_3_month IS NOT NULL
        GROUP BY m
    )
SELECT
    toString(cur.m)                                                      AS month,
    round(100 * (cur.month_close / prv.prev_close - 1), 2)               AS spy_ret_pct,
    round(100 * rf.rf_month, 3)                                          AS rf_pct,
    round(100 * (cur.month_close / prv.prev_close - 1 - rf.rf_month), 2) AS excess_pct
FROM monthly_px AS cur
INNER JOIN prior_px AS prv ON prv.m = cur.m
INNER JOIN monthly_rf AS rf ON rf.m = cur.m
ORDER BY cur.m
Run this yourself

Si tratta delle chiusure di SPY, quindi la colonna dei rendimenti rappresenta il price return ed esclude i dividendi. La colonna del risk-free rate parte da 0.128% per il primo mese visualizzato e termina a 0.359%. Accanto a mesi azionari che oscillano di diversi punti percentuali, la serie del risk-free rate sembra un arrotondamento. Sui 60 mesi della sottrazione, però, determina interamente la differenza tra due Sharpe ratio che dichiarano di misurare la stessa cosa.

Sottrarre prima, annualizzare dopo

Una volta allineate le serie, sono possibili due sequenze operative, che producono risultati diversi. Prima l’excess return: si sottrae il tasso mensile dal rendimento mensile e poi si annualizza la serie degli excess return. Prima l’annualizzazione: si capitalizzano i rendimenti fino a ottenere un dato annuo, si capitalizza il bill fino a ottenere un dato annuo e poi si sottrae un valore dall’altro.

QueryPremio per il rischio annualizzato: sottrarre su base mensile o annualizzare prima ciascuna componente
L'esatto SQL dietro ogni numero
WITH
    monthly_px AS
    (
        SELECT
            toStartOfMonth(date)           AS m,
            argMax(toFloat64(close), date) AS month_close
        FROM global_markets.stocks_daily_aggs
        WHERE ticker = 'SPY'
          AND date >= '2004-12-01'
          AND date <  '2025-01-01'
        GROUP BY m
    ),
    prior_px AS
    (
        SELECT
            addMonths(m, 1) AS m,
            month_close     AS prev_close
        FROM monthly_px
    ),
    monthly_rf AS
    (
        SELECT
            toStartOfMonth(date)                                       AS m,
            pow(1 + avg(toFloat64(yield_3_month)) / 100, 1.0 / 12) - 1 AS rf_month
        FROM global_markets.treasury_yields
        WHERE date >= '2004-12-01'
          AND date <  '2025-01-01'
          AND yield_3_month IS NOT NULL
        GROUP BY m
    ),
    excess AS
    (
        SELECT
            cur.m                                             AS m,
            cur.month_close / prv.prev_close - 1              AS ret,
            rf.rf_month                                       AS rf_month,
            cur.month_close / prv.prev_close - 1 - rf.rf_month AS exc
        FROM monthly_px AS cur
        INNER JOIN prior_px AS prv ON prv.m = cur.m
        INNER JOIN monthly_rf AS rf ON rf.m = cur.m
    )
SELECT
    concat(toString(intDiv(count(), 12)), '-year')            AS horizon,
    round(100 * (exp(12 * avg(log(1 + exc))) - 1), 2)         AS excess_first_pct,
    round(100 * ((exp(12 * avg(log(1 + ret))) - 1)
               - (exp(12 * avg(log(1 + rf_month))) - 1)), 2)  AS annualize_first_pct,
    round(100 * ((exp(12 * avg(log(1 + ret))) - 1)
               - (exp(12 * avg(log(1 + rf_month))) - 1)
               - (exp(12 * avg(log(1 + exc))) - 1)), 3)       AS gap_pct
FROM excess
CROSS JOIN (SELECT arrayJoin([1, 3, 5, 10, 20]) AS years) AS hz
WHERE m >= subtractYears(toDate('2025-01-01'), years)
GROUP BY years
ORDER BY years
Run this yourself

Sull’intervallo di 20-year, il risultato con l’excess return calcolato prima è 6.49% all’anno, contro 6.59% con l’altro ordine operativo: una differenza di 0.099 punti percentuali. Sull’intervallo di 1-year, i due calcoli differiscono di 0.814 punti. In tutti gli intervalli qui mostrati, il dato annualizzato prima è superiore a quello con l’excess return calcolato prima. La differenza dipende da un termine incrociato: la capitalizzazione di una serie di rendimenti in un dato annuo include il rendimento del bill applicato anche al premio per il rischio, mentre la sottrazione successiva di un bill annualizzato non elimina mai quella componente. Il termine incrociato cresce con il prodotto dei due valori annualizzati, quindi è più ampio quando i bill offrono rendimenti elevati.

Anche l’annualizzazione presenta due alternative. L’annualizzazione aritmetica moltiplica l’excess return mensile medio per dodici. L’annualizzazione geometrica capitalizza i rendimenti e calcola il tasso annuo costante che replica il risultato cumulato. Consideriamo una sequenza ipotetica di due periodi: +50% seguito da -33,3%, che termina esattamente al punto di partenza. La media aritmetica è +8,35% per periodo, mentre la media geometrica è zero. I pannelli qui utilizzano la capitalizzazione. Va ricordato un punto: con l’annualizzazione aritmetica, dodici volte il rendimento medio meno dodici volte il bill rate medio equivale algebricamente a dodici volte l’excess return medio. Con questa convenzione, l’ordine della sottrazione non modifica il numeratore. Il denominatore, invece, cambia, perché la deviazione standard degli excess return diverge da quella dei rendimenti grezzi quando il tasso varia.

Quanto costa al risultato usare un tasso fisso

La scorciatoia più comune consiste nel prendere il rendimento corrente del bill e sottrarlo a ogni periodo della storia. Il pannello sotto calcola lo Sharpe ratio in entrambi i modi su cinque intervalli che terminano alla stessa data: una volta rispetto alla serie mensile coerente, una volta rispetto al rendimento del bill in vigore alla fine dell’intervallo.

QueryIndice di Sharpe su una serie di tassi abbinata rispetto a un unico tasso fisso
L'esatto SQL dietro ogni numero
WITH
    monthly_px AS
    (
        SELECT
            toStartOfMonth(date)           AS m,
            argMax(toFloat64(close), date) AS month_close
        FROM global_markets.stocks_daily_aggs
        WHERE ticker = 'SPY'
          AND date >= '2004-12-01'
          AND date <  '2025-01-01'
        GROUP BY m
    ),
    prior_px AS
    (
        SELECT
            addMonths(m, 1) AS m,
            month_close     AS prev_close
        FROM monthly_px
    ),
    monthly_rf AS
    (
        SELECT
            toStartOfMonth(date)                                       AS m,
            pow(1 + avg(toFloat64(yield_3_month)) / 100, 1.0 / 12) - 1 AS rf_month
        FROM global_markets.treasury_yields
        WHERE date >= '2004-12-01'
          AND date <  '2025-01-01'
          AND yield_3_month IS NOT NULL
        GROUP BY m
    ),
    excess AS
    (
        SELECT
            cur.m                                AS m,
            cur.month_close / prv.prev_close - 1 AS ret,
            rf.rf_month                          AS rf_month
        FROM monthly_px AS cur
        INNER JOIN prior_px AS prv ON prv.m = cur.m
        INNER JOIN monthly_rf AS rf ON rf.m = cur.m
    )
SELECT
    concat(toString(intDiv(count(), 12)), '-year')                             AS horizon,
    round(sqrt(12) * avg(ret - rf_month) / stddevSamp(ret - rf_month), 2)      AS sharpe_matched_rf,
    round(sqrt(12) * avg(ret - rf_fixed) / stddevSamp(ret - rf_fixed), 2)      AS sharpe_fixed_rf,
    round(abs(sqrt(12) * avg(ret - rf_month) / stddevSamp(ret - rf_month)
            - sqrt(12) * avg(ret - rf_fixed) / stddevSamp(ret - rf_fixed)), 2) AS abs_gap
FROM excess
CROSS JOIN
(
    SELECT pow(1 + avg(toFloat64(yield_3_month)) / 100, 1.0 / 12) - 1 AS rf_fixed
    FROM global_markets.treasury_yields
    WHERE date >= '2024-12-01'
      AND date <  '2025-01-01'
      AND yield_3_month IS NOT NULL
) AS fixed_rate
CROSS JOIN (SELECT arrayJoin([1, 3, 5, 10, 20]) AS years) AS hz
WHERE m >= subtractYears(toDate('2025-01-01'), years)
GROUP BY years
ORDER BY years
Run this yourself

Sull’intervallo di 1-year, i due valori differiscono di 0.07. Su dodici mesi, il tasso fisso ha poco spazio per allontanarsi dalla media dell’intervallo. Sull’intervallo di 20-year, la differenza è di 0.18 punti: 0.49 con la serie coerente contro 0.32 con il tasso fisso. L’errore segue la distanza tra il singolo tasso scelto e il tasso medio effettivamente prevalso. Questa distanza può aumentare al crescere della durata dell’intervallo. Ogni calcolo successivo eredita l’errore e volatility targeting e position sizing utilizza input esattamente di questo tipo.

La trappola della valuta

Una strategia che produce rendimenti in una valuta e viene valutata rispetto al bill di un’altra genera un dato poco significativo per entrambe. Calcola l’excess return all’interno della stessa valuta: rendimenti in euro rispetto a un bill in euro, rendimenti in yen rispetto a un bill in yen. Le strategie hedged presentano una seconda trappola. Un currency hedge viene prezzato sulla base del forward e i forward points sono strettamente legati al differenziale dei tassi d’interesse tra le due valute. Questo incorpora già parte del tasso domestico in un rendimento estero hedged. Sottrarre anche il bill estero significa quindi conteggiare due volte lo stesso tasso. Indicare la valuta accanto al tasso elimina l’ambiguità.

Pubblicare il tasso insieme al rapporto

Uno Sharpe ratio riportato senza indicare la fonte e la frequenza del risk-free rate non può essere verificato. Due desk possono calcolare rispettivamente 0,8 e 1,1 sulla stessa identica serie di rendimenti ed essere entrambi corretti, se utilizzano serie dei tassi e convenzioni di conversione diverse. Al dato devono accompagnarsi quattro elementi: lo strumento da cui proviene il tasso, la sua frequenza, la convenzione di conversione e l’intervallo esatto. Questa è la differenza tra un dato che il lettore può verificare e un dato che deve accettare sulla fiducia.

Note sui dati e riproducibilità

La serie dei tassi utilizzata in ogni pannello è quella del Treasury bill a tre mesi ricavata dalla curva dei rendimenti giornaliera dei Treasury, calcolata come media all’interno di ogni mese solare e convertita in un tasso mensile prendendo la radice dodicesima di uno più la quotazione annua. I rendimenti sono le chiusure di SPY a fine mese, con il solo price return ed esclusione dei dividendi. I rapporti utilizzano la deviazione standard campionaria degli excess return mensili e la radice quadrata di dodici per l’annualizzazione. Gli ultimi due pannelli utilizzano intervalli che terminano alla stessa data; la colonna del tasso fisso prende la quotazione media del bill nell’ultimo mese dell’intervallo. Ogni dato riportato nel testo sopra proviene dal pannello corrispondente.

Domande frequenti

Quale risk-free rate devo usare nello Sharpe ratio?

Un government bill a breve termine nella stessa valuta dei rendimenti, convertito alla stessa frequenza. Per rendimenti mensili in USD, questo significa il Treasury bill a uno o tre mesi. Le scadenze più lunghe comportano rischio di prezzo durante il periodo di misurazione e non sono quindi idonee come componente risk-free.

Posso sottrarre il rendimento odierno del Treasury bill a una lunga storia di rendimenti?

È l’errore più comune negli Sharpe ratio pubblicati. Nell’intervallo di 20-year riportato sopra, un tasso fisso rilevato alla fine dell’intervallo e la serie mensile coerente producono, sugli stessi rendimenti, valori che differiscono di 0.18.

Devo annualizzare il risk-free rate prima di sottrarlo?

No. Converti la quotazione annua del bill alla frequenza dei rendimenti, sottraila periodo per periodo e annualizza una sola volta la serie degli excess return alla fine. Annualizzare separatamente ciascuna componente e sottrarle dopo lascia un termine incrociato nel risultato.

Quanto incide il risk-free rate sullo Sharpe ratio?

In misura approssimativamente pari alla variazione del tasso divisa per la volatilità annualizzata. Su una strategia ipotetica con volatilità annualizzata del 15%, una differenza di 4% nel tasso assunto modifica il rapporto di circa 0,27. È la distanza tra una performance ordinaria e una celebrata.

Qual è la differenza tra annualizzazione aritmetica e geometrica?

Quella aritmetica moltiplica l’excess return medio del periodo per il numero di periodi in un anno. Quella geometrica capitalizza i periodi e calcola il tasso costante che replica il risultato cumulato. Per periodo, il dato geometrico è pari o inferiore a quello aritmetico e la distanza aumenta con la volatilità.


Ogni pannello qui riportato contiene il codice SQL che lo ha prodotto, quindi la serie dei tassi e l’intervallo sono entrambi visibili. Per applicare la stessa costruzione a un altro ticker o a un altro arco temporale, chiedilo in linguaggio naturale sul terminale Strasmore.

#sharpe ratio#risk-free rate#excess returns#annualization#performance measurement