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.
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 yearLa 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.
- 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.
- La valuta dei rendimenti. Una strategia denominata in euro va valutata rispetto a un bill in euro.
- 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.
- 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.
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.mSi 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.
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 yearsSull’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.
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 yearsSull’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.