New Version 0.6 of the FI Simulator released
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!
- Uwe