Risk-free rate in the Sharpe ratio
Annualized risk premium: subtract monthly, or annualize each leg firstranking ·
2026-08-14 · 5×4
Three-month Treasury bill yield by calendar yearranking ·
2026-08-14 · 22×4
Monthly return, monthly risk-free rate and the excess, 2020 to 2024series ·
2026-08-14 · 60×4
Sharpe ratio on a matched rate series against one fixed rateranking ·
2026-08-14 · 5×4
Bootstrapping Backtest Confidence Bands
Variance ratio by block length: does SPY variance scale like independent draws?ranking ·
2026-08-14 · 7×3
One position, one year at a time: SPY annualized Sharpe by calendar yeartable ·
2026-08-14 · 14×5
Measured Sharpe dispersion across non-overlapping SPY windows, 2006 to 2025table ·
2026-08-14 · 5×6
Lag-one autocorrelation: signed returns against absolute returns, 2016 to 2025ranking ·
2026-08-14 · 6×4
What Is the Sharpe Ratio? Formula and Math
Sharpe against Sortino, six names, calendar 2025ranking ·
2026-08-06 · 6×4
SPY annualized Sharpe ratio, year by year, fixed 4.25% assumed rateranking ·
2026-08-06 · 10×3
Annualized Sharpe ratio by name, calendar 2025, assumed 4.25% risk-free rateranking ·
2026-08-06 · 6×4
One year of SPY, three sampling frequencies, one annualized Sharpe ratioranking ·
2026-08-06 · 3×3
Same SPY 2025 returns, six assumed risk-free ratesranking ·
2026-08-06 · 6×4
Annualized risk premium: subtract monthly, or annualize each leg first
Annualized risk premium: subtract monthly, or annualize each leg first
| horizon | excess_first_pct | annualize_first_pct | gap_pct |
|---|---|---|---|
| 1-year | 17.31 | 18.13 | 0.814 |
| 3-year | 3.01 | 3.09 | 0.088 |
| 5-year | 9.94 | 10.17 | 0.233 |
| 10-year | 9.08 | 9.23 | 0.151 |
| 20-year | 6.49 | 6.59 | 0.099 |
the exact SQL behind every number
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
More from this analysisRisk-free rate in the Sharpe ratio
Three-month Treasury bill yield by calendar year
ranking 22×4
→
Sharpe ratio on a matched rate series against one fixed rate
ranking 5×4
→
Monthly return, monthly risk-free rate and the excess, 2020 to 2024
series 60×4
→
Dividend yield by ticker vs the 3-month Treasury bill (flat line)
ranking 15×3
→
See all 2,173 queries →