Did Stocks Take 25 Years to Recover From 1929?
Did stocks take 25 years to recover from 1929? Yes in nominal price terms, no with dividends reinvested. Three breakeven dates, and why the gap matters.
Stocks did take 25 years to recover from 1929, by one specific measure. The Dow Jones Industrial Average's nominal closing price peaked at 381.17 on September 3, 1929, and published index histories put its first close back above that level on November 23, 1954, just over 25 years later. That measure excludes dividends, ignores the deflation of the early 1930s, and describes a 30-stock price-weighted average rather than the market as a whole. Rebuild the same question with dividends reinvested, and in real terms, and the breakeven lands in the mid-1930s instead.
Where the 25 year figure comes from
One series, three omissions. The series is the Dow's daily close as compiled by the index publisher: 381.17 on September 3, 1929, down to 41.22 on July 8, 1932, back above the old high on November 23, 1954. Those are published historical index levels, external to the data on this page, and they are the only figures here not recomputed from a query. Our own market data begins in 2003, so the 1929 to 1954 arithmetic has to come from the long-run index reconstructions that cover it. That is why the section below names which reconstruction each date belongs to.
The three omissions are the whole post. A price index measures what shares were quoted at. It does not measure what a holder who kept reinvesting cash dividends ended up with, and it does not measure purchasing power.
The three breakeven dates, side by side
- Price only, nominal, Dow 30: November 23, 1954. Just over 25 years from the 1929 high.
- Total return, nominal, broad US market: the first crossing of the 1929 peak falls in 1937 in the standard reconstructions of the S&P Composite with Cowles Commission dividend estimates, roughly seven to eight years. The 1937 to 1938 decline carried the series back under the old high, and the durable crossing sits in the mid-1940s.
- Real total return, dividends reinvested and deflated by consumer prices: the mid-1930s, with published estimates clustering on 1936, about four and a half years after the July 1932 low.
Eighteen years separate the first date from the third. Same crash, same holder, three measurement conventions. The headline number is the slowest of the three, and it is the one that entered common usage.
Why dividends move the date this far
Two mechanics compound. Dividend yields in the 1930s ran far above modern levels, in the 5% to 7% range in published reconstructions of the period, and a holder reinvesting that cash was buying at prices well below the 1929 peak. Every reinvestment at a depressed price adds more shares per dollar, which is how a total-return series climbs back while a price series stays flat. As a hypothetical: reinvest a 6% yield for seven years and the share count ends about 50% higher, before any price move at all.
Modern yields are a fraction of that. The panel below measures SPY's cash distributions in each calendar year against its share price at the start of that year, for every year with a full set of four quarterly distributions on record. SPY is the oldest US index-tracking fund and the cleanest long dividend record we can query directly.
| year | dividend_yield_pct |
|---|---|
| 2007 | 1.91 |
| 2008 | 1.88 |
| 2009 | 2.34 |
| 2010 | 2 |
| 2011 | 2.03 |
| 2012 | 2.43 |
| 2013 | 2.29 |
| 2014 | 2.1 |
| 2015 | 2.05 |
| 2016 | 2.26 |
| 2017 | 2.13 |
| 2018 | 1.9 |
| 2019 | 2.25 |
| 2020 | 1.75 |
| 2021 | 1.55 |
| 2022 | 1.32 |
| 2023 | 1.74 |
| 2024 | 1.49 |
| 2025 | 1.25 |
The exact SQL behind every number
WITH yearly AS
(
SELECT
toYear(date) AS year,
argMin(toFloat64(close), date) AS first_close
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2005-01-01'
AND date < '2026-01-01'
GROUP BY year
),
cash AS
(
SELECT
toYear(ex_date) AS year,
sum(cash) AS cash_paid,
count() AS payments
FROM
(
SELECT
ex_dividend_date AS ex_date,
max(toFloat64(cash_amount)) AS cash
FROM global_markets.stocks_dividends
WHERE ticker = 'SPY'
AND ex_dividend_date >= '2005-01-01'
AND ex_dividend_date < '2026-01-01'
AND cash_amount > 0
GROUP BY ex_dividend_date
)
GROUP BY year
HAVING payments >= 4
)
SELECT
y.year AS year,
round(100 * c.cash_paid / y.first_close, 2) AS dividend_yield_pct
FROM yearly AS y
INNER JOIN cash AS c ON c.year = y.year
ORDER BY yearSPY paid cash equal to 1.91% of its opening share price in 2007, and 1.25% in 2025. A wedge of one to two points a year takes decades to change a recovery date. A wedge of five to six points, paid while prices sat near their lows, closes a hole in years. Most of the distance between 1936 and 1954 sits in that starting yield.
The same rebuild on data we can query: 2007 to 2013
The 1930s are out of query range here. The 2007 to 2009 crash is not, and the same split appears in it. The panel starts from SPY's October 2007 month-end close and tracks two lines: the price alone, and the price with every cash dividend reinvested at the close on its ex-dividend date, the date from which a buyer no longer receives the upcoming payment.
| month_start | month_label | price_pct | total_return_pct |
|---|---|---|---|
| 2007-10-01 | Oct 2007 | 0 | 0 |
| 2007-11-01 | Nov 2007 | -3.9 | -3.9 |
| 2007-12-01 | Dec 2007 | -5.5 | -5 |
| 2008-01-01 | Jan 2008 | -11.2 | -10.7 |
| 2008-02-01 | Feb 2008 | -13.5 | -13 |
| 2008-03-01 | Mar 2008 | -14.7 | -13.8 |
| 2008-04-01 | Apr 2008 | -10.6 | -9.7 |
| 2008-05-01 | May 2008 | -9.2 | -8.3 |
| 2008-06-01 | Jun 2008 | -17.2 | -16 |
| 2008-07-01 | Jul 2008 | -18 | -16.7 |
| 2008-08-01 | Aug 2008 | -16.7 | -15.5 |
| 2008-09-01 | Sep 2008 | -25 | -23.4 |
| 2008-10-01 | Oct 2008 | -37.4 | -36.1 |
| 2008-11-01 | Nov 2008 | -41.7 | -40.5 |
| 2008-12-01 | Dec 2008 | -41.6 | -39.9 |
| 2009-01-01 | Jan 2009 | -46.4 | -44.9 |
| 2009-02-01 | Feb 2009 | -52.2 | -50.8 |
| 2009-03-01 | Mar 2009 | -48.6 | -46.7 |
| 2009-04-01 | Apr 2009 | -43.5 | -41.4 |
| 2009-05-01 | May 2009 | -40.2 | -38 |
The exact SQL behind every number
WITH monthly AS
(
SELECT
toStartOfMonth(date) AS month,
argMax(toFloat64(close), date) AS month_close
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2007-10-01'
AND date < '2014-01-01'
GROUP BY month
),
div_cash AS
(
SELECT
ex_dividend_date AS ex_date,
max(toFloat64(cash_amount)) AS cash
FROM global_markets.stocks_dividends
WHERE ticker = 'SPY'
AND ex_dividend_date >= '2007-11-01'
AND ex_dividend_date < '2014-01-01'
AND cash_amount > 0
GROUP BY ex_dividend_date
),
div_log AS
(
SELECT
toStartOfMonth(c.ex_date) AS month,
sum(log(1 + c.cash / p.close_on_ex)) AS log_factor
FROM div_cash AS c
INNER JOIN
(
SELECT
date AS date,
toFloat64(close) AS close_on_ex
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2007-11-01'
AND date < '2014-01-01'
) AS p ON p.date = c.ex_date
GROUP BY month
),
path AS
(
SELECT
m.month AS month,
m.month_close AS month_close,
ifNull(d.log_factor, 0) AS log_factor
FROM monthly AS m
LEFT JOIN div_log AS d ON d.month = m.month
)
SELECT
toString(month) AS month_start,
formatDateTime(month, '%b %Y') AS month_label,
round(100 * (month_close
/ first_value(month_close) OVER (ORDER BY month) - 1), 1) AS price_pct,
round(100 * (month_close * exp(sum(log_factor) OVER (ORDER BY month))
/ first_value(month_close) OVER (ORDER BY month) - 1), 1) AS total_return_pct
FROM path
ORDER BY monthBoth lines start at 0 by construction, and the panel carries 75 monthly readings. By Dec 2013 the price-only line stood 19.4% above the October 2007 month close, and the reinvested line stood 36.5%. The vertical distance between the two is the dividends.
The crossings teach more than the endpoints. The reinvested line gets back above zero roughly a year before the price-only line does, during a stretch when every headline still described a market below its 2007 high. Both statements were accurate at once. They measured different things.
Why the Dow is the wrong instrument for a recovery question
Price weighting means something precise: the index sums the share prices of its members and divides by a divisor, so a member's weight is its share price over the sum of all member prices. Company size never enters the calculation. A 4-for-1 split turns one share into four at a quarter the price and cuts that member's weight by three quarters, with nothing changed about the business. The divisor is adjusted at each such event to keep the index level continuous, which preserves the series and not the weights.
Cap weighting, the convention behind the S&P 500 and most index funds, weights by market value instead. The panel runs both calculations over eight widely held large-company names so the disagreement is visible.
| ticker | price_weight_pct | cap_weight_pct | weight_gap_pct |
|---|---|---|---|
| CAT | 34.5 | 3.4 | 31.1 |
| MCD | 9.7 | 1.5 | 8.2 |
| JNJ | 10.8 | 5.6 | 5.2 |
| KO | 3.6 | 3.3 | 0.3 |
| VZ | 1.9 | 1.7 | 0.2 |
| WMT | 4.4 | 7.4 | -3 |
| MSFT | 21.4 | 34 | -12.6 |
| AAPL | 13.8 | 43.1 | -29.3 |
The exact SQL behind every number
WITH latest AS
(
SELECT
ticker,
argMax(toFloat64(price), date) AS share_price,
argMax(toFloat64(market_cap), date) AS cap_value
FROM global_markets.stocks_ratios
WHERE ticker IN ('AAPL', 'MSFT', 'KO', 'JNJ', 'CAT', 'MCD', 'WMT', 'VZ')
AND date >= today() - 90
AND price > 0
AND market_cap > 0
GROUP BY ticker
)
SELECT
ticker,
round(100 * share_price / sum(share_price) OVER (), 1) AS price_weight_pct,
round(100 * cap_value / sum(cap_value) OVER (), 1) AS cap_weight_pct,
round(100 * share_price / sum(share_price) OVER ()
- 100 * cap_value / sum(cap_value) OVER (), 1) AS weight_gap_pct
FROM latest
ORDER BY weight_gap_pct DESCCAT takes 34.5% of the price-weighted basket and 3.4% of the cap-weighted one. AAPL runs the other way, at 13.8% by price against 43.1% by market value. Neither convention is wrong. They answer different questions, and only one of them approximates what a diversified holder actually owned.
On the 1929 question, the index choice is a secondary effect. The S&P Composite's price index also needed until 1954 to regain its 1929 level, so swapping instruments barely moves the headline date. Dividends and deflation move it by nearly two decades. The weighting changes what the 25-year figure describes, not how large it is.
What this corrects about 2008 and 2020
1929 is the extreme version of a correction that applies to every drawdown chart. A decline quoted in price terms overstates what a reinvesting holder endured, and a recovery quoted in price terms arrives later than that holder's own breakeven. Maximum drawdown measured on price is the standard convention, and it is the right number for a question about quoted levels. It is a poor number for a question about whether a holder got their money back.
The same gap sits inside the 2008 and 2020 episodes tracked in how markets recover from crashes, and the mechanics of the split are laid out in price return versus total return. Two corollaries follow. Dating a recovery from the March 2009 bottom answers a different question than dating it from the 2007 peak. And the clustering of returns into a handful of sessions, covered in missing the best days, makes any breakeven date sensitive to a small number of dates.
What a future check needs to re-verify
- Which price series. Dow 30, S&P Composite, or a cap-weighted total-market reconstruction. Each carries its own 1929 peak and its own crossing date.
- Which dividend series. Pre-1957 S&P dividends come from Cowles Commission estimates, which are reconstructions rather than a paid-cash record.
- Which inflation series. The 1930s consumer price data has been revised, and the real breakeven date moves with the vintage used.
- First crossing or durable crossing. The 1937 to 1938 decline makes those two different answers.
- Dividend coverage. The yield panel keeps only calendar years carrying a full set of four quarterly distributions, so its first year moves with the depth of the distribution record.
- Frictions. Reinvestment above is assumed immediate, free, and untaxed. Taxes and costs push every date later.
FAQ
Did it really take 25 years for the stock market to recover from 1929?
For the Dow's nominal price level, yes: September 3, 1929 to November 23, 1954. For a holder who reinvested dividends, published reconstructions put breakeven roughly 18 years earlier. Both statements describe the same crash.
How long did stocks take to recover from 1929 with dividends reinvested?
Standard reconstructions of the broad US market with dividends reinvested show the first crossing of the 1929 peak in 1937, about seven to eight years. The 1937 to 1938 decline carried the series back below the old high, with a durable crossing in the mid-1940s.
Does inflation make the 1929 recovery look faster or slower?
Faster. Consumer prices fell sharply in the early 1930s, so a dollar recovered in 1936 bought more than a 1929 dollar did. Deflating a dividend-reinvested series pulls the breakeven into the mid-1930s, with published estimates clustering on 1936.
Why do the Dow and the S&P 500 give different recovery dates?
The Dow weights its members by share price and the S&P 500 weights by market value, so the two hold different mixes. For 1929 the difference is small: both price indexes needed until 1954. Dividend treatment matters far more than index choice.
Can I see the dividend effect on a more recent crash?
Yes. The 2007 to 2013 panel above tracks SPY with and without dividends reinvested from its October 2007 peak month. The reinvested line reaches breakeven about a year earlier than the price-only line.
Every panel here ships with the SQL that produced it, so expand one to see how each line was built. To rebuild the price versus total return gap for a different ticker or a different drawdown, ask for it in plain English on the Strasmore terminal.