Controls
These drive every chart on the right. The year slider sets where each time series begins (mortality is by age, so it is not affected). The inflation toggle restates the market-return charts in real, today's-money terms; it leaves the inflation, exchange-rate and mortality charts unchanged.
Market returns
Annual total returns per asset (dividends and coupons reinvested), in the chosen display currency: the S&P 500 (Shiller) and MSCI World for stocks, the US 10-year Treasury (Damodaran) and the FTSE WGBI for world government bonds, on the Jordà-Schularick-Taylor Macrohistory database for the deep history (full sources at the foot of the page). EUR, CHF and GBP are derived by purchasing-power parity, so their real returns match USD and only the inflation overlay and native cash rate differ (see Exchange rates below). The first chart is the growth of 1 unit invested from the chosen start year, log scale (equal vertical distance = equal %). Tick Adjust for inflation on the left to switch the return charts between nominal and real.
Yearly returns, one bar per calendar year (green a gain, red a loss). The portfolio stacks the 80/10/10 stock/bond/cash sleeve contributions (a sleeve turns a warm tone in a year it lost: stocks red, bonds orange, cash amber), so its net bar height is the whole portfolio's return for that year. This is the raw input the simulation resamples.
Portfolio (80/10/10)
Stocks
Bonds
Cash
Cash earns the currency's own short-term interest rate (a real money-market rate, not zero): the Jordà-Schularick-Taylor bill rate to 2020, then from 2021 €STR for EUR, the 3-month T-bill for USD, SARON for CHF, and SONIA for GBP.
Inflation
Cumulative consumer prices (growth of 1, log scale). Each currency carries its own CPI, used both to grow your spending each year and to deflate results to today's money, and (under the PPP model) to re-inflate each asset's real return: USD = US CPI (Shiller 1871-2023, official 2024-25); EUR = Netherlands HICP (JST to 2020, then Eurostat NL HICP from 2021); CHF = Swiss CPI (JST, then SNB / Federal Statistical Office); GBP = UK CPI (JST to 2020, official since). Swiss inflation is the lowest (gentlest cost-of-living drift), the US and UK the highest.
Yearly inflation, the CPI change each year for the selected currency.
Exchange rates
How many US dollars one euro, one franc and one pound buy over time (USD per 1 unit), shown for reference only: the simulation converts assets by purchasing-power parity, not these rates. The visibly broken pre-1950 stretch (e.g. the guilder's 1946 jump from the gold-standard/WWII era) is exactly why, the long historical FX is unreliable while real exchange rates are roughly flat over the long run. Before 1999 the euro is the Dutch guilder restated at the locked NLG-EUR rate. Source: JST Macrohistory (to 2020), ECB / FRED (2021+). The only place the simulation uses a real exchange rate is converting foreign tax brackets (Swiss francs, Nordic krone, US and Canadian dollars, the yen, Singapore dollar and the rest) into your display currency, then it grows them with inflation.
Cost of living
Real Numbeo "Cost of Living Plus Rent" prices (the average of each country's 2-3 largest cities, since a relocating retiree lands in a city), shown as the spending multiplier versus a home country: how much the same standard of living costs there, where 1.0 is the same as home. Two corrections fit it to a multi-decade plan. First, Numbeo converts prices at today's exchange rate, so the non-euro currencies are de-snapshotted to their fair value (a transiently weak krona should not make Sweden look permanently cheaper than it is); the eurozone shares one currency, so it is left untouched. Second, the multiplier depends on how much you spend: at your home's basics budget it is the raw Numbeo gap, and it drifts toward 1.0 as you spend more, because a high spender's extra money goes to travel and other things that cost about the same everywhere. Drag the slider to watch it move. The dark tick on each non-euro bar marks where today's exchange rate alone (raw Numbeo) would place that country, so the gap to the bar is the FX correction; the eurozone has no tick (one shared currency, nothing to correct). Only the ratio between two countries is used.
Mortality
Annual death probability (qx) by exact age, per source / sex / health. US uses the US Social Security Administration tables (via engaging-data); NL / EU use Eurostat, with the same per-age health ratios applied for the healthy and smoker variants.
Survival curve: the chance of still being alive at each age, from age 0.
The same tables as a stacked view of yearly death probability by age: the healthy baseline, plus the extra risk that average, then unhealthy, layer on top. At the oldest ages the source tiers converge (a smoker who survives to ~95 is no longer dying faster than average), so the unhealthy premium tapers to zero; the chart stops at 100, where survival is already near nil.
Raw data: returns.js and mortality.js, the generated series this page reads. Sources: US stocks & inflation from Robert Shiller (Yale) via engaging-data; the US Treasury 10-year total return from NYU-Stern / Damodaran; MSCI World (≈ iShares IWDA) for world stocks; the FTSE WGBI (≈ iShares IGLO) for world government bonds; euro/Swiss bonds, cash, exchange rates and the deep history from the Jordà-Schularick-Taylor Macrohistory Database (please cite Jordà, Schularick and Taylor (2017), "Macrofinancial History and the New Business Cycle Facts", and Jordà, Knoll, Kuvshinov, Schularick and Taylor (2019), "The Rate of Return on Everything, 1870-2015", QJE 134(3)); mortality from Eurostat and the US Social Security Administration.