Strasmore Research
Matuto Matt ConnorNi Matt Connor

Risk-free rate sa Sharpe ratio: tamang pagtutugma

Alamin kung paano itugma ang bill yield sa return frequency, bakit nagbabago ang risk-free rate, at ang kapalit ng paggamit ng iisang fixed rate.

Ang risk-free rate sa Sharpe ratio ay ang return na maaari mong makuha sa parehong panahon nang hindi inaako ang risk na sinusukat mo. Isa itong series na may isang reading bawat period at naka-quote sa currency ng mga return. Itugma ang frequency nito sa frequency ng return at ibawas ito period by period. Isagawa lamang ang annualization sa dulo.

Dito nagkakamali ang karamihan sa mga nai-publish na Sharpe ratio. Kinukuha ang isang numero mula sa simula ng twenty-year return history—karaniwan, kung ano ang ibinabayad ng Treasury bill ngayong linggo—kaya pareho ang hurdle para sa 2009 at 2024. Sinasaklaw ng aming gabay sa Sharpe ratio kung ano ang sinusukat ng ratio. Nakatuon naman ang page na ito sa input na halos walang nagdodokumento.

Hindi constant ang risk-free rate

Ang Sharpe ratio na sinusukat sa loob ng twenty years ay sumasaklaw sa kasaysayan ng mga rate. Kinukuha ng panel sa ibaba ang three-month Treasury bill at pinagsasama ang bawat calendar year sa isang average at sa range sa paligid nito.

QueryThree-month Treasury bill yield ayon sa calendar year
Ang eksaktong SQL sa likod ng bawat 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

Ang yearly average ay 3.22% noong 2005 at 3.74% noong 2026, sa loob ng 22 calendar years. Ang galaw sa pagitan ng dalawang reading na ito ang mahalaga. Bumaba ang linya sa pinakamababang antas, nanatili roon sa halos isang dekada, at muling umakyat. Ipinapakita ng low at high columns kung gaano kalayo ang nilakbay ng rate sa loob ng mga indibidwal na taon. Kaya kahit ang one-year Sharpe ratio ay nangangailangan ng matched series, hindi ng iisang quote.

Aling risk-free rate ang dapat gamitin sa Sharpe ratio

Apat na katangian ang nagtatakda ng pagpili.

  1. Short maturity. Kailangang halos tiyak ang rate sa loob ng isang measurement period. Ang three-month bill ay angkop para sa monthly analysis. Hindi angkop ang ten-year note dahil gumagalaw ang presyo nito sa loob ng buwan na sinusukat mo.
  2. Sariling currency ng return. Ang strategy na naka-denominate sa euro ay dapat ikumpara sa euro bill.
  3. Sariling frequency ng return. Ang bill yields ay naka-quote bilang annual rates. Kailangang i-convert muna ang annual quote sa mas mababang frequency bago ito iugnay sa monthly return.
  4. Magkatugmang return definitions sa magkabilang panig. Ang yield ng bill ang buong return nito. Kaya hindi magkatugma ang pagsukat kung hindi kasama sa strategy return ang dividends. Sinasaklaw ng Price return kumpara sa total return ang pagkakaibang ito.

May dalawang convention para sa conversion sa point three. Sa simple division, hinahati sa twelve ang annual quote. Sa compounding, kinukuha ang twelfth root ng one plus the annual rate. Sa hypothetical na 5% bill, nagbibigay ang mga ito ng 0.4167% at 0.4074% para sa buwan. Halos isang basis point ang diperensiya, at nauulit ito sa bawat buwan ng sample. Gumagamit ng compounding ang mga panel dito. Kung mas interesado ka sa bill yield bilang holding kaysa bilang hurdle, tinatalakay ng dividend yield kumpara sa Treasury yields at kung saan ilalagay ang idle cash ang paksang iyon.

Paano bumuo ng monthly excess return series

Mechanical ang construction: kunin ang last close ng bawat buwan, kalkulahin ang return ng buwan, i-convert ang bill quote ng buwang iyon sa monthly rate, at saka ibawas ito. Ang resulta ay isang excess return series na may isang numero bawat buwan. Detalyadong tinatalakay ng Paano sinusukat ang monthly returns ang return leg.

