{"slug":"the-8-4-3-rule-mutual-funds","qid":"annual_change","label":"SPY calendar-year price change vs the 12% assumption, 2006-2025","post_title":"The 8-4-3 Rule for Mutual Funds, Explained","post_url":"/blog/the-8-4-3-rule-mutual-funds#q-annual_change","columns":["year","annual_change_pct","distance_from_12_pct"],"rows":[{"year":2006,"annual_change_pct":13.59,"distance_from_12_pct":1.59},{"year":2007,"annual_change_pct":3.48,"distance_from_12_pct":8.52},{"year":2008,"annual_change_pct":-38.35,"distance_from_12_pct":50.35},{"year":2009,"annual_change_pct":23.45,"distance_from_12_pct":11.45},{"year":2010,"annual_change_pct":12.88,"distance_from_12_pct":0.88},{"year":2011,"annual_change_pct":-0.17,"distance_from_12_pct":12.17},{"year":2012,"annual_change_pct":13.43,"distance_from_12_pct":1.43},{"year":2013,"annual_change_pct":29.54,"distance_from_12_pct":17.54},{"year":2014,"annual_change_pct":11.36,"distance_from_12_pct":0.64},{"year":2015,"annual_change_pct":-0.78,"distance_from_12_pct":12.78},{"year":2016,"annual_change_pct":9.62,"distance_from_12_pct":2.38},{"year":2017,"annual_change_pct":19.38,"distance_from_12_pct":7.38},{"year":2018,"annual_change_pct":-6.28,"distance_from_12_pct":18.28},{"year":2019,"annual_change_pct":28.69,"distance_from_12_pct":16.69},{"year":2020,"annual_change_pct":16.14,"distance_from_12_pct":4.14},{"year":2021,"annual_change_pct":27.02,"distance_from_12_pct":15.02},{"year":2022,"annual_change_pct":-19.47,"distance_from_12_pct":31.47},{"year":2023,"annual_change_pct":24.29,"distance_from_12_pct":12.29},{"year":2024,"annual_change_pct":23.27,"distance_from_12_pct":11.27},{"year":2025,"annual_change_pct":16.35,"distance_from_12_pct":4.35}],"shape":"ranking","sql":"WITH ye AS (\n    SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS year,\n           argMax(close, window_start) AS px\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND toDate(toTimeZone(window_start, 'America/New_York')) BETWEEN toDate('2004-12-01') AND toDate('2025-12-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 year\n)\nSELECT a.year AS year,\n       round((a.px / b.px - 1) * 100, 2) AS annual_change_pct,\n       round(abs((a.px / b.px - 1) * 100 - 12), 2) AS distance_from_12_pct\nFROM ye AS a\nINNER JOIN ye AS b ON a.year = b.year + 1\nWHERE a.year >= 2006\nORDER BY year","computed_at":"2026-07-31T08:37:53.494885+00:00","elapsed":0.006936328}