Taux sans risque du ratio de Sharpe
Le taux sans risque varie dans le temps. Alignez le rendement d’un Treasury bill sur la fréquence de vos rendements et mesurez le coût d’un taux fixe.
Le taux sans risque du ratio de Sharpe correspond au rendement que vous auriez pu obtenir sur la même période sans prendre le risque que vous évaluez. Il s’agit d’une série, avec une observation par période, exprimée dans la devise des rendements. Sa fréquence doit correspondre à celle des rendements. Soustrayez les deux séries période par période. N’annualisez qu’une seule fois, à la fin.
C’est en omettant cette procédure que la plupart des ratios de Sharpe publiés deviennent incorrects. Prendre un seul chiffre au début d’un historique de rendement de vingt ans — généralement le taux d’un Treasury bill de cette semaine — impose à 2009 le même seuil de rendement qu’à 2024. Notre guide du ratio de Sharpe explique ce que mesure le ratio. Cette page traite de la donnée d’entrée que presque personne ne documente.
Le taux sans risque n’est pas constant
Un ratio de Sharpe mesuré sur vingt ans couvre tout un historique de taux. Le graphique ci-dessous utilise le Treasury bill à trois mois et résume chaque année civile par une moyenne et une fourchette autour de cette moyenne.
Le SQL exact derrière chaque chiffre
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 moyenne annuelle s’établissait à 3.22% en 2005 et à 3.74% en 2026, sur 22 années civiles. C’est la trajectoire entre ces deux observations qui compte. La courbe tombe au plancher, y reste pendant la majeure partie d’une décennie, puis remonte. Les colonnes des plus bas et des plus hauts montrent l’amplitude des mouvements du taux au sein d’une même année. C’est pourquoi même un ratio de Sharpe sur un an nécessite une série appariée plutôt qu’une cotation unique.
Quel taux sans risque utiliser dans le ratio de Sharpe
Quatre caractéristiques déterminent le choix.
- Échéance courte. Le taux doit être presque certain sur une période de mesure. Un bill à trois mois convient pour une analyse mensuelle. Une obligation à dix ans ne convient pas, car son prix évolue pendant le mois mesuré.
- La devise des rendements. Une stratégie libellée en euros doit être évaluée par rapport à un bill en euros.
- La fréquence des rendements. Les taux des bills sont cotés en taux annuels. Une cotation annuelle doit être convertie avant d’être appliquée à un rendement mensuel.
- Des définitions comparables des rendements des deux côtés. Le rendement d’un bill constitue son rendement total. Un rendement de stratégie qui exclut les dividendes n’est donc pas mesuré sur la même base. Rendement du cours versus rendement total traite cette différence.
Deux conventions sont utilisées pour la conversion mentionnée au point trois. La division simple consiste à diviser la cotation annuelle par douze. La capitalisation consiste à prendre la racine douzième de un plus le taux annuel. Pour un bill hypothétique à 5 %, ces deux méthodes donnent respectivement 0,4167 % et 0,4074 % pour le mois. L’écart est d’environ un point de base et se répète chaque mois de l’échantillon. Les graphiques de cette page utilisent la capitalisation. Si les taux des bills vous intéressent comme placement plutôt que comme seuil de rendement, rendement du dividende versus taux des Treasuries et où placer des liquidités disponibles traitent cette question.
Comment construire une série de rendements mensuels excédentaires
La construction est mécanique : prenez le dernier cours de clôture de chaque mois, calculez le rendement mensuel, convertissez la cotation mensuelle du bill en taux mensuel, puis soustrayez les deux. Vous obtenez une série de rendements excédentaires, avec une observation par mois. Comment mesurer les rendements mensuels détaille le calcul du rendement.
Le SQL exact derrière chaque chiffre
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.mIl s’agit de cours de clôture de SPY. La colonne de rendement correspond donc au rendement du cours, hors dividendes. La colonne du taux sans risque commence à 0.128% pour le premier mois affiché et se termine à 0.359%. Face à des rendements boursiers qui varient de plusieurs pourcents, la série du taux sans risque semble relever de l’arrondi. Sur 60 mois de soustraction, elle constitue pourtant toute la différence entre deux ratios de Sharpe censés mesurer la même chose.
Soustrayez d’abord, annualisez ensuite
Une fois les séries alignées, deux ordres de calcul sont possibles. Ils ne donnent pas le même résultat. Première méthode : soustrayez le taux mensuel du rendement mensuel, puis annualisez la série excédentaire. Seconde méthode : composez les rendements pour obtenir un chiffre annuel, composez le bill pour obtenir un chiffre annuel, puis soustrayez l’un à l’autre.
Le SQL exact derrière chaque chiffre
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 yearsSur la période de 20-year, le résultat obtenu en soustrayant d’abord est de 6.49% par an, contre 6.59% avec l’autre méthode. L’écart atteint 0.099 points de pourcentage. Sur la période de 1-year, les deux calculs sont séparés de 0.814 points. Ici, le résultat obtenu en annualisant d’abord est supérieur dans toutes les périodes. L’écart vient d’un terme croisé : composer une série de rendements en chiffre annuel revient à obtenir aussi le taux sans risque sur la prime de risque elle-même. Soustraire ensuite un taux sans risque annualisé ne retire jamais cette composante. Le terme croisé dépend du produit des deux chiffres annualisés. Il est donc maximal lorsque les bills offrent une rémunération élevée.
L’annualisation comporte une seconde distinction. L’annualisation arithmétique consiste à multiplier par douze le rendement excédentaire mensuel moyen. L’annualisation géométrique compose les rendements. Elle correspond au taux annuel constant qui reproduit le résultat cumulé. Prenez une séquence hypothétique de deux périodes, avec +50 % puis -33,3 %. Elle se termine exactement au point de départ. La moyenne arithmétique est de +8,35 % par période, tandis que la moyenne géométrique est nulle. Les graphiques de cette page utilisent la capitalisation. Un point mérite d’être conservé : avec l’annualisation arithmétique, douze fois le rendement excédentaire mensuel moyen est algébriquement égal à douze fois le rendement mensuel moyen moins douze fois le taux moyen des bills. Selon cette convention, l’ordre de la soustraction ne modifie pas le numérateur. Le dénominateur, lui, varie toujours. L’écart entre l’écart-type des rendements excédentaires et celui des rendements bruts apparaît dès que le taux lui-même évolue.
Le coût d’un taux fixe sur le résultat
Le raccourci le plus courant consiste à prendre le taux actuel du bill et à le soustraire à chaque période de l’historique. Le graphique ci-dessous calcule le ratio de Sharpe de deux façons sur cinq périodes se terminant à la même date : une fois par rapport à la série mensuelle appariée, et une fois par rapport au taux du bill en vigueur à la fin de la période.
Le SQL exact derrière chaque chiffre
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 yearsSur la période de 1-year, les deux résultats sont séparés de 0.07. Sur douze mois, le taux fixe a peu de marge pour s’écarter de la moyenne propre à la période. Sur la période de 20-year, l’écart atteint 0.18 : 0.49 avec la série appariée contre 0.32 avec le taux fixe. L’erreur suit l’écart entre le taux unique choisi et le taux moyen effectivement observé. Cet écart a davantage de chances de s’amplifier lorsque la période s’allonge. Tous les calculs en aval en héritent. Le ciblage de volatilité et le dimensionnement des positions repose sur des données exactement de cette nature.
Le piège de la devise
Une stratégie qui génère ses rendements dans une devise et qui est évaluée par rapport au bill d’une autre devise produit un chiffre qui a peu de signification dans l’une comme dans l’autre. Calculez le rendement excédentaire dans une seule devise : rendements en euros contre bill en euros, rendements en yens contre bill en yens. Les stratégies couvertes comportent un second piège. Une couverture de change est valorisée à partir du forward. Les points de forward sont proches du différentiel de taux d’intérêt entre les deux devises. Une partie du taux domestique est donc déjà intégrée dans le rendement couvert en devise étrangère. Soustraire ensuite le bill étranger revient à compter deux fois le même taux. Indiquez la devise à côté du taux et l’ambiguïté disparaît.
Publiez le taux avec le ratio
Un ratio de Sharpe publié sans indication de sa source de taux sans risque et de sa fréquence ne peut être vérifié par personne. Deux desks peuvent calculer respectivement 0,8 et 1,1 à partir de la même série de rendements, et avoir tous deux raison s’ils utilisent des séries de taux et des conventions de conversion différentes. Quatre éléments doivent accompagner le chiffre : l’instrument dont provient le taux, sa fréquence, la convention de conversion et la période exacte. C’est ce qui distingue un chiffre qu’un lecteur peut auditer d’un chiffre qu’il doit accepter sans vérification.
Notes sur les données et reproductibilité
La série de taux utilisée dans chaque graphique correspond au Treasury bill à trois mois issu de la courbe quotidienne des taux du Treasury. Elle est moyennée à l’intérieur de chaque mois civil, puis convertie en taux mensuel selon la racine douzième de un plus la cotation annuelle. Les rendements correspondent aux cours de clôture de SPY en fin de mois. Il s’agit uniquement du rendement du cours, hors dividendes. Les ratios utilisent l’écart-type d’échantillon des rendements mensuels excédentaires et la racine carrée de douze pour l’annualisation. Les deux derniers graphiques utilisent des périodes se terminant à une date commune. La colonne du taux fixe reprend la cotation moyenne du bill au cours du dernier mois de chaque période. Tous les chiffres cités dans le texte ci-dessus proviennent du graphique correspondant.
FAQ
Quel taux sans risque dois-je utiliser dans le ratio de Sharpe ?
Un bill souverain à court terme, libellé dans la même devise que les rendements et converti à la même fréquence. Pour des rendements mensuels en USD, il s’agit du Treasury bill à un mois ou à trois mois. Les maturités plus longues comportent un risque de prix sur la période de mesure. Elles ne peuvent donc pas servir de composante sans risque.
Puis-je soustraire le taux du Treasury bill d’aujourd’hui à un historique de rendements long ?
C’est l’erreur la plus courante dans les ratios de Sharpe publiés. Sur la période de 20-year présentée ci-dessus, un taux fixe de fin de période et la série mensuelle appariée donnent, sur les mêmes rendements, des résultats séparés de 0.18.
Dois-je annualiser le taux sans risque avant de le soustraire ?
Non. Convertissez la cotation annuelle du bill à la fréquence des rendements. Soustrayez ensuite période par période, puis annualisez une seule fois la série excédentaire à la fin. Annualiser séparément chaque composante puis les soustraire laisse un terme croisé dans le résultat.
Dans quelle mesure le taux sans risque modifie-t-il un ratio de Sharpe ?
L’effet correspond approximativement à la variation du taux divisée par la volatilité annualisée. Pour une stratégie hypothétique affichant une volatilité annualisée de 15 %, une différence de 4 % dans le taux retenu modifie le ratio d’environ 0,27. C’est l’écart entre un historique ordinaire et un historique considéré comme exceptionnel.
Quelle est la différence entre l’annualisation arithmétique et géométrique ?
L’annualisation arithmétique multiplie le rendement excédentaire moyen par période par le nombre de périodes dans une année. L’annualisation géométrique compose les périodes pour obtenir le taux constant qui reproduit le résultat cumulé. Par période, le résultat géométrique est inférieur ou égal au résultat arithmétique. L’écart entre les deux augmente avec la volatilité.
Chaque graphique contient la requête SQL qui l’a produit. La série de taux et la période sont donc visibles. Pour appliquer la même construction à un autre ticker ou à une autre période historique, demandez-le en français courant sur le terminal Strasmore.