{"slug":"what-is-the-sharpe-ratio","qid":"sortino_vs_sharpe","label":"Sharpe against Sortino, six names, calendar 2025","post_title":"What Is the Sharpe Ratio? Formula and Math","post_url":"/blog/what-is-the-sharpe-ratio#q-sortino_vs_sharpe","columns":["symbol","sharpe_ratio","sortino_ratio","down_day_pct"],"rows":[{"symbol":"NVDA","sharpe_ratio":0.83,"sortino_ratio":1.18,"down_day_pct":46.4},{"symbol":"QQQ","sharpe_ratio":0.73,"sortino_ratio":1.08,"down_day_pct":42.8},{"symbol":"SPY","sharpe_ratio":0.68,"sortino_ratio":1.01,"down_day_pct":44.4},{"symbol":"MSFT","sharpe_ratio":0.52,"sortino_ratio":0.82,"down_day_pct":46.4},{"symbol":"KO","sharpe_ratio":0.51,"sortino_ratio":0.78,"down_day_pct":50.8},{"symbol":"AAPL","sharpe_ratio":0.28,"sortino_ratio":0.43,"down_day_pct":48.4}],"shape":"ranking","sql":"WITH\n    daily AS\n    (\n        SELECT\n            ticker                                               AS symbol,\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 IN ('SPY', 'QQQ', 'AAPL', 'MSFT', 'NVDA', 'KO')\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 symbol, session_date\n    ),\n    stepped AS\n    (\n        SELECT\n            symbol,\n            session_date,\n            close_px,\n            lagInFrame(close_px, 1) OVER (PARTITION BY symbol ORDER BY session_date\n                                          ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px\n        FROM daily\n    ),\n    excess AS\n    (\n        SELECT\n            symbol,\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('2025-01-01')\n    )\nSELECT\n    symbol,\n    round(avg(ex_ret) / stddevSamp(ex_ret) * sqrt(252), 2)                     AS sharpe_ratio,\n    round(avg(ex_ret) / sqrt(avg(pow(least(ex_ret, 0.0), 2))) * sqrt(252), 2)  AS sortino_ratio,\n    round(countIf(ex_ret < 0) * 100.0 / count(), 1)                            AS down_day_pct\nFROM excess\nGROUP BY symbol\nHAVING count() > 200 AND countIf(ex_ret < 0) > 0\nORDER BY sortino_ratio DESC","computed_at":"2026-08-06T00:19:13.196630+00:00","elapsed":0.004585228}