{"slug":"the-rule-of-72","qid":"realized_drag","label":"Average return against compound return, five price histories, 2015 through 2024","post_title":"The Rule of 72 (and Where It Breaks)","post_url":"/blog/the-rule-of-72#q-realized_drag","columns":["ticker","annual_vol_pct","average_return_pct","compound_return_pct"],"rows":[{"ticker":"SPY","annual_vol_pct":17.7,"average_return_pct":12.08,"compound_return_pct":11.08},{"ticker":"QQQ","annual_vol_pct":21.8,"average_return_pct":18.45,"compound_return_pct":17.42},{"ticker":"MSFT","annual_vol_pct":27.2,"average_return_pct":25.73,"compound_return_pct":24.65},{"ticker":"ARKK","annual_vol_pct":38,"average_return_pct":17.65,"compound_return_pct":10.96},{"ticker":"AMD","annual_vol_pct":58.7,"average_return_pct":54.96,"compound_return_pct":46.41}],"shape":"ranking","sql":"WITH daily AS\n(\n    SELECT\n        ticker,\n        date,\n        toFloat64(max(close)) AS close_px\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker IN ('SPY', 'QQQ', 'MSFT', 'ARKK', 'AMD')\n      AND date >= '2015-01-02'\n      AND date <= '2024-12-31'\n      AND close > 0\n    GROUP BY ticker, date\n),\nrets AS\n(\n    SELECT\n        ticker,\n        close_px / nullIf(lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY date ASC), 0) - 1 AS r\n    FROM daily\n)\nSELECT\n    ticker,\n    round(stddevSamp(r) * sqrt(252) * 100, 1)        AS annual_vol_pct,\n    round(avg(r) * 252 * 100, 2)                     AS average_return_pct,\n    round((exp(avg(log(1 + r)) * 252) - 1) * 100, 2) AS compound_return_pct\nFROM rets\nWHERE r IS NOT NULL\n  AND isFinite(r)\nGROUP BY ticker\nORDER BY annual_vol_pct ASC","computed_at":"2026-10-09T15:39:34.064082+00:00","elapsed":0.003908493}