{"slug":"open-source-tradingview-optimizer","qid":"yearly_sharpe","label":"yearly_sharpe","post_title":"open-source-tradingview-optimizer","post_url":"/blog/open-source-tradingview-optimizer#q-yearly_sharpe","columns":["year","spy_sharpe"],"rows":[{"year":"2016","spy_sharpe":0.77},{"year":"2017","spy_sharpe":2.67},{"year":"2018","spy_sharpe":-0.3},{"year":"2019","spy_sharpe":2.08},{"year":"2020","spy_sharpe":0.62},{"year":"2021","spy_sharpe":1.9},{"year":"2022","spy_sharpe":-0.78},{"year":"2023","spy_sharpe":1.73},{"year":"2024","spy_sharpe":1.73}],"shape":"ranking","sql":"WITH daily AS\n(\n    SELECT\n        d,\n        px / prev_px - 1 AS ret\n    FROM\n    (\n        SELECT\n            date                AS d,\n            toFloat64(close)    AS px,\n            lagInFrame(toFloat64(close)) OVER (ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px\n        FROM global_markets.stocks_daily_aggs\n        WHERE ticker = 'SPY'\n          AND date >= '2015-12-31'\n          AND date <= '2024-12-31'\n    )\n    WHERE prev_px > 0\n)\nSELECT\n    toString(toYear(d))                                        AS year,\n    round(avg(ret) / stddevPop(ret) * sqrt(252), 2)            AS spy_sharpe\nFROM daily\nGROUP BY year\nORDER BY year","computed_at":"2026-09-22T14:53:22.557612+00:00","elapsed":0.002816087}