{"slug":"how-markets-recover-from-crashes","qid":"by_year","label":"S&P 500 worst intra-year drawdown vs the year's price return, since 2016","post_title":"How Markets Recover From Crashes","post_url":"/blog/how-markets-recover-from-crashes#q-by_year","columns":["year","worst_drawdown_pct","year_return_pct"],"rows":[{"year":"2016","worst_drawdown_pct":-9.1,"year_return_pct":11.2},{"year":"2017","worst_drawdown_pct":-3,"year_return_pct":18.5},{"year":"2018","worst_drawdown_pct":-20.2,"year_return_pct":-6.9},{"year":"2019","worst_drawdown_pct":-16.8,"year_return_pct":28.6},{"year":"2020","worst_drawdown_pct":-34.2,"year_return_pct":15.1},{"year":"2021","worst_drawdown_pct":-5.4,"year_return_pct":28.7},{"year":"2022","worst_drawdown_pct":-25.4,"year_return_pct":-20},{"year":"2023","worst_drawdown_pct":-20.6,"year_return_pct":24.8},{"year":"2024","worst_drawdown_pct":-8.4,"year_return_pct":24},{"year":"2025","worst_drawdown_pct":-19,"year_return_pct":16.6},{"year":"2026","worst_drawdown_pct":-9.1,"year_return_pct":10.5}],"shape":"ranking","sql":"WITH d AS (\n    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS dt,\n           argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY' AND window_start >= '2016-01-01'\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959\n    GROUP BY dt\n),\ndd AS (\n    SELECT dt, toYear(dt) AS yr, c,\n           (c / max(c) OVER (ORDER BY dt ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) - 1) * 100 AS ddpct\n    FROM d\n)\nSELECT toString(yr) AS year,\n       round(min(ddpct), 1) AS worst_drawdown_pct,\n       round((argMax(c, dt) / argMin(c, dt) - 1) * 100, 1) AS year_return_pct\nFROM dd GROUP BY yr ORDER BY yr","computed_at":"2026-07-16T11:19:00.104076+00:00","elapsed":0.002737211}