{"slug":"price-return-vs-total-return","qid":"spy_growth_10k","label":"$10,000 in the S&P 500 tracker: price only vs dividends reinvested, year-end 2006 to July 2026","post_title":"Price Return vs Total Return: The Real Gap","post_url":"/blog/price-return-vs-total-return#q-spy_growth_10k","columns":["year","price_only_usd","reinvested_usd","dividend_share_pct"],"rows":[{"year":2007,"price_only_usd":11755,"reinvested_usd":11971,"dividend_share_pct":1.8},{"year":2008,"price_only_usd":7247,"reinvested_usd":7556,"dividend_share_pct":4.1},{"year":2009,"price_only_usd":8947,"reinvested_usd":9545,"dividend_share_pct":6.3},{"year":2010,"price_only_usd":10100,"reinvested_usd":10986,"dividend_share_pct":8.1},{"year":2011,"price_only_usd":10083,"reinvested_usd":11197,"dividend_share_pct":10},{"year":2012,"price_only_usd":11437,"reinvested_usd":12983,"dividend_share_pct":11.9},{"year":2013,"price_only_usd":14816,"reinvested_usd":17158,"dividend_share_pct":13.7},{"year":2014,"price_only_usd":16500,"reinvested_usd":19482,"dividend_share_pct":15.3},{"year":2015,"price_only_usd":16372,"reinvested_usd":19733,"dividend_share_pct":17},{"year":2016,"price_only_usd":17947,"reinvested_usd":22096,"dividend_share_pct":18.8},{"year":2017,"price_only_usd":21426,"reinvested_usd":26891,"dividend_share_pct":20.3},{"year":2018,"price_only_usd":20080,"reinvested_usd":25684,"dividend_share_pct":21.8},{"year":2019,"price_only_usd":25842,"reinvested_usd":33679,"dividend_share_pct":23.3},{"year":2020,"price_only_usd":30014,"reinvested_usd":39860,"dividend_share_pct":24.7},{"year":2021,"price_only_usd":38125,"reinvested_usd":51313,"dividend_share_pct":25.7},{"year":2022,"price_only_usd":30703,"reinvested_usd":41997,"dividend_share_pct":26.9},{"year":2023,"price_only_usd":38162,"reinvested_usd":52999,"dividend_share_pct":28},{"year":2024,"price_only_usd":47046,"reinvested_usd":66175,"dividend_share_pct":28.9},{"year":2025,"price_only_usd":54740,"reinvested_usd":77898,"dividend_share_pct":29.7},{"year":2026,"price_only_usd":59956,"reinvested_usd":85775,"dividend_share_pct":30.1}],"shape":"ranking","sql":"WITH daily AS (\n    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,\n           argMax(toFloat64(close), window_start) AS close\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2005-12-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 d\n),\nbase AS (\n    SELECT argMax(close, d) AS start_px\n    FROM daily\n    WHERE d <= toDate('2005-12-31')\n),\nyear_end AS (\n    SELECT toYear(d) AS year,\n           argMax(close, d) AS close,\n           max(d) AS last_day\n    FROM daily\n    WHERE d >= toDate('2006-01-01')\n    GROUP BY year\n),\nreinvest AS (\n    SELECT dv.ex_dividend_date AS d,\n           log(1 + toFloat64(dv.cash_amount) / dl.close) AS log_growth\n    FROM global_markets.stocks_dividends AS dv\n    INNER JOIN daily AS dl ON dl.d = dv.ex_dividend_date\n    WHERE dv.ticker = 'SPY'\n      AND dv.cash_amount > 0\n      AND dv.ex_dividend_date >= toDate('2006-01-01')\n      AND dv.ex_dividend_date <= toDate('2026-07-31')\n)\nSELECT ye.year AS year,\n       round(10000 * ye.close / any(b.start_px)) AS price_only_usd,\n       round(10000 * ye.close / any(b.start_px) * exp(sum(ri.log_growth))) AS reinvested_usd,\n       round(100 * (1 - exp(-sum(ri.log_growth))), 1) AS dividend_share_pct\nFROM year_end AS ye, reinvest AS ri, base AS b\nWHERE ri.d <= ye.last_day\nGROUP BY ye.year, ye.close\nORDER BY year","computed_at":"2026-08-03T11:30:56.622820+00:00","elapsed":0.005084636}