Introducing Parachute Plots for Visualizing 3-Fund Portfolios

Dane Van Domelen
4 min readNov 23, 2019

A generalization of “efficient frontier” plots

Parachute plots

I’m a statistician who enjoys programming and trying to beat the stock market. Over the past few years, I developed an R package called stocks with various functions that I think are useful for analyzing and visualizing investments.

I recently finished a major overhaul of the package, which included cleaning up the code, making everything a bit faster, and adding some new visualization tools. I stumbled upon an interesting type of plot that I wanted to highlight in blog form. I call it a “parachute plot” because it looks like a… well you know.

Here’s an example with some popular tech stocks:

The plot shows mean vs. standard deviation (of daily gains) for this 3-fund portfolio across all possible allocations, based on historical data from Nov. 7, 2013, to Nov. 22, 2019. The corners are special cases where 100% is allocated to one fund, and I have the S&P 500 ETF SPY on there for comparative purposes.

Basically, 100% NFLX wins out in terms of raw returns, while NFLX/FB offers some lower volatility options. Importantly, all combinations of these three tech stocks results in a portfolio with > 2x the volatility of SPY.

What’s special about this?

It shows the “efficient frontier” and more

You’ve probably seen a mean vs. SD plot like the one above (often called an “efficient frontier” plot), but chances are it only showed individual funds and (maybe) 2-fund portfolios.

Actually, Portfolio Visualizer does support three (or more) funds, but it only shows the max-return allocation for each level of volatility. Here’s an example:

First off, note that the scales are different here — I think they’re showing annualized growth and volatility, while I’m showing daily.

This plot is great because it shows the allocation that maximizes returns at each volatility. But it doesn’t show the full picture, i.e. the mean and SD for all allocations.

If you compare the first plot to the second, you’ll notice that the second shows a subset of information from the first. Namely, it shows the corners, the upper-left outline, and one edge of the parachute.

By omitting the full parachute, a traditional efficient frontier plot fails to show:

  • The performance of allocations not on the frontier (which is most of them)
  • The performance of each 2-fund portfolio

It generalizes to any two metrics

There are good reasons to use mean and SD for portfolio optimization, but in some ways other metrics are actually more meaningful.

For example, an interesting alternative to the first plot is one that shows compound annualized growth rate (CAGR) vs. max drawdown (MDD). The premise is the same, we want high CAGR and low MDD.

This time, I’ll make my parachute plot interactive using plotly.

This plot leads to generally similar conclusions. 100% NFLX still wins out in terms of growth, but here I think adding a FB allocation looks less appealing than it did before. You only get a small reduction in MDD, while CAGR goes down steeply.

A practical example with leveraged ETF’s

I’ve written a lot about leveraged ETF’s on Seeking Alpha, and I think they’re really useful tools for portfolio optimization.

Here, I’ll use a parachute plot to illustrate how leveraged ETF’s let you “lock in” a Sharpe ratio that usually requires sacrificing raw returns, and crank the dial up.

The red parachute is for SPY and two bond funds, and the blue simply swaps out SPY for UPRO, a 3x daily S&P 500 ETF.

On the red parachute, we see that allocating to the bond funds lets you increase the Sharpe ratio drastically, but at a price: lower CAGR.

On the blue parachute, we see that UPRO stretches one end of the parachute upwards, allowing the high Sharpe ratios to map to much higher CAGR’s. It’s a beautiful thing!

Summary

The parachute plot is a broadly useful tool, because it provides a means of visualizing individual funds, 2-fund portfolios, and 3-fund portfolios all on the same graph, and for any two performance metrics, not just mean vs. SD.

R code

Each of the above graphs comes from a single function call in R. Here’s the code for the last parachute plot — if you can see how it works, you can easily recreate the first two.

library("stocks")
plot_metrics_123(
formula = cagr ~ sharpe,
tickers = list(c("VWEHX", "VBLTX", "SPY"),
c("VWEHX", "VBLTX", "UPRO")),
from = "2010-01-01",
plotly = TRUE
)

--

--