QueryMonthly return, monthly risk-free rate at excess, 2020 hanggang 2024
Ang eksaktong SQL sa likod ng bawat 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

Mga SPY close ang mga iyon, kaya price return ang return column at hindi kasama ang dividends. Nagsisimula ang risk-free column sa 0.128% para sa unang buwang ipinapakita at nagtatapos sa 0.359%. Katabi ng mga equity month na gumagalaw nang ilang porsiyento, tila rounding error ang risk-free strip. Ngunit sa loob ng 60 buwan ng subtraction, ito ang buong diperensiya sa pagitan ng dalawang Sharpe ratio na nagsasabing pareho ang sinusukat nila.

Magbawas muna, saka mag-annualize

May dalawang posibleng pagkakasunod-sunod ng operasyon kapag naka-line up na ang mga series, at magkaiba ang resulta ng mga ito. Excess first: ibawas ang monthly rate sa monthly return, saka i-annualize ang excess series. Annualize first: i-compound ang mga return sa annual figure, i-compound ang bill sa annual figure, saka ibawas ang isa sa isa.

QueryAnnualized risk premium: ibawas buwan-buwan, o i-annualize muna ang bawat leg
Ang eksaktong SQL sa likod ng bawat 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

Sa loob ng 20-year window, ang excess-first answer ay 6.49% bawat taon kumpara sa 6.59% para sa kabilang order. May agwat na 0.099 percentage points. Sa 1-year window, 0.814 points ang pagitan ng parehong computation. Sa bawat window dito, mas mataas ang annualize-first figure kaysa sa excess-first figure. Ang naghihiwalay sa kanila ay isang cross term: kapag kino-compound ang return series sa annual number, kasama rito ang kita mula sa bill rate na idinadagdag sa risk premium mismo. Kapag ibinawas ang annualized bill pagkatapos, hindi na naaalis ang bahaging iyon. Nakadepende ang cross term sa produkto ng dalawang annualized number, kaya pinakamalaki ito kapag mataas ang ibinabayad ng bills.

May pangalawang pagpipilian sa annualization. Sa arithmetic annualization, minumultiply sa twelve ang average monthly excess. Sa geometric annualization, kino-compound ang returns upang makuha ang constant annual rate na magrereproduce ng cumulative result. Isaalang-alang ang hypothetical na two-period run na +50% na sinundan ng -33.3%, na nagtatapos eksaktong sa panimulang antas. Ang arithmetic average ay +8.35% bawat period, samantalang zero ang geometric average. Gumagamit ng compounding ang mga panel dito. Isang mahalagang footnote: sa arithmetic annualization, ang twelve times the mean return minus twelve times the mean bill rate ay algebraically kapareho ng twelve times the mean excess. Sa convention na ito, hindi naaapektuhan ng order ng subtraction ang numerator. Gumagalaw pa rin ang denominator dahil nagkakaiba ang standard deviation ng excess returns at standard deviation ng raw returns kapag gumagalaw mismo ang rate.

Ano ang epekto ng paggamit ng isang fixed rate

Ang karaniwang shortcut ay kunin ang kasalukuyang bill yield at ibawas ito sa bawat period sa history. Kinakalkula ng panel sa ibaba ang Sharpe ratio sa dalawang paraan sa limang window na nagtatapos sa parehong petsa: isang beses gamit ang matched monthly series, at isang beses gamit ang bill yield na umiiral sa dulo ng window.

QuerySharpe ratio sa matched rate series laban sa isang fixed rate
Ang eksaktong SQL sa likod ng bawat 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

Sa 1-year window, 0.07 ang pagitan ng dalawang reading. Sa twelve months, maliit ang puwang para lumayo ang fixed rate sa sariling average ng window. Sa 20-year window, 0.18 ang pagitan nila: 0.49 gamit ang matched series kumpara sa 0.32 gamit ang fixed rate. Nakadepende ang error sa layo sa pagitan ng napili mong single rate at ng average rate na aktuwal na umiral. Mas malaki ang puwang para lumaki ang distansiyang ito habang humahaba ang window. Namamana ito ng lahat ng susunod na calculation, at gumagamit ang volatility targeting at position sizing ng mga input na ganito mismo.

Ang currency trap

Ang strategy na kumikita sa isang currency ngunit ikinukumpara sa bill ng ibang currency ay gumagawa ng numerong walang malinaw na kahulugan sa alinman sa dalawang currency. Kalkulahin ang excess return sa loob ng iisang currency: euro returns laban sa euro bill, at yen returns laban sa yen bill. May pangalawang trap ang hedged strategies. Nakabatay ang currency hedge sa forward, at ang forward points ay malapit sa interest rate differential ng dalawang currency. Dahil dito, may bahagi na ng domestic rate sa loob ng hedged foreign return. Kapag ibinawas pa ang foreign bill, dalawang beses na sinisingil ang parehong rate. Ilagay ang currency sa tabi ng rate upang mawala ang ambiguity.

I-publish ang rate kasama ng ratio

Hindi mabe-verify ng sinuman ang Sharpe ratio kung hindi nakasaad ang source at frequency ng risk-free rate. Maaaring makalkula ng dalawang desk ang 0.8 at 1.1 mula sa parehong return stream, at parehong tama, dahil magkaiba ang rate series at conversion conventions na ginamit nila. Apat na item ang dapat kasama ng numero: ang instrument kung saan galing ang rate, ang frequency nito, ang conversion convention, at ang eksaktong window. Iyan ang pagkakaiba ng numerong maaaring i-audit ng reader at numerong kailangan niyang paniwalaan na lamang.

Mga tala sa data at reproducibility

Ang rate series sa bawat panel ay ang three-month Treasury bill mula sa daily Treasury yield curve. Ina-average ito sa loob ng bawat calendar month at kino-convert sa monthly rate bilang twelfth root ng one plus the annual quote. Ang returns ay SPY month-end closes, price return lamang, at hindi kasama ang dividends. Gumagamit ang ratios ng sample standard deviation ng monthly excess returns at ng square root of twelve para sa annualization. Ang huling dalawang panel ay gumagamit ng mga window na nagtatapos sa iisang petsa. Kinukuha ng fixed-rate column ang average bill quote sa final month ng window. Ang bawat figure sa prose sa itaas ay galing sa panel na katabi nito.

FAQ

Aling risk-free rate ang dapat kong gamitin sa Sharpe ratio?

Isang short government bill sa parehong currency ng returns, na kino-convert sa parehong frequency ng returns. Para sa monthly USD returns, nangangahulugan ito ng one-month o three-month Treasury bill. May price risk ang mas mahahabang maturity sa loob ng measurement period, kaya hindi sila kwalipikado bilang risk-free leg.

Maaari ko bang ibawas ang today's Treasury bill yield sa mahabang return history?

Ito ang pinakakaraniwang pagkakamali sa mga nai-publish na Sharpe ratio. Sa 20-year window sa itaas, ang fixed end-of-window rate at ang matched monthly series ay nagbibigay ng readings na 0.18 ang pagitan, kahit pareho ang mga return na ginagamit.

Dapat ko bang i-annualize ang risk-free rate bago ito ibawas?

Hindi. I-convert ang annual bill quote sa frequency ng return, ibawas ito period by period, at saka isang beses i-annualize ang excess series sa dulo. Kapag hiwalay na in-annualize ang bawat leg at saka ibinawas, may cross term na naiiwan sa resulta.

Gaano kalaki ang epekto ng risk-free rate sa Sharpe ratio?

Humigit-kumulang katumbas ito ng pagbabago sa rate na hinati sa annualized volatility. Sa hypothetical na strategy na may 15% annualized volatility, ang 4% difference sa assumed rate ay nagpapabago sa ratio nang humigit-kumulang 0.27. Iyan ang pagitan ng ordinaryong track record at ng track record na itinuturing na kahanga-hanga.

Ano ang pagkakaiba ng arithmetic at geometric annualization?

Minumultiply ng arithmetic annualization ang average period excess sa bilang ng periods sa isang taon. Kino-compound naman ng geometric annualization ang mga period upang makuha ang constant rate na magrereproduce ng cumulative result. Sa bawat period, ang geometric figure ay katumbas o mas mababa sa arithmetic figure. Lumalaki ang pagitan nila kapag mas mataas ang volatility.


May SQL na gumawa sa bawat panel dito, kaya parehong makikita ang rate series at ang window. Para ilapat ang parehong construction sa ibang ticker o ibang bahagi ng history, hilingin ito sa plain English sa Strasmore terminal.

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