Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Extreme valuations: Risk and returns over the next decade

verify

Valuation has historically predicted little over one year and much more over ten.

Over the ten years ending in July 2026, US equities returned 11.3% a year in real terms, against a historical median of 7.0% across all ten-year windows. In the same month the market trades at a CAPE of 39.5. Only 1.5% of readings have been higher since the ratio begins in 1881, and all of them cluster around the dot-com bubble. This study asks what happened to subsequent returns from comparable valuations, and whether recent performance is a sensible baseline for the next decade.

The problem that makes the question hard

At a CAPE near 40 the historical record contains only one completed episode, the dot-com bubble; the 1929 peak stopped at 32.6, while the current high-valuation period does not yet have ten subsequent years of data. Any historical estimate conditioned narrowly on a CAPE near 40 would rest on one episode.

Because the exact sample is thin, the analysis uses five safeguards.

  1. it conditions on the top decile of valuations, which gives 66 overlapping ten-year windows across more than one expensive period;
  2. it reports the distribution of outcomes instead of a point estimate;
  3. it reports prediction intervals for the regressions and, separately, uses a moving-block bootstrap to measure the sampling uncertainty of their point estimates without treating overlapping ten-year windows as independent observations;
  4. it runs an event study on past expensive peaks, asking what actually happened next;
  5. it adjusts for the level of interest rates through the Excess CAPE Yield.

What comes out

Value
CAPE today 39.5, the 98.5th percentile since 1881
Real return over the trailing 10 years +11.3% a year, July 2016 to July 2026
Historical median real return over 10 years +7.0% a year
Median real return, 1 year after a top-decile reading +9.9%, with 31% of years negative
Median real return, 10 years after −0.4%, with 55% of cases negative (36 of 66)
Median drawdown over those 10 years −11.6%, one case in ten past −48%
Excess CAPE Yield today 1.5%, against a historical median of 3.3%
Time to break even in real terms after the Dec 1999 peak 13 years and 3 months

The short-horizon and long-horizon results point in opposite directions, and that is the finding. Selling because the market looked expensive would historically have been a losing trade over one year, because the median twelve-month real return from the most expensive decile was close to ten percent. Over a decade the same starting point produced a median of roughly zero in real terms.

The regression estimates at today's level range from −1.9% a year using CAPE to +2.9% using its inverse and +4.6% using the Excess CAPE Yield. All three point estimates sit below both the 11.3% recent return and the 7.0% historical median, but their 90% prediction intervals include negative and positive outcomes. Valuation lowers the baseline; it does not produce a precise forecast.

Outcome distribution by horizon

Checking the numbers without downloading anything

output/results.json is committed, and every figure in the table above is read from it rather than typed in by hand. The following command audits the two against each other.

python code/verify_results.py

It uses only the standard library, needs no data file and no network, and exits non-zero if any claim in this README has drifted from the output. The same command runs in CI on every push, which is what the badge at the top reports.

Reproducing the analysis from scratch

pip install -r requirements.txt
python code/verify_data.py      # which vintage of the spreadsheet do you have?
python code/cape_analysis.py    # writes six charts and results.json into output/

The script resolves its paths from its own location, so it runs from any working directory.

Download ie_data.xls from https://shillerdata.com/ and place it in data/ first. The spreadsheet is not redistributed here because it belongs to its author and is revised monthly at the source. verify_data.py reports the size, checksum and coverage of the copy you have and compares it with the version behind the published figures, so a newer file changes the results openly instead of quietly. The data notes explain the provenance and checks in more detail.

As an internal control the analysis recomputes forward ten-year real returns from the price series and compares them against Shiller's own published column. The mean absolute error is zero to machine precision, which confirms the return construction rather than assuming it.

What this study does not say

The sample at today's valuation is thin, and conditioning on the top decile is a debatable choice made explicit rather than buried. Ten-year returns overlap one another, so the observations are not independent and the intervals should be read as indicative. The event study uses a curated list of major local peaks, which is a judgement call documented in the code.

This is a personal research exercise. It is not investment advice, and past returns do not predict future ones.

Author

Simone Rizzuti.

Code released under the MIT licence. The Shiller data belongs to its author and is subject to its own terms.

About

Risk and real returns after extreme U.S. equity valuations, 1881 to 2026. Reproducible in Python, with the reported results checked automatically.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages