Total Returns, June 1949 – August 2026
Loading data…
Methodology — what counts as a bull or a bear
Episodes are detected on daily total-return data using the standard convention:
a bear starts when the index falls ≥20% from a running peak, a bull starts when it
rises ≥20% from a running trough, and episodes strictly alternate. Each episode is
rebased to 0 at its own start, so every mountain hangs off the same baseline and the chart tiles
the timeline with no gaps.
Why daily, and why total return
A monthly series cannot see the March 2020 COVID collapse (-34% in about one month), which is why
the series is built daily. Dividends matter too: total return = price return + reinvested dividends.
Prices come from Yahoo ^GSPC; dividends come from Robert Shiller's ie_data.xls column D
(the 12-month moving average of the annual dividend per share). Daily total return is then
TR[i] = TR[i-1] × (P[i] + D/252) / P[i-1]. Shiller's published copy currently ends 2023-06,
so the dividend is carried forward and grown 4%/yr beyond that.
The vertical scale (measured off the reference chart)
The reference does not use one shared linear axis. Measuring its two global maxima directly from the
published PNG: the +841% bull is 500px tall (0.5945 px/%) while the -55% bear is
183px deep (3.3273 px/%) — bears are drawn ~5.6× amplified. On a shared axis a -55%
bear would be only 6% of an +841% bull's height and would vanish. So the deepest bear is drawn at
36.6% of the tallest bull's height (183/500), i.e. negatives are scaled by
amp = 0.366 × maxBull / |minBear|. The y-axis is labelled with the real percentages
(inverse-transformed), so the amplification never distorts a printed number — only the picture.
Where this differs from the reference
Headline statistics match closely: 13 bulls / 12 bears, bull average 5.2y +258% (reference 5.3y
+254%), bear average 0.8y -32% (reference 1.0y -31%), and most individual episodes are identical to
the year (2.1y +58%, bear 1.5y -33%, 2.6y +89%, 5.0y +304%,
10.9y +525% vs 11.0y +527%, 0.1y -34%, 1.8y +121%).
Three differences remain, all from the reference using an undisclosed house rule rather than a uniform 20%:
• it splits 1949-1961 into a 7.1y bull + 1.2y -18% bear + 4.1y bull (that decline is
under 20% on closing data, so the standard rule keeps it as one 12.5y bull);
• it merges multi-leg declines into one episode (2000-02 as a single 2.5y -47% bear;
2007-09 as one 1.4y -55% bear) where the standard rule splits them on the intermediate +20% bounces;
• its final -19% dip (below 20%) is counted, so its tail reads 2.4y +78% / 0.1y -19% /
1.4y +56% where this page shows one 3.8y bull.
Data & caveats
Fetched daily by sp500-bull-bear-update.py. Episode boundaries are exact for the stated rule and
this dataset, but will shift slightly versus any vendor using intraday extremes or a different threshold.
Not investment advice.