Risicovrije rente in de Sharpe ratio bepalen
De risicovrije rente in de Sharpe ratio varieert over de tijd. Leer hoe u een Treasury bill yield afstemt op uw rendementsfrequentie en waarom één vaste rentevoet de uitkomst vertekent.
De risicovrije rente in de Sharpe ratio is het rendement dat u over dezelfde periode had kunnen behalen zonder het risico te nemen dat u beoordeelt. Het is een reeks, één waarde per periode, genoteerd in de valuta van de rendementen. Stem de frequentie af op de rendementsfrequentie en trek deze per periode af. Annualiseer pas aan het einde, in één keer.
Het overslaan van deze procedure is waar de meeste gepubliceerde Sharpe ratio's de fout in gaan. Het plukken van één cijfer uit een twintigjarige rendementshistorie, meestal wat een Treasury bill deze week oplevert, legt 2009 dezelfde lat op als 2024. Onze gids voor de Sharpe ratio behandelt wat de ratio meet. Deze pagina behandelt de input die bijna niemand documenteert.
De risicovrije rente is geen constante
Een Sharpe ratio die over twintig jaar wordt gemeten, beslaat een rentehistorie. Het onderstaande paneel neemt de driemaands Treasury bill en brengt elk kalenderjaar terug tot een gemiddelde en de spreiding daaromheen.
De exacte SQL achter elk getal
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 yearHet jaarlijkse gemiddelde bedroeg 3.22% in 2005 en 3.74% in 2026, over 22 kalenderjaren. Het pad tussen die twee waarden is wat ertoe doet. De lijn daalt naar het dieptepunt, blijft daar het grootste deel van een decennium en klimt dan weer op. De kolommen voor laag en hoog tonen hoe ver de rente binnen afzonderlijke jaren bewoog; daarom vereist zelfs een Sharpe ratio over één jaar een bijpassende reeks in plaats van één koers.
Welke risicovrije rente hoort in de Sharpe ratio
Vier eigenschappen bepalen de keuze.
- Korte looptijd. De rente moet over één meetperiode nagenoeg zeker zijn. Een driemaands bill is geschikt voor maandelijkse berekeningen. Een tienjarige note niet, omdat de prijs daarvan beweegt gedurende de maand die u meet.
- De eigen valuta van het rendement. Een strategie in euro's wordt beoordeeld tegenover een euro-bill.
- De eigen frequentie van het rendement. Bill-yields worden genoteerd als jaarrentes, en een jaarlijkse notering moet worden omgerekend voordat deze op een maandelijks rendement kan worden toegepast.
- Vergelijkbare rendementsdefinities aan beide kanten. De yield van een bill is het volledige rendement; een strategierendement dat dividenden uitsluit, wordt dus niet op gelijke voet gemeten. Price return versus total return behandelt dat verschil.
Voor de omrekening in punt drie zijn twee conventies in omloop. Eenvoudige deling deelt de jaarlijkse notering door twaalf. Samengestelde interest neemt de twaalfdemachtswortel van één plus de jaarrente. Bij een hypothetische bill van 5% geeft dit respectievelijk 0,4167% en 0,4074% voor de maand; een verschil van ongeveer één basis point dat elke maand in de steekproef terugkeert. De panelen hier gebruiken samengestelde interest. Als bill-yields u interesseren als belegging in plaats van als benchmark, behandelen dividend yield versus Treasury yields en where to park idle cash dat onderwerp.
Hoe u een reeks maandelijkse excess returns opbouwt
De constructie is mechanisch: neem de laatste slotkoers van elke maand, bereken het rendement van de maand, reken de bill-notering van die maand om naar een maandrente en trek deze vervolgens af. Het resultaat is een reeks excess returns, één cijfer per maand. How monthly returns are measured behandelt het rendementsgedeelte in detail.
De exacte SQL achter elk getal
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.mDit zijn SPY-slotkoersen, dus de rendementskolom is een price return zonder dividenden. De risicovrije kolom opent op 0.128% voor de eerste maand in beeld en sluit op 0.359%. Naast aandelenmaanden die enkele procenten schommelen, lijkt de risicovrije strook op afronding. Over 60 maanden van aftrekking is het echter het volledige verschil tussen twee Sharpe ratio's die beweren hetzelfde te meten.
Eerst aftrekken, dan annualiseren
Er zijn twee volgordes van bewerking mogelijk zodra de reeksen op elkaar zijn afgestemd, en deze leiden tot verschillende resultaten. Eerst excess: trek de maandrente af van het maandrendement en annualiseer vervolgens de excess-reeks. Eerst annualiseren: bereken de samengestelde jaarrendementen, bereken de samengestelde jaarrente van de bill en trek de één van de ander af.
De exacte SQL achter elk getal
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 yearsOver het 20-year-venster is het antwoord bij 'eerst excess' 6.49% per jaar tegenover 6.59% voor de andere volgorde, een verschil van 0.099 procentpunt. Bij het 1-year-venster liggen dezelfde twee berekeningen 0.814 punten uit elkaar. Het cijfer bij 'eerst annualiseren' ligt in elk venster hier hoger dan bij 'eerst excess'. Wat hen scheidt is een kruisterm: het samenstellen van een rendementsreeks tot een jaarcijfer omvat het verdienen van de bill-rente bovenop de risicopremie zelf, en het daarna aftrekken van een geannualiseerde bill haalt dat stuk er nooit meer uit. De kruisterm schaalt met het product van de twee geannualiseerde cijfers, dus het verschil is het grootst wanneer bills goed renderen.
Annualiseren kent een tweede splitsing. Rekenkundige annualisering vermenigvuldigt het gemiddelde maandelijkse excess met twaalf. Meetkundige annualisering gebruikt samengestelde interest: de constante jaarrente die het cumulatieve resultaat reproduceert. Neem een hypothetische reeks van twee perioden van +50% gevolgd door -33,3%, wat precies eindigt waar het begon. Het rekenkundig gemiddelde is +8,35% per periode en het meetkundig gemiddelde is nul. De panelen hier gebruiken samengestelde interest. Eén voetnoot is het vermelden waard: bij rekenkundige annualisering is twaalf keer het gemiddelde rendement minus twaalf keer de gemiddelde bill-rente algebraïsch hetzelfde als twaalf keer het gemiddelde excess. Bij die conventie blijft de teller bij de volgorde van aftrekking gelijk. De noemer verandert echter wel, aangezien de standaarddeviatie van excess returns afwijkt van de standaarddeviatie van ruwe rendementen zodra de rente zelf beweegt.
Wat één vaste rente kost aan nauwkeurigheid
De gebruikelijke kortere weg is om de huidige bill-yield te nemen en deze van elke periode in de historie af te trekken. Het onderstaande paneel berekent de Sharpe ratio op beide manieren over vijf vensters die op dezelfde datum eindigen: één keer tegenover de bijpassende maandelijkse reeks, één keer tegenover de bill-yield die aan het einde van het venster gold.
De exacte SQL achter elk getal
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 yearsBij het 1-year-venster liggen de twee waarden 0.07 uit elkaar. Over twaalf maanden heeft de vaste rente weinig ruimte om af te wijken van het eigen gemiddelde van het venster. Bij het 20-year-venster liggen ze 0.18 uit elkaar: 0.49 op de bijpassende reeks tegenover 0.32 op de vaste rente. De fout volgt de afstand tussen de gekozen rente en de gemiddelde rente die daadwerkelijk heerste, en die afstand krijgt meer ruimte om groter te worden naarmate het venster langer wordt. Alles wat daarop volgt erft deze fout, en volatility targeting and position sizing werkt met inputs van precies dit type.
De valuta-valstrik
Een strategie die in de ene valuta verdient en wordt beoordeeld tegenover de bill van een andere valuta, levert een cijfer op dat in beide weinig betekent. Bereken de excess return binnen één valuta: euro-rendementen tegenover een euro-bill, yen-rendementen tegenover een yen-bill. Hedged strategieën bevatten een tweede valstrik. Een valuta-hedge wordt geprijsd op basis van de forward, en forward points liggen dicht bij het renteverschil tussen de twee valuta's, waardoor een deel van de binnenlandse rente al in een gehedged buitenlands rendement zit. Het daarnaast aftrekken van de buitenlandse bill betekent dat dezelfde rente dubbel wordt verrekend. Benoem de valuta naast de rente en de ambiguïteit verdwijnt.
Publiceer de rente naast de ratio
Een Sharpe ratio die wordt geciteerd zonder de bron en frequentie van de risicovrije rente kan door niemand worden gecontroleerd. Twee desks kunnen 0,8 en 1,1 berekenen uit dezelfde rendementsstroom en beide kunnen gelijk hebben, werkend met verschillende rentereeksen en verschillende omrekeningsconventies. Vier zaken horen bij het cijfer: het instrument waar de rente vandaan komt, de frequentie, de omrekeningsconventie en het exacte venster. Dat is het verschil tussen een cijfer dat een lezer kan auditen en een cijfer dat een lezer op goed vertrouwen moet aannemen.
Data-opmerkingen en reproduceerbaarheid
De rentereeks in elk paneel is de driemaands Treasury bill uit de dagelijkse Treasury yield curve, gemiddeld binnen elke kalendermaand, omgerekend naar een maandrente als de twaalfdemachtswortel van één plus de jaarlijkse notering. Rendementen zijn SPY-slotkoersen aan het einde van de maand, enkel price return, exclusief dividenden. De ratio's gebruiken de steekproefstandaarddeviatie van maandelijkse excess returns en de wortel uit twaalf voor annualisering. De laatste twee panelen gebruiken vensters die op een gezamenlijke datum eindigen, en de kolom met vaste rente neemt de gemiddelde bill-notering in de laatste maand van dat venster. Elk cijfer in de tekst hierboven komt uit het paneel ernaast.
Veelgestelde vragen
Welke risicovrije rente moet ik gebruiken in de Sharpe ratio?
Een korte staatsobligatie (bill) in dezelfde valuta als de rendementen, omgerekend naar dezelfde frequentie als de rendementen. Voor maandelijkse USD-rendementen betekent dit de één- of driemaands Treasury bill. Langere looptijden dragen prijsrisico over de meetperiode, wat hen diskwalificeert als risicovrije component.
Kan ik de huidige Treasury bill-yield aftrekken van een lange rendementshistorie?
Dit is de meest gemaakte fout in gepubliceerde Sharpe ratio's. Over het 20-year-venster hierboven produceren een vaste rente aan het einde van het venster en de bijpassende maandelijkse reeks waarden die 0.18 uit elkaar liggen op exact dezelfde rendementen.
Moet ik de risicovrije rente annualiseren voordat ik deze aftrek?
Nee. Reken de jaarlijkse bill-notering om naar de frequentie van het rendement, trek deze per periode af en annualiseer de excess-reeks pas aan het einde. Het afzonderlijk annualiseren van elk onderdeel en daarna aftrekken laat een kruisterm achter in het antwoord.
Hoeveel beïnvloedt de risicovrije rente een Sharpe ratio?
Ongeveer de verandering in de rente gedeeld door de geannualiseerde volatiliteit. Bij een hypothetische strategie met 15% geannualiseerde volatiliteit verschuift een verschil van 4% in de veronderstelde rente de ratio met ongeveer 0,27, wat het verschil is tussen een gewone trackrecord en een uitmuntende.
Wat is het verschil tussen rekenkundige en meetkundige annualisering?
Rekenkundig vermenigvuldigt het gemiddelde excess per periode met het aantal perioden in een jaar. Meetkundig berekent de samengestelde rente over de perioden tot de constante jaarrente die het cumulatieve resultaat reproduceert. Per periode ligt het meetkundige cijfer op of onder het rekenkundige cijfer, en de afstand daartussen wordt groter naarmate de volatiliteit toeneemt.
Elk paneel hier bevat de SQL die het heeft geproduceerd, dus zowel de rentereeks als het venster zijn zichtbaar. Om dezelfde constructie uit te voeren op een andere ticker of een andere periode in de historie, kunt u hierom vragen in begrijpelijke taal op de Strasmore-terminal.