{"slug":"historical-volatility-vs-implied-volatility","qid":"hv_windows","label":"Annualized historical volatility over three lookback windows","post_title":"Historical Volatility vs Implied Volatility","post_url":"/blog/historical-volatility-vs-implied-volatility#q-hv_windows","columns":["symbol","hv_20d_pct","hv_60d_pct","hv_252d_pct"],"rows":[{"symbol":"TSLA","hv_20d_pct":33.4,"hv_60d_pct":57.2,"hv_252d_pct":46.8},{"symbol":"NVDA","hv_20d_pct":38,"hv_60d_pct":40.1,"hv_252d_pct":36.6},{"symbol":"MSFT","hv_20d_pct":57,"hv_60d_pct":45.9,"hv_252d_pct":31.8},{"symbol":"AAPL","hv_20d_pct":33.4,"hv_60d_pct":33,"hv_252d_pct":25.1},{"symbol":"KO","hv_20d_pct":22,"hv_60d_pct":24.8,"hv_252d_pct":18.7},{"symbol":"SPY","hv_20d_pct":13.2,"hv_60d_pct":13.9,"hv_252d_pct":12.9}],"shape":"ranking","sql":"WITH\n    paths AS\n    (\n        SELECT\n            ticker,\n            arraySort(x -> tupleElement(x, 1), groupArray((date, toFloat64(close)))) AS path\n        FROM global_markets.stocks_daily_aggs\n        WHERE ticker IN ('AAPL', 'KO', 'MSFT', 'NVDA', 'SPY', 'TSLA')\n          AND date >= today() - 500\n          AND date <  today()\n        GROUP BY ticker\n        HAVING count() >= 300\n    ),\n    log_returns AS\n    (\n        SELECT\n            ticker,\n            arrayMap(i -> log(tupleElement(path[i + 1], 2) / tupleElement(path[i], 2)),\n                     range(1, length(path))) AS r\n        FROM paths\n    )\nSELECT\n    ticker                                                                     AS symbol,\n    round(100 * sqrt(252) * arrayReduce('stddevSamp', arraySlice(r, -20)), 1)  AS hv_20d_pct,\n    round(100 * sqrt(252) * arrayReduce('stddevSamp', arraySlice(r, -60)), 1)  AS hv_60d_pct,\n    round(100 * sqrt(252) * arrayReduce('stddevSamp', arraySlice(r, -252)), 1) AS hv_252d_pct\nFROM log_returns\nORDER BY hv_252d_pct DESC","computed_at":"2026-08-22T04:08:17.008108+00:00","elapsed":0.049988453}