{"slug":"what-is-maximum-drawdown","qid":"dd_vs_vol","label":"Maximum drawdown against annualized volatility: eight large caps, five years to July 31, 2026","post_title":"What Is Maximum Drawdown? Depth vs Recovery","post_url":"/blog/what-is-maximum-drawdown#q-dd_vs_vol","columns":["ticker","max_drawdown_pct","annualized_volatility_pct"],"rows":[{"ticker":"VZ","max_drawdown_pct":45.4,"annualized_volatility_pct":22.6},{"ticker":"MSFT","max_drawdown_pct":37.5,"annualized_volatility_pct":28},{"ticker":"AAPL","max_drawdown_pct":33.3,"annualized_volatility_pct":28},{"ticker":"CVX","max_drawdown_pct":28.9,"annualized_volatility_pct":25.3},{"ticker":"SPY","max_drawdown_pct":25.4,"annualized_volatility_pct":17},{"ticker":"PG","max_drawdown_pct":24.6,"annualized_volatility_pct":18.1},{"ticker":"JNJ","max_drawdown_pct":23.7,"annualized_volatility_pct":17.5},{"ticker":"KO","max_drawdown_pct":20.9,"annualized_volatility_pct":16.7}],"shape":"ranking","sql":"WITH daily AS (\n    SELECT ticker,\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', 'AAPL', 'MSFT', 'KO', 'JNJ', 'CVX', 'VZ', 'PG')\n      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2021-08-01')\n      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')\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 ticker, session_date\n),\nruns AS (\n    SELECT ticker,\n           session_date,\n           close_px,\n           max(close_px) OVER (PARTITION BY ticker ORDER BY session_date\n                               ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_peak,\n           lagInFrame(close_px, 1) OVER (PARTITION BY ticker ORDER BY session_date\n                                         ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close\n    FROM daily\n)\nSELECT ticker,\n       round(100 * max(1 - close_px / running_peak), 1) AS max_drawdown_pct,\n       round(100 * sqrt(252) * stddevSampIf(close_px / prev_close - 1, prev_close > 0), 1) AS annualized_volatility_pct\nFROM runs\nGROUP BY ticker\nHAVING countIf(prev_close > 0) > 20\nORDER BY max_drawdown_pct DESC","computed_at":"2026-08-05T03:38:23.088267+00:00","elapsed":0.002468428}