{"slug":"the-low-volatility-anomaly","qid":"by_name","label":"Annualized volatility vs total return, 25 large caps, calmest to wildest (~2 years)","post_title":"The Low-Volatility Anomaly","post_url":"/blog/the-low-volatility-anomaly#q-by_name","columns":["ticker","annual_vol_pct","total_return_pct"],"rows":[{"ticker":"SPY","annual_vol_pct":16.1,"total_return_pct":41.4},{"ticker":"KO","annual_vol_pct":17.7,"total_return_pct":44.6},{"ticker":"MCD","annual_vol_pct":18.8,"total_return_pct":6.8},{"ticker":"JNJ","annual_vol_pct":18.9,"total_return_pct":86.1},{"ticker":"PG","annual_vol_pct":19.1,"total_return_pct":-13},{"ticker":"COST","annual_vol_pct":20.8,"total_return_pct":12.1},{"ticker":"PEP","annual_vol_pct":21.1,"total_return_pct":-12.1},{"ticker":"MO","annual_vol_pct":22.8,"total_return_pct":44.6},{"ticker":"VZ","annual_vol_pct":23.5,"total_return_pct":24.1},{"ticker":"HD","annual_vol_pct":24,"total_return_pct":-3.4},{"ticker":"XOM","annual_vol_pct":24.5,"total_return_pct":50.2},{"ticker":"WMT","annual_vol_pct":24.6,"total_return_pct":55.4},{"ticker":"JPM","annual_vol_pct":24.9,"total_return_pct":81.7},{"ticker":"HON","annual_vol_pct":25.3,"total_return_pct":3.6},{"ticker":"LMT","annual_vol_pct":26.7,"total_return_pct":23.1},{"ticker":"MRK","annual_vol_pct":29.1,"total_return_pct":18.5},{"ticker":"NFLX","annual_vol_pct":33.5,"total_return_pct":22.9},{"ticker":"CAT","annual_vol_pct":34.6,"total_return_pct":153.5},{"ticker":"LLY","annual_vol_pct":38.2,"total_return_pct":42.3},{"ticker":"TXN","annual_vol_pct":40.7,"total_return_pct":34.6},{"ticker":"UNH","annual_vol_pct":41.3,"total_return_pct":-21.5},{"ticker":"NVDA","annual_vol_pct":47.2,"total_return_pct":66.5},{"ticker":"ORCL","annual_vol_pct":55.2,"total_return_pct":5},{"ticker":"TSLA","annual_vol_pct":61.1,"total_return_pct":99.4},{"ticker":"AMD","annual_vol_pct":62.2,"total_return_pct":195.6}],"shape":"ranking","sql":"WITH d AS (\n    SELECT ticker,\n           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 IN ('SPY','KO','JNJ','PG','PEP','WMT','MCD','MO','VZ','XOM','JPM','HD','COST','UNH','MRK','LLY','HON','LMT','CAT','TXN','ORCL','NVDA','TSLA','AMD','NFLX')\n      AND window_start >= now() - INTERVAL 800 DAY\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, dt\n),\nr AS (\n    SELECT ticker, dt, c,\n           c / lagInFrame(c) OVER (PARTITION BY ticker ORDER BY dt) - 1 AS ret\n    FROM d\n)\nSELECT ticker,\n       round(stddevSamp(ret) * sqrt(252) * 100, 1) AS annual_vol_pct,\n       round((exp(sum(log(1 + ret))) - 1) * 100, 1) AS total_return_pct\nFROM r\nWHERE ret IS NOT NULL AND ret > -0.5 AND ret < 0.5\nGROUP BY ticker\nORDER BY annual_vol_pct","computed_at":"2026-08-22T04:22:47.516220+00:00","elapsed":14.953691909}