Get the yearly total returns of equity, housing, government bonds and bills for 18 advanced economies from 1870 to 2020, from the Jordà-Schularick-Taylor Macrohistory Database (Jordà, Knoll, Kuvshinov, Schularick and Taylor, 2019, “The Rate of Return on Everything, 1870-2015”, Quarterly Journal of Economics). A century and a half of returns across wars, depressions and inflations is what calibrates the long-run trend, the equity and housing risk premia and the cycles of scenario generators for 50 to 100-year horizons.

The asset classes: “equity” (dividends reinvested), “housing” (rental income included), “bonds” (long-term government bonds, coupons included), “bills” (short-term government bills), “risky” (a wealth-weighted mix of equity and housing), “safe” (a mix of bonds and bills) and “wealth” (all of them weighted by their share of national wealth). The countries: Australia, Belgium, Canada, Denmark, Finland, France, Germany, Ireland, Italy, Japan, the Netherlands, Norway, Portugal, Spain, Sweden, Switzerland, the United Kingdom and the United States, with gaps in the war years.

Returns are decimal fractions (0.08 for 8%), in local currency, and with real=True deflated by consumer price inflation.

The database is licensed under CC BY-NC-SA 4.0: it may be used for non-commercial purposes with attribution, and its authors expressly exclude commercial data providers. Pass accept_licence=True to confirm the use is non-commercial; the data is retrieved from macrohistory.net when needed and is not distributed with the Finance Toolkit. No API key is needed.

See definition: https://www.macrohistory.net/database/

Also known as: rate of return on everything, long-run returns, JST macrohistory, historical equity premium.

Long-Run Asset Returns in Python

Install the Finance Toolkit with:

pip install financetoolkit -U

Then call get_long_run_asset_returns as shown below.

from financetoolkit import Economics

economics = Economics(start_date='2011-01-01', end_date='2020-12-31')

economics.get_long_run_asset_returns(
    asset_class='equity',
    countries=['United States', 'United Kingdom', 'Germany', 'Japan'],
    real=True,
    accept_licence=True,
)

Which returns:

  United States United Kingdom Germany Japan
2011 -0.0085 -0.0755 -0.1688 -0.0456
2012 0.1448 0.0906 0.2654 -0.0431
2013 0.2767 0.1752 0.2475 0.7158
2014 0.1389 -0.0026 0.0231 0.0742
2015 0.0193 0.0106 0.1058 0.1029
2016 0.0233 0.1465 0.0529 0.0063
2017 0.1679 0.1107 0.1442 0.2135
2018 0.1149 -0.1176 -0.1843 -0.16
2019 0.0624 0.1629 0.2113 0.1793
2020 0.1115 -0.1025 0.0719 0.0786

Parameters

The function accepts the following parameters:

  • asset_class (str, optional): “equity”, “housing”, “bonds”, “bills”, “risky”, “safe” or “wealth”. Defaults to “equity”.
  • countries (list[str] | str | None, optional): The countries to include. Defaults to None, which includes all of them.
  • real (bool, optional): Whether to deflate the returns by consumer price inflation. Defaults to False.
  • accept_licence (bool, optional): Confirms that the data is used for non-commercial purposes, as its licence (CC BY-NC-SA 4.0) requires. Defaults to False, which returns nothing.
  • rolling (int, optional): The rolling window size to use for smoothing the data (simple moving average). Defaults to None.
  • growth (bool, optional): Whether to return the growth data or the actual data.
  • lag (int, optional): The number of periods to lag the data by.
  • standardize (bool, optional): Whether to standardize (Z-Score) the result. When combined with growth=True, standardizes the growth values instead of the raw values. Defaults to False.
  • rounding (int | None, optional): The number of decimals to round the results to. Defaults to None.
Share