Kiwango kisicho na hatari katika Sharpe ratio
Kiwango kisicho na hatari katika Sharpe ratio hubadilika. Jifunze jinsi ya kulinganisha yield ya Treasury bill na mzunguko wa mapato yako ili kupata matokeo sahihi.
Kiwango kisicho na hatari (risk-free rate) katika Sharpe ratio ni mapato ambayo ungeweza kupata katika kipindi hichohicho bila kuchukua hatari unayopima. Hii ni mfululizo wa takwimu, usomaji mmoja kwa kila kipindi, uliotajwa katika sarafu ya mapato hayo. Linganisha mzunguko wake na mzunguko wa mapato na uondoe kwa kila kipindi. Fanya hesabu ya mwaka (annualize) mara moja tu, mwishoni.
Kukwepa utaratibu huo ndiko kunakofanya Sharpe ratios nyingi zilizochapishwa kuwa na makosa. Kuchukua namba moja kutoka juu ya historia ya mapato ya miaka ishirini, kwa kawaida kile ambacho Treasury bill inalipa wiki hii, kunatoa mzigo sawa wa kulinganisha (hurdle) kwa mwaka 2009 na 2024. Mwongozo wetu kuhusu Sharpe ratio unaelezea kile ambacho uwiano huu hupima. Ukurasa huu unashughulikia data ya msingi ambayo karibu hakuna mtu anayoiweka kwenye kumbukumbu.
Kiwango kisicho na hatari si namba isiyobadilika
Sharpe ratio inayopimwa kwa miaka ishirini inahusisha historia ya viwango. Jopo hapa chini linachukua Treasury bill ya miezi mitatu na kuunganisha kila mwaka wa kalenda kuwa wastani na masafa yake.
SQL halisi nyuma ya kila namba
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 yearWastani wa kila mwaka ulikuwa 3.22% katika 2005 na 3.74% katika 2026, kwa kipindi cha 22 miaka ya kalenda. Njia kati ya usomaji huo miwili ndiyo sehemu muhimu. Mstari hushuka hadi chini, hukaa hapo kwa sehemu kubwa ya muongo, kisha hupanda tena. Safu wima za chini na juu zinaonyesha jinsi kiwango kilivyobadilika ndani ya miaka moja-moja, ndiyo maana hata Sharpe ratio ya mwaka mmoja inahitaji mfululizo uliolinganishwa badala ya nukuu moja.
Ni kiwango gani kisicho na hatari kinachofaa katika Sharpe ratio
Sifa nne huamua chaguo hilo.
- Ukomavu mfupi (Short maturity). Kiwango lazima kiwe na uhakika karibu kabisa ndani ya kipindi kimoja cha upimaji. Bill ya miezi mitatu inafaa kwa kazi ya kila mwezi. Note ya miaka kumi haifai, kwa sababu bei yake hubadilika ndani ya mwezi unaoupima.
- Sarafu ya mapato yenyewe. Mkakati uliotajwa kwa euro hupimwa dhidi ya bill ya euro.
- Mzunguko wa mapato yenyewe. Yields za bill hutajwa kama viwango vya mwaka, na nukuu ya mwaka lazima ibadilishwe kabla ya kugusa mapato ya mwezi.
- Ufafanuzi wa mapato unaolingana pande zote mbili. Yield ya bill ndiyo mapato yake yote, kwa hivyo mapato ya mkakati ambayo hayajumuishi dividends hayapimwi kwa msingi sawa. Price return dhidi ya total return inashughulikia pengo hilo.
Ubadilishaji katika hoja ya tatu una mbinu mbili zinazotumika. Mgawanyo rahisi hugawa nukuu ya mwaka kwa kumi na mbili. Ujumuishaji (compounding) huchukua mzizi wa kumi na mbili wa moja jumlisha kiwango cha mwaka. Kwenye bill ya 5% ya dhahania, hizi hutoa 0.4167% na 0.4074% kwa mwezi, tofauti ya takribani basis point moja inayojirudia kila mwezi wa sampuli. Majopo hapa yanatumia ujumuishaji. Ikiwa yields za bill zinakuvutia kama uwekezaji badala ya kizuizi, dividend yield dhidi ya Treasury yields na wapi pa kuhifadhi pesa taslimu vinashughulikia eneo hilo.
Jinsi ya kujenga mfululizo wa mapato ya ziada ya kila mwezi
Ujenzi wake ni wa kiufundi: chukua bei ya mwisho ya kila mwezi, tengeneza mapato ya mwezi huo, badilisha nukuu ya bill ya mwezi huo kuwa kiwango cha mwezi, kisha uondoe. Kinachotokea ni mfululizo wa mapato ya ziada, namba moja kwa kila mwezi. Jinsi mapato ya kila mwezi yanavyopimwa inashughulikia sehemu ya mapato kwa kina.
SQL halisi nyuma ya kila namba
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.mHizo ni bei za mwisho za SPY, kwa hivyo safu ya mapato ni price return bila dividends. Safu ya kiwango kisicho na hatari huanza kwa 0.128% kwa mwezi wa kwanza unaoonekana na kuishia kwa 0.359%. Kando ya miezi ya hisa inayoyumba kwa asilimia kadhaa, safu ya kiwango kisicho na hatari inaonekana kama namba ndogo tu. Katika 60 miezi ya kutoa, ndiyo tofauti nzima kati ya Sharpe ratios mbili zinazodai kupima kitu kimoja.
Toa kwanza, kisha fanya hesabu ya mwaka
Utaratibu wa operesheni mbili unapatikana pindi mfululizo unapopangwa, na haukubaliani. Ziada kwanza: toa kiwango cha mwezi kutoka kwa mapato ya mwezi, kisha fanya hesabu ya mwaka kwa mfululizo wa ziada. Hesabu ya mwaka kwanza: jumuisha mapato kuwa namba ya mwaka, jumuisha bill kuwa namba ya mwaka, kisha toa moja kutoka nyingine.
SQL halisi nyuma ya kila namba
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 yearsKatika kipindi cha 20-year, jibu la ziada-kwanza ni 6.49% kwa mwaka dhidi ya 6.59% kwa utaratibu mwingine, pengo la 0.099 asilimia. Katika kipindi cha 1-year, hesabu hizo mbili ziko 0.814 pointi mbali. Namba ya hesabu-ya-mwaka-kwanza inachapishwa juu ya namba ya ziada-kwanza katika kila kipindi hapa. Kinachozitenganisha ni cross term: kujumuisha mfululizo wa mapato kuwa namba ya mwaka kunajumuisha kupata kiwango cha bill juu ya risk premium yenyewe, na kutoa bill ya mwaka baadaye hakurudishi sehemu hiyo. Cross term huongezeka kulingana na zao la namba mbili za mwaka, kwa hivyo huwa pana zaidi wakati bills zinalipa vizuri.
Kufanya hesabu ya mwaka kuna njia nyingine. Hesabu ya mwaka ya kiarithmetiki huzidisha wastani wa ziada ya mwezi kwa kumi na mbili. Hesabu ya mwaka ya kijiometri hujumuisha: kiwango cha mwaka kisichobadilika kinachozalisha matokeo ya jumla. Chukua kipindi cha dhahania cha miezi miwili cha +50% ikifuatiwa na -33.3%, ambacho huishia pale kilipoanzia. Wastani wa kiarithmetiki ni +8.35% kwa kipindi na wastani wa kijiometri ni sifuri. Majopo hapa yanatumia ujumuishaji. Ujumbe mmoja wa kuzingatia: chini ya hesabu ya mwaka ya kiarithmetiki, mara kumi na mbili ya wastani wa mapato kutoa mara kumi na mbili ya wastani wa kiwango cha bill ni sawa kihesabu na mara kumi na mbili ya wastani wa ziada. Chini ya mkataba huo, utaratibu wa kutoa hauathiri namba ya juu (numerator). Namba ya chini (denominator) bado inabadilika, kwa sababu standard deviation ya mapato ya ziada hutofautiana na standard deviation ya mapato ghafi wakati kiwango chenyewe kinabadilika.
Gharama ya kutumia kiwango kimoja kisichobadilika
Njia ya mkato ya kawaida ni kuchukua yield ya sasa ya bill na kuitoa kutoka kila kipindi katika historia. Jopo hapa chini linaendesha Sharpe ratio kwa njia zote mbili katika vipindi vitano vinavyoishia tarehe moja: mara moja dhidi ya mfululizo wa mwezi uliolinganishwa, mara moja dhidi ya yield ya bill iliyokuwepo mwishoni mwa kipindi.
SQL halisi nyuma ya kila namba
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 yearsKatika kipindi cha 1-year, usomaji huo miwili uko 0.07 mbali. Katika miezi kumi na miwili, kiwango kisichobadilika kina nafasi ndogo ya kupotoka kutoka wastani wa kipindi hicho. Katika kipindi cha 20-year, viko 0.18 mbali: 0.49 kwenye mfululizo uliolinganishwa dhidi ya 0.32 kwenye kiwango kisichobadilika. Hitilafu hufuata umbali kati ya kiwango kimoja ulichochagua na wastani wa kiwango kilichokuwepo, na umbali huo una nafasi zaidi ya kuongezeka kadiri kipindi kinavyorefuka. Kila kitu kinachofuata hurithi hitilafu hiyo, na volatility targeting na position sizing huendeshwa kwa kutumia data za aina hii.
Mtego wa sarafu
Mkakati unaopata mapato katika sarafu moja na kupimwa dhidi ya bill ya sarafu nyingine hutoa namba ambayo haina maana kubwa katika mojawapo. Kokotoa mapato ya ziada ndani ya sarafu moja: mapato ya euro dhidi ya bill ya euro, mapato ya yen dhidi ya bill ya yen. Mikakati iliyolindwa (hedged) ina mtego wa pili. Ulinzi wa sarafu hupangwa kulingana na forward, na forward points hukaa karibu na tofauti ya viwango vya riba kati ya sarafu mbili, ambayo tayari huweka sehemu ya kiwango cha ndani ndani ya mapato ya kigeni yaliyolindwa. Kutoa bill ya kigeni juu ya hayo kunatoza kiwango hicho mara mbili. Taja sarafu kando ya kiwango na utata huo utaondoka.
Chapisha kiwango kando ya uwiano
Sharpe ratio iliyotajwa bila chanzo chake cha kiwango kisicho na hatari na mzunguko wake haiwezi kukaguliwa na mtu yeyote. Ofisi mbili zinaweza kukokotoa 0.8 na 1.1 kutoka kwa mtiririko sawa wa mapato na zote zikawa sahihi, zikifanya kazi kutoka mfululizo tofauti wa viwango na mbinu tofauti za ubadilishaji. Vitu vinne husafiri na namba hiyo: chombo ambacho kiwango kilitoka, mzunguko wake, mbinu ya ubadilishaji, na kipindi kamili. Hiyo ndiyo tofauti kati ya namba ambayo msomaji anaweza kuikagua na namba ambayo msomaji anapaswa kuiamini bila shaka.
Data notes and reproducibility
Mfululizo wa viwango katika kila jopo ni Treasury bill ya miezi mitatu kutoka kwa daily Treasury yield curve, iliyopatiwa wastani ndani ya kila mwezi wa kalenda, iliyobadilishwa kuwa kiwango cha mwezi kama mzizi wa kumi na mbili wa moja jumlisha nukuu ya mwaka. Mapato ni bei za mwisho za SPY za mwezi, price return pekee, bila dividends. Uwiano huu unatumia sample standard deviation ya mapato ya ziada ya kila mwezi na mzizi wa mraba wa kumi na mbili kwa ajili ya hesabu ya mwaka. Majopo mawili ya mwisho yanatumia vipindi vinavyoishia tarehe moja, na safu ya kiwango kisichobadilika inachukua wastani wa nukuu ya bill katika mwezi wa mwisho wa kipindi hicho. Kila namba katika maandishi hapo juu inatoka kwenye jopo lililo kando yake.
FAQ
Ni kiwango gani kisicho na hatari ninachopaswa kutumia katika Sharpe ratio?
Bill fupi ya serikali katika sarafu sawa na mapato, iliyobadilishwa kuwa mzunguko sawa na mapato. Kwa mapato ya USD ya kila mwezi, hiyo inamaanisha Treasury bill ya mwezi mmoja au mitatu. Ukomavu mrefu zaidi hubeba hatari ya bei katika kipindi cha upimaji, jambo ambalo huondoa sifa zao kama sehemu isiyo na hatari.
Je, ninaweza kutoa yield ya Treasury bill ya leo kutoka kwa historia ndefu ya mapato?
Hili ndilo kosa la kawaida zaidi katika Sharpe ratios zilizochapishwa. Katika kipindi cha 20-year hapo juu, kiwango kisichobadilika cha mwisho wa kipindi na mfululizo uliolinganishwa wa kila mwezi hutoa usomaji wa 0.18 mbali kwenye mapato yaleyale.
Je, ninafanya hesabu ya mwaka kwa kiwango kisicho na hatari kabla ya kukitoa?
Hapana. Badilisha nukuu ya mwaka ya bill kuwa mzunguko wa mapato, toa kwa kila kipindi, kisha fanya hesabu ya mwaka kwa mfululizo wa ziada mara moja mwishoni. Kufanya hesabu ya mwaka kwa kila sehemu kando na kutoa baadaye huacha cross term katika jibu.
Kiwango kisicho na hatari hubadilisha Sharpe ratio kwa kiasi gani?
Takribani mabadiliko katika kiwango yaliyogawanywa na volatility ya mwaka. Katika mkakati wa dhahania unaoendesha 15% ya volatility ya mwaka, tofauti ya 4% katika kiwango kinachodhaniwa hubadilisha uwiano kwa takribani 0.27, ambayo ni umbali kati ya rekodi ya kawaida na ile inayosifiwa.
Kuna tofauti gani kati ya hesabu ya mwaka ya kiarithmetiki na kijiometri?
Kiarithmetiki huzidisha wastani wa ziada ya kipindi kwa idadi ya vipindi katika mwaka. Kijiometri hujumuisha vipindi kuwa kiwango kisichobadilika kinachozalisha matokeo ya jumla. Kwa kila kipindi, namba ya kijiometri iko sawa au chini ya ile ya kiarithmetiki, na umbali kati yao huongezeka kulingana na volatility.
Kila jopo hapa lina SQL iliyolizalisha, kwa hivyo mfululizo wa viwango na kipindi vyote vinaonekana. Ili kuendesha ujenzi uleule kwenye ticker nyingine au kipindi kingine cha historia, omba kwa lugha rahisi kwenye terminal ya Strasmore.