{"slug":"what-is-the-sharpe-ratio","qid":"rf_sensitivity","label":"Same SPY 2025 returns, six assumed risk-free rates","post_title":"What Is the Sharpe Ratio? Formula and Math","post_url":"/blog/what-is-the-sharpe-ratio#q-rf_sensitivity","columns":["assumed_risk_free","ann_excess_return_pct","ann_volatility_pct","sharpe_ratio"],"rows":[{"assumed_risk_free":"0.00%","ann_excess_return_pct":16.99,"ann_volatility_pct":18.62,"sharpe_ratio":0.91},{"assumed_risk_free":"1.00%","ann_excess_return_pct":15.99,"ann_volatility_pct":18.62,"sharpe_ratio":0.86},{"assumed_risk_free":"2.00%","ann_excess_return_pct":14.99,"ann_volatility_pct":18.62,"sharpe_ratio":0.8},{"assumed_risk_free":"3.00%","ann_excess_return_pct":13.99,"ann_volatility_pct":18.62,"sharpe_ratio":0.75},{"assumed_risk_free":"4.00%","ann_excess_return_pct":12.99,"ann_volatility_pct":18.62,"sharpe_ratio":0.7},{"assumed_risk_free":"5.00%","ann_excess_return_pct":11.99,"ann_volatility_pct":18.62,"sharpe_ratio":0.64}],"shape":"ranking","sql":"WITH\n    daily AS\n    (\n        SELECT\n            toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,\n            argMax(toFloat64(close), window_start)               AS close_px\n        FROM global_markets.delayed_stocks_minute_aggs\n        WHERE ticker = 'SPY'\n          AND window_start >= toDateTime('2024-12-24 00:00:00')\n          AND window_start <  toDateTime('2026-01-01 05:00:00')\n          AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n             + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570\n          AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n             + toMinute(toTimeZone(window_start, 'America/New_York'))) < 960\n        GROUP BY session_date\n    ),\n    stepped AS\n    (\n        SELECT\n            session_date,\n            close_px,\n            lagInFrame(close_px, 1) OVER (ORDER BY session_date\n                                          ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px\n        FROM daily\n    ),\n    rets AS\n    (\n        SELECT close_px / prev_px - 1 AS raw_ret\n        FROM stepped\n        WHERE prev_px > 0\n          AND session_date >= toDate('2025-01-01')\n    ),\n    rates AS\n    (\n        SELECT\n            arrayJoin([(0.00, '0.00%'), (0.01, '1.00%'), (0.02, '2.00%'),\n                       (0.03, '3.00%'), (0.04, '4.00%'), (0.05, '5.00%')]) AS pair,\n            pair.1                                                         AS rf_annual,\n            pair.2                                                         AS assumed_risk_free\n    )\nSELECT\n    assumed_risk_free,\n    round(avg(raw_ret - rf_annual / 252) * 252 * 100, 2)              AS ann_excess_return_pct,\n    round(stddevSamp(raw_ret - rf_annual / 252) * sqrt(252) * 100, 2) AS ann_volatility_pct,\n    round(avg(raw_ret - rf_annual / 252)\n          / stddevSamp(raw_ret - rf_annual / 252) * sqrt(252), 2)     AS sharpe_ratio\nFROM rets\nCROSS JOIN rates\nGROUP BY rf_annual, assumed_risk_free\nORDER BY rf_annual","computed_at":"2026-08-06T00:19:13.101272+00:00","elapsed":0.387898722}