{"slug":"what-is-the-sharpe-ratio","qid":"sharpe_by_year","label":"SPY annualized Sharpe ratio, year by year, fixed 4.25% assumed rate","post_title":"What Is the Sharpe Ratio? Formula and Math","post_url":"/blog/what-is-the-sharpe-ratio#q-sharpe_by_year","columns":["year","sharpe_ratio","ann_volatility_pct"],"rows":[{"year":"2016","sharpe_ratio":0.44,"ann_volatility_pct":13.08},{"year":"2017","sharpe_ratio":2.07,"ann_volatility_pct":6.64},{"year":"2018","sharpe_ratio":-0.54,"ann_volatility_pct":17.09},{"year":"2019","sharpe_ratio":1.74,"ann_volatility_pct":12.47},{"year":"2020","sharpe_ratio":0.48,"ann_volatility_pct":34.23},{"year":"2021","sharpe_ratio":1.58,"ann_volatility_pct":13.01},{"year":"2022","sharpe_ratio":-0.95,"ann_volatility_pct":24.16},{"year":"2023","sharpe_ratio":1.41,"ann_volatility_pct":13.14},{"year":"2024","sharpe_ratio":1.39,"ann_volatility_pct":12.57},{"year":"2025","sharpe_ratio":0.68,"ann_volatility_pct":18.62}],"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('2015-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\n            session_date,\n            close_px / prev_px - 1                AS raw_ret,\n            close_px / prev_px - 1 - 0.0425 / 252 AS ex_ret\n        FROM stepped\n        WHERE prev_px > 0\n          AND session_date >= toDate('2016-01-01')\n    )\nSELECT\n    toString(toYear(session_date))                         AS year,\n    round(avg(ex_ret) / stddevSamp(ex_ret) * sqrt(252), 2) AS sharpe_ratio,\n    round(stddevSamp(raw_ret) * sqrt(252) * 100, 2)        AS ann_volatility_pct\nFROM rets\nGROUP BY year\nORDER BY year","computed_at":"2026-08-06T00:19:13.288421+00:00","elapsed":0.004093597}