The break until version 0.7 was a little longer this time. The reason for this was extensive technical modifications, which have also given me a few additional gray hairs. So what has changed?
All the results of the FI Simulator were previously based on the simple procedure of simulating the future portfolio development by running it through all possible historical returns, where the “histories” differ only in a different starting month. In this version of the FI Simulator, alternative methods based on Monte Carlo simulations can now be used, using the so-called “block bootstrap” or so-called “IID returns”. Due to the complexity of these methods, a new documentation article was also required: FI Simulator 7 - Sampling Methods. Please read it carefully before using these new features.
Important: When calculating withdrawal rates with Monte Carlo sampling in conjunction with the “Cap. Preservation” function, an interesting effect can occur: If, for example, you set the Capital Preservation to 100% in order to withdraw only enough so that you can still bequeath the original amount of assets, the following happens with the Monte Carlo method: In this case, a few very unfavorable returns series are generated that make it impossible to preserve the assets against inflation, even with a withdrawal of zero. Until now, this has resulted in negative withdrawal rates, i.e. in order to make the heirs happy, monthly payments into the portfolio would be necessary in these extreme cases. This is mathematically correct but relatively counterintuitive. I have therefore now changed the behavior so that the withdrawal rate is simply set to zero in these cases. Thanks again Elmar for drawing my attention to this effect!
The inclusion of the new Monte Carlo methods also required a simple overview in which the new methods can be compared with the old sequential method. This overview can now be found as a separate sub-tab “Compare Sampling-Methods” below “Calculation of Exact Withdrawal Rates”. The original tab has remained there but is now called “Distribution of Withdrawal Rates”. The structure of the chart is also explained in the article linked above.
Another innovation concerns the usability: all available assets can now be found in an asset catalog and can be selected for your own asset allocation and for possible optimization analyses. The aim here was simply to avoid having to “lug around” the large number of assets all the time, as many users probably only work with a small subset of the assets 99% of the time anyway. In addition, the current procedure is hopefully almost self-explanatory and not as counter-intuitive as before.
Perhaps the most important usability change in this new version is already indicated by the absence of the “Save analysis” button. From now on, the current status of the analysis can be saved simply by saving a bookmark in the browser. When this bookmark is called up, the simulator opens again exactly on the tab where the analysis was saved and all input data including possible test asset allocations should appear exactly as they did when the analysis was saved. This now also makes it possible to pass on potentially interesting results of the simulator simply by linking to it. Important: Such a link contains all input data of the simulator, i.e. if you actually wanted to keep Aunt Sue’s large inheritance (entered as Additional Cashflows) a secret, you should still be careful when passing on such links. In doubt please open a fresh Link to the Simulator to ensure that all inputs are reset to the default values before you send what you are actually willing to send. By the way, some of you will probably have been cursing at me over the last few weeks anyway, because my old links to the simulator were suddenly changed in January and then stopped working. Sorry about that, but despite a few hours on Google and a lot of fiddling around, I couldn’t get a working redirect. However, the change was necessary because the simulator had been integrated so far as a so-called iFrame and there would have been no way to implement something like link storage before the change. Unfortunately, due to further technical hurdles, I had to change the link format for this version again. I hope that the link format will remain stable from now on and I will try to make incompatible changes only in case of emergency, I promise ;-)
With the inclusion of the Monte Carlo methods, it also became necessary to handle the percentiles of the resulting distributions of portfolio development and withdrawal rates more cautiously. The Monte Carlo methods generate significantly more extreme cases than before, so that “safe” withdrawal rates are disappointingly low at first glance. In the asset allocation settings, the range of percentiles to be displayed in the charts can therefore now be set explicitly. This primarily affects the length of the error bars in the box plots. However, I also display the lower limit of the percentiles in the portfolio development over time and also use the lower limit for the X-axis of the “Efficient Frontier”. By default, however, this setting remains at “0%-100%”, i.e. all percentiles are taken into account and also displayed so that the previous results are reproducible. A side effect, however, is that outliers in the data are not displayed as separate points above or below the error bars of the boxplots as before, but the error bars actually extend up to these outliers. However, the standard display of the error bars in plotly is non-transparent and somewhat arbitrary anyway, so in my view the current procedure is more transparent and, above all, adjustable.
As a final small usability change, the field “Expenses from FI” is now only shown in the tabs where it is relevant, i.e. when displaying the portfolio development. Conversely, the “Cap. Preservation” field is now only shown where withdrawal rates are calculated (because this setting is only relevant there).
Old analyses that were created with version 0.6 should still be able to be imported with the button until the next version. If not, please let me know and I will be happy to take a look. In any case, I would recommend that you save the analyses you are interested in as bookmarks as soon as possible, as I cannot guarantee the import of old analyses in json format indefinitely.
Last but not least, I would like to actively encourage everyone who would like to support my work to use links to the simulator to share interesting results. It would be great if this would further increase the use of the simulator.
I hope you will again like the new features and I look forward to hearing about interesting results you have found with the new data. If you want to be notified about new posts, please use your favorite RSS reader and subscribe to this blog using the RSS link in the main navigation bar or through this link.
Have fun with the new functions and all the best!
After a longer period of collecting and priorizing new features, it is again time for a new release of the FI Simulator. This time the following new features have made it:
After many requests, I have now changed the input of percentage values in all tables. From now on, a value of “25%” requires the entry of “25” and not “0.25” as before. I hope this will help to avoid confusion in the future.
In this version, the historical annual compound growth rates (CAGR) can now be adjusted for all assets via the new column “CAGR Adj.” in the asset table. Simply add the correction value in this column such as “2%” for an increase upwards or e.g. “-2%” for a reduction downwards and this is immediately active. By default this correction is set to zero for all previously available assets in order to stay consistent with the previous results. Why is this feature important to me? One reason is that the frequently used data of the US stock market has historically achieved very high real returns of well over 6% per year. Part of this above-average return is due to special effects, though, and it remains unclear whether those will continue in the future. Hence, a downward correction of maybe around 1% brings this return in the range of the expected return of a more global portfolio and could thus hopefully ensure more realistic results in the simulations. Another aspect concerns assets like the small cap value stocks. Historically, these have achieved even higher real returns above 8.5% per year. However, almost all experts agree that in the future only a significantly smaller premium can be expected, if any at all. This premium can therefore also be adjusted now. You can also test, for example, by reducing the CAGR of small caps value down to the level of large caps, if adding them still brings some kind of diversification benefit (short spoiler: yes, it does!).
In addition to the historical asset data that I have integrated so far, four synthetic new assets have been added in this version. The idea was triggered by discussions in the Bogleheads Forum regarding the use of long TIPS. In contrast to the nominal yields of normal treasury bonds, such TIPS provide a defined real return because they pay out the inflation rate on top. These bonds are relatively interesting as an add-on to a retirement portfolio, but the entire asset class is relatively young, meaning that historical data for the US is only available since 1997. This is far too short a history to be meaningfully integrated into the simulator and, moreover, it seems hopeless to estimate reliable historical data that somehow go further back in time. But there is an alternative: If I buy such long bonds today and hold them til maturity, I do not have any interest rate risk but regularly collect their annual nominal or real yields known at the time of purchase. Such bonds are therefore easy to simulate, which is why they are now included in the new version. If you open the “Asset allocation …” tab, you can see these new assets in the last four rows. They include regular US and German bonds as well as inflation-indexed US and German bonds. Crucial for these synthetic assets is the new column “CAGR Adj.” (see point 2). For normal government bonds, you simply enter their desired nominal yield and for inflation-indexed bonds, the desired real yield in this column. For the sake of simplicity, I have completely ignored the aspect of maturities, though. It is assumed here that these bonds generally run indefinitely and pay out their constant real or nominal yield until the end of the simulation. These bonds can then be used in the portfolio in the same way as the other assets. I have already predefined yields for these bonds, but before using them you should check and adjust the yields accordingly.
One of the criticism often heard in recent months was the fact that the percentage values of the asset allocations can be defined rather arbitrarily (on top of the input problem already mentioned in point 1). Moreover, since the inclusion of US Bills and DE Cash, a total asset allocation that deviates from 100% no longer made any sense. Therefore as of this version, the sum of 100% will always be checked and an error message appears otherwise. I hope this will also help to avoid confusion. In addition, the fixed inflation rates of 2%, 3% or 4% added at some point since version 0.5 did not work any more. I don’t use these fixed inflation rates myself, so I didn’t notice this error (yes, I admit my test strategy still has significant gaps …). Anyone who notices such errors is very welcome to send me a short note. I’m always very grateful for this and it’s usually fixed very quickly!
In the “Asset allocation …” tab, there is another new feature at the bottom: the previously separate “Home currency” and “Inflation” fields are now combined and are simply labeled “Currency & inflation”. I have used the space thus gained for a new input field called “Rebalancing Freq.”. Previously, once the asset allocation had been set, it was rebalanced to the target value at the end of each month. This was mainly for technical reasons, as I could then easily calculate monthly returns weighted according to the asset allocation, which was one of the reasons for the tool’s good performance. Another advantage of this calculation was that monthly price fluctuations are also included in the sequence-of-return risk, which generally means that safe withdrawal rates with monthly data are often somewhat lower than with annual data. In the new version 0.6, however, it is now possible to increase the rebalancing frequency to quarters, years or even a 2-year interval. In mathematical terms, this means that only historical quarterly, annual or 2-year returns are used for the statistics. What do I want to achieve with this new option? One reason is academic: Many of the standard papers on the subject use annual returns and with the new function I can now compare their results exactly with results from the simulator. Another reason is that an annual or even longer rebalancing interval has historically paid off, because it profited from momentum effects. This can now also be tested in the simulator. Perhaps the most important reason, however, is the new function described in the next section.
In the “Optimization of Asset allocation” tab, there is now a new function called “Efficient Frontier”. It calculates a random sample of asset allocations for the selected set of assets and displays the median withdrawal rate against the minimum withdrawal rate for each element. The term “efficient frontier” actually comes from portfolio theory and describes a very similar representation in which the mean returns of the resulting portfolio are shown against its risk for various asset allocations. In such graphs, there is always the efficient frontier, which represents the possible limit of return for a given risk of a portfolio. The measure of risk in these graphs is almost always defined as the variance or standard deviation, which explains the name “mean-variance graph”. However, FI enthusiasts like us should not really be interested in the fluctuations of our portfolio. Much more important is the minimum amount I can withdraw from such a portfolio without going bankrupt prematurely. The minimum withdrawal rate is therefore a much better measure of the risk we are willing to take with our portfolio. The graph selected here therefore provides a quick overview of the ratio of risk (minimum withdrawal rate) to reward (median withdrawal rate) for a large number of different asset allocations. Anyone who has already looked at the function will notice that only a relatively small number of data points are displayed by default. This is simply for performance reasons, as several hundred complete simulations have to be calculated in the background for this image and therefore I have to limit the number of data points to prevent my small cloud server from being overloaded. But there is a solution: If you set the “Rebalancing Freq.” described in point 5 to “Annually”, 12 times as many data points will be calculated and the following diagram should appear (after a few seconds):
Just a brief description of this graph: The color of each data point corresponds to the dominant asset in the respective asset allocation. The green asset allocations thus predominantly contain synthetic TIPS bonds with a real yield of 2.6% and you can see that very high minimum withdrawal rates of up to around 4.7%(!) would be possible for our Standard Trinity case (one reason for the very active discussion of this asset in the USA at the moment!). However, the average withdrawal rates that can be achieved are significantly lower compared to asset allocations with a higher equity component, which appear in blue at the upper end of the efficient frontier. The Efficient Frontier thus serves as a quick overview of asset allocations with several assets and can hopefully provide a good first orientation in the “asset jungle”. I describe the Efficient Frontier function in more detail in the revised documentation on optimizations of the asset allocation, so please read on there if you are interested.
There is another change at the bottom of the “Asset allocation …” tab. Previously, in the “Use data from” field, it was only possible to select the starting year from which historical prices should be included in the simulation. This was very useful when using German data, for example, if you wanted to hide the extreme effects of the Weimar hyperinflation at the end of 1923 or the currency reform of 1948. From this version onwards, the historical lower limit can be set with monthly precision. This is not just pedantry but, in conjunction with the rebalancing interval mentioned in point 5, now offers the possibility of specifying which starting month should be used for e.g. the annual rebalancing. I don’t want to spoiler potential blog articles here, but if you look at the withdrawal rates for US stock and bond data with annual rebalancing, you can see a somewhat surprising dependence of the SWR on this starting month. So please consider carefully whether you prefer to rebalance your portfolio in summer or winter, as this difference can be decisive for the historically worst sequence-of-return risk. Unfortunately, in real life this can of course only be recognized retrospectively, but the differences in the simulator give you a good hint of the uncertainties that even the reduction of price date down to monthly or even annual returns can cause.
There is also a very small addition to the pension function mainly useful for german users: Up to now, it was possible to select the percentage reduction depending on whether you plan to retire at 63 or wait until the start of the reduction-free pension at 67. I recently saw that there is also the alternative of working longer than 67 and then receiving a pension bonus instead of a reduction. This can therefore now also be selected as an alternative up to the age of 72. I’m not sure how many people interested in FI want to make use of this option, but I thought it was worth the extra few lines of code.
In addition to the new functions described above, a few things have changed under the hood once again. For example, the perceived performance should now be better, as I had to optimize it further for the introduction of the Efficient Frontier. On the other hand, I don’t want to rule out the possibility that the modifications still contain errors and that old functions may now display unusual or even incorrect results. In this case, I would be very grateful for a brief note with details of how I can reproduce the problem! By the way, all analyses saved with version 0.5 should hopefully be able to be imported into the new version and their percentage settings will then also be saved compatible with version 0.6 when saved again.
Last but not least, a personal remark: Over the last few months, some of you have asked me how they can show their appreciation for being able to use the simulator without any cost. I was very glad to receive these requests, as they show that the simulator was useful to them. However, I have still no commercial interests and see Predict-FI.com as a pure hobby project. However, if anyone would like to make a donation towards a really good cause instead, I have now started a fundraiser for DKMS at betterplace.org in the name of Predict-FI. If you would like to support me and the further development of the simulator, therefore please use this link (from now on it is also permanently at the top of the menu under “Thanks”). All donations from this campaign will go entirely to DKMS (minus necessary administration fees of 2.5% by Betterplace.org, which is also a non-profit organization in Germany) and you will automatically receive a German tax receipt via Betterplace.org. Thank you in advance for your support of a really good cause!
I hope you will like the new features and I look forward to hearing about interesting results you have found with the new data. If you want to be notified about new posts, please use your favorite RSS reader and subscribe to this blog using the RSS link in the main navigation bar or through this link.
Have fun with the new functions and all the best!
Today there is a small “intermediate release” of the FI Simulator. Here is a list of the (few) new features:
in this version I have included a time series of an equally weighted Commmodity Index starting in 1877(!) based on the article Commodities for the Long Run by Levine, Ooi, Richardson and Sasseville. The associated monthly time series is thankfully provided by AQR here. Why am I interested in commodity data in the context of FI at all? An Equal-Weighted Commodity Index combines two characteristics not found in any other asset: Such an index performs particularly well in times of (unexpected) rising inflation and thus represents a real inflation hedge. Moreover, the data show that the index has generated an inflation-adjusted return of just over 4% per year since 1877. Even though equities are widely regarded as a hedge against inflation, this is only due to their expected long-term positive real return. In the short term, stocks as well as bonds usually suffer from rising inflation, as we experienced in the 1970s and again recently in 2022. However, a commodity index by definition tracks price increases in commodities, which are usually a core driver of inflation. Besides commodities, only gold is considered as the other possible inflation hedge, but due to its peg to the U.S. dollar, gold prices can only be used from 1973 onwards, and the very long-term data for gold also indicates a long-term real return of just around 0% per year. Whenever you think of adding Gold into your portfolio you therefore might want to look at complementing or even supplementing this with Commodities. Commodities can play an extremely interesting role in a risk-adjusted portfolio.
As promised in the introduction of version 0.4, I have finally found a way to get rid of the ugly dropdown box for selecting assets for optimization. Instead, you can now use a normal checkbox on the left side of the asset allocation table. Until now, the selection was also saved and reloaded in the json file, this is no longer possible in the new version. I probably could have implemented this again with some effort, but the benefit to do this simply seemed too small.
I hope you will like the new features and I look forward to hearing about interesting results you have found with the new data. If you want to be notified about new posts, please use your favorite RSS reader and subscribe to this blog using the RSS link in the main navigation bar or through this link.
]]>If you have always wanted to know whether factor ETFs or a golden butterfly portfolio allow for earlier financial independence or higher withdrawal rates in retirement, you can now calculate this yourself in the new version 0.4 of the FI Simulator. Furthermore, there are some new analysis features. Here is a list of all new features:
In this version a number of new data series have been added. First, there are new US stock indices based on the Factor data by Kenneth French and Eugene Fama. Fama and French use the so-called CRSP database for their research, which is the gold standard for historical stock prices of the US market. Unfortunately, the actual CRSP data is not available to private investors, but fortunately many of the indices of interest to us can be reconstructed with very good precision from the Fama/French data. The procedure required to do this has been described in detail by the author of PortfolioCharts.com here. Kudos to Tyler for this fantastic work! Tyler uses the definition that large cap stocks cover the top 85% of market cap and small cap stocks beyond that cover the 85%-98% portion (the last remaining 2% are micro caps, which are typically left out of a small caps ETF). This is the de-facto standard used by most index providers today. In parallel, the market is divided into half “Growth” and half “Value” stocks depending on the book value / market capitalization ratio. From these 4 sectors, corresponding stock indices can then be constructed, whose performance corresponds very well with the existing factor ETFs in the market today. The big advantage, however, is that these indices constructed in this way start as early as June 1926, i.e. they go back much further than the ETFs that exist today. So in addition to the CRSP All-Caps Index, which tracks the entire U.S. market including micro-caps, we now have new U.S. indices for large cap growth, large cap value, small cap growth and small cap value stocks. The Small Cap Value Index in particular is extremely interesting: since 1926, this index has delivered an excess return over the overall market of over 3 percentage points per year! Another advantage of the new data is that they are available as month-end values and not only as monthly averages as in Robert Shiller’s data. The averages used in Shiller’s data lead to artificially lower volatility and even to measurable deviations of the safe withdrawal rates in critical stock market phases such as during the big depression.
In addition to the new CRSP-based US indices, I have also integrated the MSCI World Index as an additional new asset after multiple requests to do so. This index probably represents the portfolio of many current investors much better than pure US or German stock indices could. Thus, the MSCI World would actually be the stock index of choice for the FI-Simulator if only its data would extend a little longer into the past than 1970. If you choose this index for your analyses, you should therefore be aware that you are only using about 50 years of data, which also do not contain many of the critical stock market phases. Therefore, the results should be compared critically with the results obtained from using longer historical data.
Last but not least, I have also added gold as another new asset. I am not sure yet if gold can really play a role in a modern retirement portfolio. However, since the data is readily available and goes back a long time, I would like to give everyone the opportunity to analyze this for themselves before settling for a preconceived opinion. When analyzing a “gold-rich” portfolio, however, one must always keep in mind that pre-Bretton Woods 1973 gold prices were pegged to the U.S. dollar, and thus the macroeconomic behavior of this asset pre-1973 is not comparable to post-1973. Nevertheless, it will be exciting to recreate, for example, the Golden Butterfly Portfolio in the simulator. I can already reveal that the results will be surprising.
The large number of possible new assets in the portfolio also requires a modification of the asset allocation tab. Now, a checkbox can be set for each asset on the right if this asset is to be used in the optimization and analysis functions below. Unfortunately, the Plotly library I use doesn’t offer a real checkbox within a table, so I currently have to use a small dropdown menu instead. This is not really beautiful, but seems to work okay-ish. As soon as Plotly offers something better, I promise to change this again.
Up to now it was possible to calculate a glidepath when optimizing the asset allocation, but the result could not yet be transferred to the own portfolio, because up to now only a fixed asset allocation for an accumulation and a withdrawal phase could be entered there. With the new version it is now finally possible to enter a glidepath length at the bottom. Only if the length of the glidepath is greater than zero, a new column opens up, which allows the entry of a corresponding asset allocation at the beginning of the glidepath. If you are wondering at this point why the column for the asset allocation of the savings phase is missing, please make sure that your FI date is after the simulation start. Only then this column will be shown automatically, otherwise it remains hidden, because then a savings phase does not exist. This hopefully makes the increasingly complex interface a bit more intuitive to use. The other tables below, which can be used to optimize the asset allocation, now behave similarly. Therefore if you are missing columns during input, please always check if glidepath length and FI date are set correctly.
The asset allocation optimization functions have been restructured and extended. The new version now allows the separate optimization of the asset allocation during the savings phase (if available), during the withdrawal phase (with a constant asset allocation), during the withdrawal phase with variable asset allocation using a glidepath as well as an optimization of the length of such a glidepath. Last but not least, a fifth sub-tab allows a detailed comparison of the results of a deviating asset allocation with the own “normal” asset allocation.
So far the price data used for the calculation of the withdrawal rates was not directly visible anywhere. However, with the above-mentioned addition of many more assets, greater transparency will be helpful in selecting them for one’s portfolio. For this purpose, there is now the new tab “Asset Performance”, which shows the used price charts and calculates the corresponding returns and volatilities for the desired time period. In addition to the “normal” display as logarithmic index charts, there is also the possibility to calculate Telltale Charts made popular by John Bogle. These are especially useful to analyze the factor indices described above in more detail to see in which time periods factors were advantageous.
As with the last update, I have tried again to allow analyses created with the previous version 0.3 to be imported into version 0.4. When saved again, these will be stored in a format compatible with version 0.4. In case of problems with this import I would be grateful for a short hint. In addition, I have again made some changes to the code base under the hood. Therefore, if anyone notices any deviations from the previous version I would again be very grateful for a hint, ideally together with an analysis file (anonymized and freed from critical financial data). Many thanks in advance!
I hope you will like the new features and I look forward to hearing about interesting results you have found with the new data. If you want to be notified about new posts, please use your favorite RSS reader and subscribe to this blog using the RSS link in the main navigation bar or through this link.
]]>The German hyperinflation occurred exactly 100 years ago. No other event has probably had such a lasting impact on German society’s relationship with money as this event. In this article I would like to take a closer look at the impact of such “black swans” on our calculations for financial independence. The article is a bit longer and assumes knowledge of the basic functions of the simulator. In case of doubt, therefore please have a look at the documentation.
Most studies on financial independence (and all publicly available FI calculators that I know of) use data from the U.S. stock and bond markets to calculate withdrawal rates (or, for lack of other available data, cover only a relatively short period back to 1970 at most). In my view, however, this leads to a classic easy-data bias: the U.S. data are available free of charge and cover a period of more than 150 years. This long period suggests that the extreme events it covers, such as the two world wars, the Great Depression and the stagflation period of the 1970s, can provide a sufficient basis for risk assessments. I deliberately quote my own basics article on the FI simulator: “The basic assumption of this simulator is that a very large spectrum of possible extreme situations is already covered and we assume that the actual future development of our portfolio will lie somewhere between the extremes with a fairly high probability.” However, as we have already seen in the blog article introducing historical German stock and inflation data, the safe withdrawal rates for a German investor invested exclusively in German stocks and exposed to German inflation rates are well below the comparable results for a U.S. investor. The results are interesting because Germany can serve as a prime example of how Black Swans can affect safe withdrawal rates due to the two lost world wars and the hyperinflation of 1923 (I refer to black swans here in reference to the well-known book by Nassim Taleb as unexpected extreme events that lie far outside the experience known up to that point). A systematic comparison of the results of a U.S. investor with a German investor should therefore allow a much better assessment of risks than looking at the U.S. market alone.
Last September, Scott Cederburg et.al. published a paper that goes in a similar direction and calculated safe withdrawal rates for a variety of other countries. The group uses commercial data from globalfinancialdata.com for this and also comes to much worse results than with the US-only data: Instead of the popular 4% rule, this paper concludes that rather a 2% rule should be used. This way the historically known risks of local equity markets would be taken into account as well instead of just hoping that those perform as well as the US equity market. As expected, this paper has triggered lively discussions (e.g. here) because it would of course require much larger portfolio sizes before financial freedom is achieved.
Since we unfortunately cannot rule out the possibility that we will see more black swans in the future, in this article I would like to attempt to understand the effects of at least some of the extreme events a little better. Ideally I would like to even mitigate their impact a little bit by optimizing the portfolio appropriately. In this case, the swans would then no longer be quite so black but hopefully only “gray”.
One major criticism of the Cederburg paper for example was that the group primarily studied investors who were only invested in their respective domestic markets. Even my own blog article introducing the German stock data ultimately describes a German investor who was fully invested only in the German stock market. Could this investor have had better results if he had also held U.S. stocks? And today we can even invest cheaply in fully global equity ETFs and such a global diversification should also help to mitigate those risks, right?
Furthermore, since version 0.3 of the simulator, we have the possibility to systematically examine different asset allocations and, for example, add bonds in order to reduce the volatility of our portfolio. Could this mitigate some of the impact of extreme events like the hyperinflation or the effects of the lost world wars?
Without access to the commercial market data from the Cederburg Paper, we have to limit ourselves to the U.S. and German stock and bond market data that is available in the simulator. However, as mentioned above, the histories of both countries cover a much broader range of extreme events than the U.S. market alone. So let’s take a closer look at various example scenarios using this available data:
For a 100% stock portfolio, this case corresponds to the results I already presented in my blog post on integration of German stock and inflation data. To replicate these results we set the home currency to “DE Euro” and the home inflation to “DE” in the “Asset Allocation and Stock/Bond/Inflation Data Settings” tab. This ensures that we use the inflation data that applies to the cost of living in Germany and also that all currencies are correctly converted to EUR in each case. Since we are also looking at periods well before the introduction of the Euro, it is important to consider its German predecessor currencies as well. These were the Papiermark until the hyperinflation of 1923, the Reichsmark until 1948 and the D-Mark thereafter. These predecessor currencies are automatically included when “DE Euro” is selected. We also change the asset allocation, which is always set to 100% US stocks in the default, and set it to 100% DE stocks. We leave the other settings unchanged and thus obtain the following picture:
If we now look at the calculated withdrawal rates we see the disappointing result already known from the old blog post:
Instead of the “familiar” safe withdrawal rate of about 1200â‚¬ for our 480,000â‚¬ portfolio, which corresponds to 3% and uses only the US data, we get with 100% German stocks a safe withdrawal rate of only 519â‚¬ which corresponds to just 1.3% of the portfolio value. If we accept a bankruptcy probability of 2.5%, this withdrawal rate only increases to 599â‚¬ or 1.5%. This halving of the withdrawal rate also fits roughly to the results of the Cederburg Paper.
Let us now take a closer look at the middle chart: There, the withdrawal rate is listed depending on the virtual start date of the stock history and we can see that the minimum of the withdrawal rate results from the start date Feb. 2014, i.e. shortly before the outbreak of WW1. So interestingly, here the hyperinflation of 1923 does not seem to be the dominant effect in a 100% German equity portfolio. This is primarily due to the fact that stocks as tangible assets are much more independent from inflation than bonds or even bank deposits. However, looking at start dates between 1921 and 1923, we can also see the extreme fluctuations of the resulting withdrawal rates. Thus, stocks are not unaffected by such an extreme event.
Up to this point, we have merely reproduced the results of the older blog article once again. But now let’s take a look at how different asset allocations affect withdrawal rates. We first examine a possible admixture of German bonds. To do this, we go to the “Optimization of Asset Allocation” tab and calculate possible portfolios between the following two “extreme portfolios”:
The resulting graph is strongly dominated by statistical outliers at the top. To get rid of those, we simply enlarge the area of the actual boxplots with the mouse and obtain the following image:
My gut feeling before was that adding bonds would not have a positive effect due to their high real price losses in the context of hyperinflation. We see that a small addition of 10% bonds leads to a tiny increase of the safe withdrawal rate from 519â‚¬ to 535â‚¬, but this is, of course, no significant improvement. More striking is that the withdrawal rate of the 1st quantile (i.e. the value that is only undercut by 25% of the data points) increases from 1259â‚¬ to 1647â‚¬ with 20% bonds (the area between the 1st and 3rd quantile contains the middle 50% of the data points and corresponds to the “thick” part of the boxplot). Thus, for the middle 50% of the histories, adding bonds can lead to a significant increase in the withdrawal rate. The 25% worst histories are likely to be dominated by effects from the hyperinflation, and in this article we deliberately wanted to examine the effects of such extreme events and will therefore not ignore the lower part of the boxplot. If you look at the data point on the far left, which corresponds to a pure bond portfolio, you can see how violent the impact of hyperinflation has been: With a pure German bond portfolio of 480,000â‚¬ only a safe withdrawal rate of 87â‚¬ would have been possible.
As an extreme example, it is also worth looking at a German investor who holds part of the portfolio as cash. So we examine portfolios between the following two extremes. Portfolio A has 0% assets, i.e. the remaining 100% are cash or bank deposits that do not yield any return:
The resulting outcome shows how a cash-heavy portfolio would have been wiped out during the hyperinflation:
The safe withdrawal rate of a cash-only portfolio (the data point on the far left) would be pretty much exactly 0.00â‚¬ due to hyperinflation! So in essence it seems that our usual mechanisms for optimizing the asset allocation with bonds and cash are actually pointless in the case of an extreme event like a hyperinflation and do more harm than good. Of course, this is also what you would expect, as bonds and, above all, cash are most strongly affected by hyperinflation. Equities, as tangible assets, apparently still get you through such a phase comparatively better. I strongly suspect that real estate would also have helped here, but for lack of useful data, I must stick to the pure hypothesis here.
As a final exercise in this case, we now set the field “Use Data from” to 1924 in the “Asset Allocation and Stock/Bond/Inflation Data Settings” tab and thus filter out WW1 and hyperinflation from the historical data completely. All historical price histories thus start in 1924 at the earliest, i.e. after the introduction of the Rentenmark, which was later called the Reichsmark. Our withdrawal rates for different asset allocations between 100% German bonds and 100% German equities now look much more benign and resemble in their behavior what one sees when using purely US data:
With an admixture of 15% bonds, we now get a safe withdrawal rate of 1115â‚¬, which is well above the 519â‚¬, but still well below a comparable withdrawal rate of about $1473, which would be possible with purely US data (and US inflation rates). Nevertheless, the underlying historical price trends still include the lost WW2, which led to a massive devaluation of stock and bond prices (by about 90%). Against this background, this safe withdrawal rate of 1115â‚¬ for the worst case of all historical trajectories is still surprisingly high.
The case that now follows is somewhat fictitious, since in the past, of course, the free buying and selling of foreign currencies as well as foreign stocks was not always possible. But if we assume for the future that this is possible at any time, we can examine how an investor in Germany with a broad American securities portfolio would have fared. To do this, we change our own asset allocation back to the default case of 100% US equities, but leave home currency and inflation at “DE Euro” and “DE”, respectively:
The result was surprising to me at first:
Although U.S. stocks quoted in U.S. dollars should be totally independent from the hyperinflation of the German paper mark, we see a safe withdrawal rate of only 623â‚¬ i.e. not much more than a pure German stock portfolio would have delivered. If we look at what part of the data is responsible for this disappointing result, we see exactly the area of the hyperinflation 1923 as the starting date of the critical price histories, which I show enlarged again here:
My first reflex when I saw this counter-intuitive result was to doubt the underlying data, especially with regard to the Paper Mark - USD exchange rates from the time. To this end I have looked for other exchange rate tables from various sources, which showed partly deviating values especially in the 2nd half of 1923, i.e. at the height of the hyperinflation. To my astonishment, however, the withdrawal rates achieved with those tables were sometimes even lower. The exchange rates ultimately used here in the simulator between 1914 and the end of 1923 are from gesis.org and are based on monthly averages of the Berlin Stock Exchange. Since G. Gielen’s inflation data from the period are also available as monthly averages, I actually expect the least systematic error in this combination.
We can better understand what happens here when we look at the following chart, which shows inflation-adjusted (based on German inflation data!) returns of U.S. stocks and of the U.S. dollar itself in EUR (or the correspondingly converted German predecessor currencies) based on the data used in the simulator:
First of all, you can see that the shape of the exchange rate of the U.S. dollar (in red), of course, has a massive influence on the price trend of U.S. stocks in Euro (in blue). Especially the following periods are interesting:
However, these exchange rate effects now explain some of the previous results:
So back to the original motivation for this article: The German investor who would have somehow anticipated the effects of hyperinflation and wanted to build a U.S. portfolio as a countermeasure, would have achieved only slightly better results than the analogous investor in German equities. If one wants to draw any lessons from this situation, then the only thing that comes to mind is that in such phases, exchange rates apparently also tend to become irrationally exaggerated and one thus runs the risk of having to buy at very unfavorable rates. This suggests that a globally diversified portfolio should be built up early enough, i.e. while exchange rates are still behaving rationally. If one had built up the US portfolio well before 1921, one would have been able to realize withdrawal rates of about 2000â‚¬ with this portfolio, and (theoretically) would have been able to cope with hyperinflation.
As a next step our example investor tries to further minimize risk by adding German bonds to his portfolio of U.S. equities. Perhaps this admixture will help to reduce volatility and thus increase the possible withdrawal rate again. We therefore set the two extreme points of the asset allocation as follows:
The result (after slightly zooming in with the mouse to again hide the statistical outliers at the top) actually looks much better: Adding 30% German bonds we reach a safe withdrawal rate of 1316â‚¬. This is still slightly below the optimal result with pure US data ($1473 with 25% US bonds) but is already in the same order of magnitude. Unlike the addition to German equities, the addition to US equities apparently leads to a significant reduction in volatility and thus to a strong increase in the safe withdrawal rate. This is surprising since, as mentioned above, German bonds suffered a real loss in value of about 90% during the hyperinflation. Let us now apply this apparently optimal asset allocation to our own portfolio:
We see that the minimum withdrawal rates with this portfolio actually no longer come from the hyperinflation but from the stagflation phase of the 1970s:
For the sake of completeness, we also calculate adding US bonds to US stocks for a German investor. Actually, the rule of thumb is that you should always buy bonds in your home currency to avoid the additional currency risk. Captain Hindsight, of course, sees it differently, because he knows that soon a hyperinflation in paper mark will come and thus buys himself a large chunk of US bonds:
The result is unfortunately disappointing: Adding US bonds has no positive effect at all and the best result is achieved with 100% equities. The minimum comes in all cases again from the history, which starts in the hyperinflation. The cause here are again the exchange rate effects already discussed above. These have the same effect on both asset classes and thus prevent the mutual compensation of price extremes, which otherwise help to reduce volatility.
For those who still haven’t completely lost the plot, there is one last scenario: an admittedly very crude approximation of a “world portfolio” could be a portfolio with 60% US stocks and 40% DE stocks. The 60% US share roughly corresponds to their actual share of the world’s market capitalization today, and for the rest we just take the only independent data set we have which are the german stock data. Let’s look directly at how an optimization of the asset allocation would look like with an additional admixture of German bonds to such a “global” portfolio:
With an admixture of 15% German bonds, we actually get a safe withdrawal rate of 1430â‚¬ from this portfolio, which is only just below the result for pure US data. Mind you, we have kept the complete German data set including World War 1 and the Hyperinflation of 1923 in there. I.e. a fictitious German investor with exactly this portfolio would have actually painted the black swans that took place during these times gray and would have come through relatively unscathed.
As we have seen, evaluating withdrawal rates with long-term German stock and bond data is quite a subtle undertaking due to the Hyperinflation of 1923. Therefore, if you want to make things easy for yourself, you should either stick with the default selection of US stocks and US currency and inflation data in the simulator or, when using the German data, always set the time period to at least 1924 by setting the “Use data from” field. This then implicitly assumes that we will not be threatened with something like a Hyperinflation in the future and the data are much easier to interpret.
However, if you want to be prepared for a Black Swan like 1923, this article may give you some initial ideas on how to steer your portfolio through such phases. Apparently, an admixture of bonds as well as a global diversification seems to help even in such extreme events. Of course, the exact portfolio proportions depend extremely on the available data and should therefore not be over-interpreted. Moreover, the next Black Swan (by definition!) could lie completely outside our known horizon of experience, and then all the lessons we learn from 1923 will quickly go up in smoke anyway.
Last but not least: I have already indicated that there are some data artifacts in the exchange rates and my confidence in the German data, especially from the extreme phase of hyperinflation in 1923, is not very high. Simply because there were such extreme increases in a very short period of time, I fear that no one has produced really reliable data comparable to today’s data quality. Therefore I could understand some frowning while reading this article and possibly some of you may have had the word “data mining” in mind.
Nevertheless, I hope this look beyond American data has been interesting. I look forward to your feedback on this, and I’m also happy to admit that I still see myself in the middle of the learning curve here.
If you want to be notified about new posts, please use your favorite RSS reader and subscribe to this blog using the RSS link in the main navigation bar or through this link.
]]>Interest Rates are rising fast. So it’s about time for a new version of the FI Simulator that is able to handle bonds as well. I will present all the new functions in detail in the next weeks. Here is already a brief list of new functions and changes:
I will present all the new features in detail in the coming weeks in the form of further case studies or with a focus on very specific historical anomalies.
Two remarks in conclusion: I have tried to make analysis-files created with the previous version 0.2 loadable. Afterwards these are now saved compatible with version 0.3. If there are any problems with this import, please drop me a hint. In addition, I have further optimized and rearranged the entire code base, i.e. there are many changes under the hood as well, which are not directly visible. So there is of course the risk that errors or deviations to the previous version have crept in. If anyone notices anything unusual here, I would also be very grateful for a hint, ideally together with a corresponding analysis file (anonymized and freed from critical financial data). Many thanks in advance!
I hope you will like the new features and I already look forward to further feedback and suggestions. If you want to be notified about new posts, please use your favorite RSS reader and subscribe to this blog using the RSS link in the main navigation bar or through this link.
]]>After a long summer break I am back today with a hopefully interesting topic. A few months ago I discovered the following book from 1993: “KĂ¶nnen Aktienkurse noch steigen? - Langfristige Trendanalyse des deutschen Aktienmarktes” by Gregor Gielen. In this book the author describes a historical index of the German stock market since 1870(!) even with dividend and inflation data, i.e. Gielen develops a complete performance index. I have updated this index with current data of the CDAX as well as inflation data of the German Federal Statistical Office until today and integrated it into the simulator as an alternative data basis.
One motivation for this was that the focus on the American S&P 500 data for the calculation of safe withdrawal rates has bothered me for some time. For one thing, the inflation data come from the U.S. consumer price index, i.e., they are not directly comparable to other countries. For another, the historical performance of the U.S. stock market is also slightly better than all other developed countries. Therefore, for a more realistic analysis of withdrawal rates in the non-U.S. region, other data are actually needed, but are not easy to obtain. There are some commercial providers of such data, but their prices are steep, and they usually carry a very restrictive license. An integration of such data into my free simulator is therefore difficult.
Nevertheless, I see the integration of long-term data of the German stock market now as a first step towards a better quantitative understanding of withdrawal rates outside the US economic area. Let us first look at the data itself and how I have tried to prepare it for the simulator.
When I first looked at Gielen’s nominal price data in Excel, I had to laugh at first. As you can see, you see nothing:
If you display the Y-axis logarithmically, then the picture becomes somewhat clearer:
The “tiny bump” in the data is the peak of the German hyperinflation in December 1923. There, according to Gielen, the stock index reaches a value of 6.3*10^14(!) in the then valid currency Papiermark. The cover picture of this article appropriately shows an original cash-bill valued at 10 billion Papiermark from October 1923. At that time, all Germans were mathematically a nation of billionaires, but unfortunately it was a time of poverty and extreme discontent, which ultimately then contributed to the next catastrophe from 1933.
The absolute values of the index from this period are certainly not exact and can only approximate the situation at that time. My first reaction was therefore to use these data only after the currency conversion to Reichsmark or Rentenmark in January 1924. After thinking about it for a while, however, I decided against it. On the one hand, one would no longer see all the effects of the First World War, on the other hand, such a hyperinflation is a rare but nevertheless a realistic extreme event and it would be interesting to examine how such an event would affect our thoughts on financial independence (and also we are again in a time of relatively high inflation). I therefore tried another way and converted all index and inflation values before December 1923 into the new currency Rentenmark. Since one Rentenmark was equal to one trillion Papiermarks, this means dividing all older index values by the factor 10^12, i.e. a 1 with 12 zeros!
The currency reform in 1948 in West Germany leads to further uncertainties in the data due to stock exchange closures and completely unclear ownership of the shares. Gielen nevertheless dares to construct a continuous index over this period and describes his approach in detail in his book. As a result, you can see in the index a drastic slump of over 90%(!) in mid-1948, which roughly matches the approximate exchange ratio of 10 Reichsmarks to one D-Mark that was applied to cash. This collaps of the index-value drastically shows the impact that World War II had on the German economy.
Gielen continued his index until September 1993, which was the editorial deadline for his book. For the continuation of this index, which was constructed as broadly as possible, into the present day, I did not use the DAX, but the CDAX Performance Index. Instead of the 30 largest stocks, this index contains all General Standard and Prime Standard stocks traded in Frankfurt, currently more than 400 stocks. The CDAX was introduced exactly like the Dax at the end of 1987 and there are even data series of the Bundesbank, which calculate this index back to the beginning of 1970. This raises the question of how best to combine Gielen’s data with the new CDAX data. An analysis of the back-calculated values 1970-1987 showed that their performance deviated strongly from Gielen’s index. I therefore suspect that this back-calculation only used the stock prices of the individual stocks included in 1987 but did not make a true simulation of the index with corresponding company shifts. However, I am not sure about this. Between 1987 and 1993, i.e. during the common period of Gielen’s index and the CDAX, the performance data agree relatively well, so that in the end I decided to use Gielen’s data until September 1993 and the CDAX from October 1993 on and to link it seamlessly to the end of Gielen’s index. For the inflation data from 1993 onwards, I have analogously taken the official data of the German Federal Statistical Office, so that in the end I get continuous and hopefully consistent data series for a performance index of the German stock market and for inflation from January 1870 to September 2022 in the current currency euro. By the way, if you want to have a look at Gielen’s index in detail, you can find most of the data after registering at https://histat.gesis.org. There you will also find other very interesting historical German data series including the respective source references.
Looking at the graphs of the nominal performance index and inflation, the extreme effect of hyperinflation is of course noticeable at first, even in the logarithmic representation. Nevertheless, the peaks in the index and inflation could already be a first indication that a (hypothetical) investor in this stock index may have been somewhat protected from the extreme effects of inflation, at least compared to investors in bonds, who were wiped out after the currency changeover in 1923. To examine this in more detail, let’s completely ignore inflation in the following chart and instead look at the real performance index, which tracks the inflation-adjusted returns. This index now looks comparatively harmless and is worth a more detailed look:
You can see lines of constant average return, which I have added somewhat arbitrarily for certain phases of the index. I have drawn the first line from the beginning of the index at the end of December 1869 until the outbreak of World War I in July 1914, where the index achieved an average performance of 5.46% annually after inflation. Between July 1914 and the second currency reform in July 1948, I have drawn another performance line, showing above all the effect of the two world wars and the hyperinflation. Not surprisingly, the average performance of 1.41% is significantly smaller there and it would even have been negative if I had included the over 90% collapse due to the 2nd currency reform there. After the currency reform until about the beginning of 1960, I have drawn in another phase, which describes the so called German “Wirtschaftswunder” or “economic miracle”. During this period, an investor would have achieved a whopping 31.60% annual return after inflation. After that, logically, the curve flattened out again and between the beginning of 1960 and today achieved an average performance of only 4.21%, significantly less than the average performance of the U.S. stock market with about 6.6% annual return after inflation. As mentioned above, however, the definition of such periods is highly subjective. If one takes the performance from the beginning of 1960 until today, i.e. including the German economic miracle, then this would give an annual return of 8.06%, for example.
What surprised me most about this data, however, was the overall performance of the index from 1870 to the present. Despite losing two world wars and having two failed currencies, a (hypothetical) investor in this index would still have earned an annual average return of 3.94% after subtracting inflation over the entire period!
I have added this data to the simulator for a few days. They can be accessed via the “Stock Market Data Settings” tab. In addition to the default value of the US S&P 500 and inflation data from Rober Shiller, the data series described above with the performance index from Gregor Gielen and the CDAX together with German inflation data can now be used there as an alternative selection.
To begin, let’s look at how our standard trinity example looks with this price data. To use all available data points, I set “Use data starting from” to 1870, since we now have even one year older data for Germany:
The historical simulation of the portfolio development over time now looks rather scary: Our monthly withdrawals of $1,600 from our stock portfolio of $480,000 according to the 4% rule apparently lead to disaster very quickly with the default settings:
If you look at the left graph of withdrawals, Earnings and Expenses, you can quickly see the cause of the problem: We start the simulation in October 2022. In the historical worst case (according to the right graph corresponding to a virtual start date of our stock history in February 1914), the annual expenses from July 2032 (corresponding to the virtual date of December 1923) would suddenly increase to gigantic orders of magnitude, which make all income and expenses before that appear so tiny that they are not even recognizable on the graph. Obviously, we are just seeing the effect of the hyperinflation of 1923 here. We remember that by default, the switch “Expenses increase with Inflation” is set in the simulator. This switch now ensures that we want to maintain our monthly expenses of $1,600 even through a hyperinflation, which then leads to the simulator withdrawing extreme amounts from our deposit every month from then on. Despite the above described real 3.94% return of the German stock market in the long-term average, a 4% rule is of course not sustainable here.
Nevertheless, let’s have a look at the exactly calculated withdrawal rates on the 2nd tab:
The long-term safe withdrawal rate of the German stock market for a 30-year withdrawal period is apparently only 1.3%. If we accept a probability of bankruptcy of approx. 2.5% analogous to the traditional 4% rule of the U.S. market, we would thus only be allowed to declare a 1.5% rule for the German stock market. If we enter the corresponding monthly expenses of approx. $600 back into the first tab as “Expenses from FI” we see the following picture:
Although there is a remaining probability of bankruptcy and the worst case therefore remains negative after 30 years, the majority of historical developments now actually lead to a positive end result. This is remarkable because, in purely mathematical terms, we would be able to completely compensate for even a renewed hyperinflation analogous to 1923 by increasing the monthly withdrawals accordingly without going bankrupt (at least in the vast majority of cases). However, at this point I would like to point out the following: The calculations that the simulator has to perform here are numerically much “shakier” than the normal cases that we have calculated so far. After all, the numerical values before and after hyperinflation are 12 orders of magnitude apart. It would therefore not surprise me if there are at least significant rounding errors here. In the worst case, there are even unrecognized calculation errors here, which only manifest themselves in such extreme situations.
Furthermore, we are talking about a very artificial model here: In real life, such a withdrawal plan would be prone to failure because the stock exchanges would have been temporarily closed and regular trading was often not possible at all. Not to mention all the other human tragedies and catastrophes of that time, which are hidden behind these bare numbers.
On the other hand, the results of the simulator here seem basically plausible to me. However, I would be very happy to receive comments, suggestions how you see this.
As a last step in this article, we now set the switch “Real Monetary Values w/o Inflation Effect” to be able to focus on the real returns. All effects of inflation and hyperinflation in 1923 are now hidden. Therefore, the simulator result actually looks relatively “normal” again now. If we look at the “best case” instead of the usual worst case by pressing the respective button, we now see the following picture:
As might be expected, the best-case would start shortly after the completion of the second currency reform in October 1948 and would go along with the complete “Wirtschaftswunder”.
Hopefully, this article will be the starting point of a somewhat longer series. As indicated above, I have a medium-term goal of calculating safe withdrawal rates much more generally, i.e., without the focus on U.S. equities and U.S. inflation. One of the next steps towards this will also be to allow a separate selection of stock and inflation data in the simulator. For example, it would be interesting as a German user of the simulator to always use the German inflation data, since all expenses are ultimately influenced by them. Completely independent of this, however, this German investor can then decide whether he or she would prefer to use a stock portfolio with US or German stocks. From the comparison of corresponding withdrawal rates, some interesting information should be derived, not least an estimation of safe withdrawal rates of a real globally diversified portfolio.
At this point I would also like to start a small request for support: The speed with which I am progressing here is limited by the access to corresponding price and inflation data. So if any reader of this blog knows a good source for historical inflation and index data, e.g. for other European countries, I would be very happy to receive a hint. Ideally, the data should also be available as monthly data to enable precise calculations and, of course, there should be no licensing problems in using the data. An integration of such data series is then relatively straightforward and would then also allow users from these countries an analysis with reference to their home stock market or at least their home inflation data. Thanks a lot in advance!
This brings me to the end of today’s article and I hope that the content was interesting. If you want to do your own analysis on withdrawal rates of the German stock market, you can do it now in the simulator. If you want to ignore the hyperinflation, you can simply restrict the price history to the years from 1924 onwards, then the results will not look quite so scary. Feel free to share interesting findings as comments below, I would be happy.
If you want to be notified about new posts, please use your favorite RSS reader and subscribe to this blog using the RSS link in the main navigation bar or through this link.
]]>Today, in another virtual case study, I would like to show how withdrawal rates can be determined that preserve the initial capital. Such a calculation is useful, for example, when one wants to protect assets over generations. As usual, I recommend running the case in parallel on the simulator. If you want to load the complete example directly into the simulator, you will find the link at the end of this article.
Clara is a successful entrepreneur and has now sold her company at the age of 60 to take her well-deserved retirement. As she has been self-employed all her working life, she has not paid any contributions into the public pension fund and would therefore like to cover her living expenses entirely from withdrawals from a broadly diversified equity portfolio. Through the sale of her company, this portfolio has now grown to a value of 3.2M$.
In order to also cover the longevity risk, Clara therefore runs a simulation over 40 years, i.e. until her calculated 100th birthday:
We now look directly at the calculated withdrawal rates on the 2nd tab:
Clara would be able to withdraw inflation-adusted $7,673 per month until her 100th birthday without going broke even once in the last 150 years. A nice result, which should allow her therefore a comfortable retirement.
Nevertheless, a worst-case scenario would result in her portfolio being completely depleted at the end of the 40-year simulation period. However, Clara would like to manage her assets in such a way that her two children are also provided for after her death. She therefore wonders if there is a way to calculate monthly withdrawal rates in such a way that the portfolio is not completely depleted at the end but instead keeps a certain target amount at the end. The simulator offers the field “capital preservation”, which allows exactly this. Clara sets the capital preservation to 100%, i.e. at the end of the observation period the portfolio should remain at the initial level even in the worst case. If we look at the calculated withdrawal rates, we see that the difference is not that dramatic:
Instead of $7,673, Clara would still be able to withdraw $6,802 per month and maintain her capital in full. Let’s now enter the $6,802 in the “Expenses from FI” field and look at the prediction of the portfolio development. In the worst case, the depot balance is no longer zero but in this case nominally 6.8M$. The keyword “nominal” already indicates that here the inflation-related increase must be considered. If we hide this with the switch “Real values without inflation increase”, we see the following picture:
This means that the final balance of the portfolio at the end of the simulation period is again exactly real 3.2M$ in the worst case. As desired by Clara, her assets are therefore preserved in real terms and she has done everything to secure her assets for the next generation.
If you want to follow the example directly, you can find the corresponding json file here. If you want to be notified about new posts, please use your favorite RSS reader and subscribe to this blog using the RSS link in the main navigation bar or through this link.
]]>Today, in another virtual case study, I want to show pitfalls that can happen when calculating withdrawal rates with high future incomes. As usual, I recommend running the case in parallel on the simulator. For those who want to load the full example directly into the simulator, the link is at the end of this article.
Ben turned 55 this year and has been considering retirement for some time. He has already saved up a nice stock portfolio during his working life, currently worth 500,000â‚¬, and is also entitled to a pension. More importantly, however, he has a large life insurance policy that will bring him a payout of a round million $ on his 65th birthday in January 2032. Ben now wants to calculate precisely what level of spending this constellation will allow him if he retires now. Ben chooses 45 years as the simulation period to also cover the longevity risk, i.e. the simulator then calculates monthly expenses that would theoretically last until his 100th birthday.
Ben therefore makes the following entries in the simulator:
At first glance, the forecast of the portfolio development already looks encouraging:
The income and expenses overview is of course dominated by the life insurance payout in 10 years. The $1,600 expenses per month entered by default would already be fully covered by his public pension from 2034 onward and it can be seen that his portfolio would grow strongly in all historical trajectories. So there is obviously a lot of potential here to increase the monthly spending level significantly. For this purpose, we now look at the calculated withdrawal rates in the 2nd tab:
Accordingly, Ben could withdraw inflation-protected $2549.16 per month from his portfolio starting immediately and, according to all historical market trends, would not run the risk of going broke prematurely. Nevertheless, Ben is somewhat disappointed. He had actually expected that the large payout on his life insurance policy in 2032 would allow him to take out a much higher withdrawal rate. What happened here? Let’s enter the $2549.16 as “Expenses from FI” and take a closer look at the forecast of the portfolio development:
Even in the worst case shown, Ben would still have 7.3Mâ‚¬ in the portfolio at the end of the simulation period. However, the calculated withdrawal rate in the worst case should actually ensure that the portfolio is completely depleted, i.e. that it ends up exactly at zero at the end of the simulation period. Is Ben still giving away potential here?
The solution lies in the switch “No temporary negative portfolio”, which is always set by default. If we go back to the calculation of the withdrawal rates and remove this switch, the calculated values will immediately change significantly:
So suddenly even the withdrawal of $4252.37 per month would be possible without any risk of bankruptcy? Of course, that would be much more to Ben’s taste. However, there is a catch. We can see it if we now enter these $4252.37 as “Expenses from FI” again and look at the portfolio development: Now the worst case in 2067 actually ends at zero as expected, but the pitfall lies in the portfolio development shortly before the payout of the life insurance in 2032. A zoom into this area looks as follows:
You can see nicely the payout of the life insurance in January 2032, which leads to a jump upwards in all historical portfolio developments. In the worst case, however, the portfolio becomes negative until the payout arrives, i.e. in this phase Ben would not only have to sell his portfolio completely, but he would even have to borrow money from the bank at the interest rate that corresponds to the current return rate of the stock market. This sounds a bit crude, of course, and is simply because of the way how these withdrawal rates are calculated mathematically.
Ben therefore faces a dilemma: If he chooses the higher withdrawal rate, he would have to borrow money at a certain point in time, but he would then be able to deplete his portfolio completely and would have also optimized his standard of living. If he chooses the lower withdrawal rate, he can be sure that his portfolio will never become negative. However, then he will not be able to use his entire portfolio and will feel that he is living more frugally in retirement than is actually necessary.
Unfortunately, there is no simple solution to this problem and Ben has to find a compromise between these two possibilities. For all readers, it should at least remain in the back of your mind that the switch “No temporary negative Portfolio” exists at all. In most cases, it will show no difference in the calculated withdrawal rates. However, if large cashflows are expected in the future, it is worthwhile to check if there are any differences. It is also important to note that all publicly available FI calculators that I know of do not have this option and always show the higher withdrawal rate. If one does not know the effect shown here, trusting their numbers therefore might be a little dangerous.
If you want to directly load the example analysis you can find the necessary json-file here. If you want to be notified about new posts, please use your favorite RSS reader and subscribe to this blog using the RSS link in the main navigation bar or through this link.
]]>I have received a lot of feedback about the first version of the simulator, thanks a lot for that! Some of it has already been incorporated into the new version, which is “live” since today. Here is a first compact overview of all new features:
I hope you will like the new features and I already look forward to further feedback and suggestions. If you want to be notified about new posts, please use your favorite RSS reader and subscribe to this blog using the RSS link in the main navigation bar or through this link.
]]>With this article I would like to start a semi-regular series of virtual case studies to illustrate working with the simulator using tangible examples. Any resemblance to living persons would be purely coincidental, I am mainly interested in illustrating a certain problem or phenomenon.
Therefore, let us start today with Ana. Ana has just turned 25 and successfully finished her college degree a few weeks ago. She is now starting her first “real” job as a project manager in a large corporation. Due to the somewhat “shaky” pension system in Germany, Ana is a little bit concerned about how to provide sensibly for the future and therefore wants to invest part of her salary in a broadly diversified stock ETF from the very beginning. From her already decent starting salary, she would like to automatically invest $500 per month as a savings plan and sets up a suitable securities account and a savings plan for this purpose. Although Ana is just at the beginning of her career, she is also interested in the topic of FIRE and would like to better understand whether she really has a chance of retiring before the “normal” retirement age of 67 (in Germany) or if this is just a distant dream.
Ana uses the simulator on Predict-FI.com to get to the bottom of this question. As usual, I would now recommend all readers to open the simulator in a new browser tab and simply “play through” the case while reading in parallel. If you want to start with the “final” analysis you can find the download link at the end which you can easily import via “Load Analysis”.
Ana’ current portfolio value is still at zero, since she was barely able to finance her studies up to now. So unfortunately the 480,000â‚¬ value from the Trinity start example goes away and is replaced by a 0. The monthly savings rate should be $500, as described at the beginning. Ana enters this in the field “Savings until FI”. Next to it, an annual dynamic can be entered. Ana is quite ambitious and would like to take a few more steps on her career ladder in the future. She therefore expects corresponding salary increases, which she would also like to use to steadily increase her savings rate. For this purpose she carefully sets an increase of 2% per year and enters this as well. She leaves the fields “Expenses from FI” as well as “Cap. Preservation” at their default level.
She wants to start the simulation in July 2022, so she can leave the field unchanged. With the field “Simulation Over” she hesitates. The average life expectancy is rising continuously due to medical advances, and after a brief Google search Ana finds out that women born in 1997 like her have a purely statistical life expectancy of just under 95 years. Ana therefore decides to set the simulation period to 95 minus her current age, i.e. 70 years.
A look down now shows a rather scary portfolio development in the worst case scenario, but Ana has not yet set the most important slider for her question. She is not planning to retire with her empty portfolio today, but would like to know what the situation will look like when she starts thinking about FIRE at the age of 50, for example. For this purpose, she now sets the “FI Date” to July 2047, i.e. 25 years into the future until she is 50. In other words, she plans to keep her savings plan running consistently for the next 25 years and hopes that the stock market will continue to yield an average return of around 6% per year after inflation. With an investment horizon of 25 years, she also should be able to neglect any temporary ups and downs in the stock market. An early market crash would even play into Ana’s hands, because she can then buy even more shares of her ETF for her monthly $500 due to the so-called cost-averaging effect. Her parameters now look like this:
Let’s now take a look at the resulting situation:
Let’s start with the overview of withdrawals, earnings and expenses: We see now for the first time the monthly savings rates in green, which run until June 2047. From July 2047, the monthly expenses (in the default case still left at $1,600) start, which from then on are completely covered by withdrawals from Ana’s portfolio. At first glance, the result looks a bit sobering: In the worst-case scenario, inflation ensures that in 2047, instead of the original $1,600, almost $4,500 per month are now nominally necessary if one wants to maintain the purchasing power of the $1,600. Ana’s portfolio in this scenario in July 2047 is still worth $448,289, i.e. even in this worst of all possibilities Ana would be at least almost a half millionaire at the time of her 50th birthday. But unfortunately, this portfolio is not enough to actually allow Ana to have inflation-protected withdrawals of $1,600â‚¬ per month until her 95th birthday; rather, in the worst case, she would be broke starting in November 2062.
However, if we look at the median as an overview over all scenarios, we see that it is still positive at the end of the simulation period, i.e. there is a probability of more than 50% that Ana could stop working on her 50th birthday and still be able to withdraw the $1,600 until her statistical end of life of 95 years. And so far we have not taken into account any other income streams such as pensions.
But now we can run through some scenarios. What if Ana would work until 55 instead of 50? To do this, she sets the “FI Date” to July 2052 instead. The results are immediately updated for all histories and we now already get a completely different picture:
The final value of all scenarios are now completely above the zero line. Even the worst-case scenario would end up with a final portfolio value of over 3 M$! Ana’s heirs would certainly be very happy about this, but of course we let Ana optimize her own situation first. I.e. Ana now looks at the corresponding exactly calculated withdrawal rates on the 2nd tab:
Ana could withdraw $1,974 monthly with a bankruptcy probability of 0%. We now enter this value again in the field “Expenses from FI” and see the following overview:
Let us briefly summarize where we are: Ana starts investing $500 per month in a broadly diversified stock ETF at the age of 25. At the age of 55, Ana would very likely be in a position to retire, as she can withdraw almost 2000â‚¬ per month purely from the stock portfolio, inflation-protected, until the end of her life.
However, we have left out one more aspect that improves the picture even more. At least in Germany, Ana will have made monthly contributions into the pension fund during her working life. The resulting pension points in the German system are calculated from the average salaries, i.e. if Ana were to receive exactly the average earnings, she would be credited with exactly one pension point per year. As a project manager, Ana should actually earn above average, so for this case study we assume 1.5 pension points credited to Ana each year. For our non-german readers: These 1.5 points would translate into an additional monthly pension allowance of $54 each year. We enter this in the horizontal tab “Input pensions and additional cash flows”, which we expand to do this. (Details about this tab can also be found in the following article: FI Simulator 3 - Additional Cash Flows). We enter the following income there, since Ana currently has no pension points and will receive the unreduced pension at 67, thus from July 2064:
After pressing “Process cashflows and pensions” the picture changes again significantly:
Ana sees that from the start of the pension, a large part of the expenses are now covered by the pension and the withdrawals from the portfolio can therefore become significantly smaller. This leads to the fact that even in this worst case scenario shown, the portfolio is still at 3.5M$ in the end. We can therefore see, after another look at the exactly calculated withdrawal rates in the 2nd tab, that Ana can even withdraw $2,563 per month from 55 instead of $1,974 due to the later pensions. We enter this back into the overview and come to the conclusion of our analysis:
Even in the worst of all cases, therefore, Ana could still be relatively comfortable considering FIRE from 55 with a monthly withdrawal of around $2563. In all likelihood, however, Ana will even find herself in one of the better options. After this analysis, Ana is absolutely certain to start the savings plan as she intended to do. Of course, she does not yet know now whether she will actually start thinking about retiring at the age of 50 or 55. But by starting the savings plan early, at 25, she has laid the foundation for thinking about such scenarios at a later stage. In any case, she will not be forced to continue working until the start of the pension at 67, but will in all likelihood have the financial freedom to think about other alternatives earlier, whatever they may be.
If you want to replay this analysis you can find the json file here. If you want to be notified about new posts, please use your favorite RSS reader and subscribe to this blog using the RSS link in the main navigation bar or through this link.
]]>After a somewhat lenghty preparation phase I would like to announce today the “official” start of Predict-FI.com. As the name suggests, just another page that deals with calculations around financial independence. This means we will cover topics like Safe Withdrawal Rates, Sequence-Of-Return-Risks, Inflation-Effects, etc.
In contrast to many other similar pages, this blog however, will only play a supporting role. The leading role of Predict-FI.com will be the attached Simulator that allows everybody to carry out his oder her individual analysis regarding financial independence.
Anybody who is concerned about data privacy aspects here (and who wouldn’t?) should carefully read the respective Data Privacy Notes. Some background information about this project as well as about me personally you can also find on the “About”-Page.
This blog aims to publish roughly one article per week that covers a virtual case-study in the FI-context with the simulator and that hopefully brings across some insights or challenges around a particular topic or problem. At the same time, I look forward to your feedback whenever you execute your own analysis with this tool. Feel free to use the comments in the blog for this (also possible anonymously). You can also subscribe to this blog using the RSS link in the main navigation bar or this link.
This simulator was developed completely by myself and is therefore pretty much focused on my own questions I wanted to answer. Nevertheless I am very open to receive good ideas to extend its functionality and I am also pretty certain, that this beast still also contains a few bugs that hopefully see the light of day this way.
As an introduction into the tool, I would encourage everybody to have a look at the following documentation pages, which are
All articles are also linked on the homepage as well and should serve as a good starting point into using the simulator. I would actually recommend to open the simulator in a parallel tab and just try it out while reading them. Hopefully some of the concepts and ideas should then already become clearer. Since I have worked on this toolset for several months, I am not in the best position any longer to recognize serious usability issues. If you see something that does not make sense from your point of view, please don’t hesitate to let me know in the comments.
Last but not least: I can not really estimate how many people are actually interested in using such a tool. However, if too many try to use it at the same time, I fear that cloud istance that is currently hosting this thing could reach its limit. Until this is the case, however, I would like to pop the virtual Champagne bottle here đźŤľ and wish us all some good discussions and hopefully also some insights.
Best