Allocating Wealth Through Time – A Goals-Based Method
Posted on July 28, 2022 by Franklin Parker in R bloggers | 0 Comments
[This article was first published on R – Franklin J. Parker, CFA , and kindly contributed to R-bloggers ]. (You can report issue about the content on this page here )
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Share Tweet
This is the supplement to Chapter 4 of my book, Goals-Based Portfolio Theory, demonstrating the techniques and offering some code examples. If you are reading this having not purchased/read the book, you are missing much of the narrative. You can pick up a copy from Wiley , Amazon.com , or Barnes & Noble.
Most of the time, as practitioners, we have a multi-period view of markets and investing. That is, rather than generate long-term capital market assumptions (e.g. SPX yielding an 8% return with 16% volatility over the coming decade), we may wish to express a view that a recession is forming this year, with a recovery the year after, then a return to the long-run average the year after that.
Unfortunately, the standard optimizers in the industry do not allow for a multi-period view. Here we will explore a simple example of how to optimize a goals-based portfolio across multiple periods (for a fuller treatment of the math and theory, you’ll have to buy my book!).
Here is a basic outline of the approach:
Develop capital market expectations for each period (in our example, we will consider three periods into the future).
Sample each period’s portfolio distribution (which will be determined by the weights of investments in that period) and generate potential “paths” for the portfolio to follow through time.
Combine these “paths” to generate an estimate of the probability of failing to achieve the annual return requirement required by the goal.
First, let us load our packages and build the necessary functions.
library(tidyverse) library(nloptr) # Kronecker product of a list of vectors, relies on (A %x% B) %x% C = A %x% (B %x% C) list_kronecker.f