Find Cheap Options for Effective Crash Protection Using Crash Regressions

Posted on May 26, 2020 by Robot James
2 comments
872 Views

One way we can quantify a stock’s movement relative to the market index is by calculating its “beta” to the market.

To calculate the beta of MSFT to SPY (for example) we:

  • calculate daily MSFT returns and daily SPY returns
  • align the returns with one another
  • regress MSFT returns against SPY returns.

This shows the procedure, graphically:

library(tidyverse)
library(ggpmisc)

msftspyreturns %>% 
  ggplot(aes(x = spy_returns, y = stock_returns, color = date)) + 
    geom_point() +
    geom_smooth(method = 'lm', formula = 'y ~ x', color = 'red') +
    stat_poly_eq(aes(label = stat(eq.label)), formula = 'y ~ x', parse = TRUE) +
    ggtitle('Stock returns vs SPY returns')

The formula in the top left shows the slope of the linear regression is 1.08. So we’d say that we have estimated the beta of MSFT to be 1.08.

To make this estimation we used all available daily return observations back to 2000.

But we don’t have to… 

If we’re looking to buy “out of the money” put options for crash protection then we’re really just interested in the behaviour of the stock during severe market downside.

So, following Paul Willmott’s Crashmetrics approach, we might choose to only do the regression on days when SPY decreased by more than 4.5%.

msftspyreturns %>%
 filter(spy_returns < -0.045) %>%
  ggplot(aes(x = spy_returns, y = stock_returns, color = date)) + 
    geom_point() +
    geom_smooth(method = 'lm', formula = 'y ~ x', color = 'red') +
    stat_poly_eq(aes(label = stat(eq.label)), formula = 'y ~ x', parse = TRUE) +
    ggtitle('Stock returns vs SPY returns for SPY decline larger than -4.5%')

In this analysis, we’ve concentrated only on extreme negative returns.

We estimate the beta of MSFT under crash conditions to be 1.1, which is slightly higher than the estimation for the full sample.

Historically, MSFT has traded similarly with respect to the market index in market crash conditions as it does in more benign times. It’s probably a reasonable choice for buying put options for crash protection.

 

But, what if we could find stocks that had a high beta to the index during big down days, but lower betas during more benign market moves?

Buying put options in these stocks may get us good protection in a crash, for a reasonable price.

For each current S&P 500 constituent we will calculate the beta to SPY ETF returns for:

  • all available daily observations
  • days in which SPY declined more than 4.5%
library(broom)

full_betas <- spx_returns %>%
  inner_join(select(SPY_returns, date, spy_returns = c2c_returns_simple), by = 'date') %>%
  group_by(ticker) %>%
  group_modify(~ broom::tidy(lm(c2c_returns_simple ~ spy_returns, data = .x))) %>%
  filter(term == 'spy_returns') %>%
  select(ticker, beta = estimate)

crash_betas <- spx_returns %>%
  inner_join(select(SPY_returns, date, spy_returns = c2c_returns_simple), by = 'date') %>%
  filter(spy_returns <= 0.045) %>%
  group_by(ticker) %>%
  group_modify(~ broom::tidy(lm(c2c_returns_simple ~ spy_returns, data = .x))) %>%
  filter(term == 'spy_returns') %>%
  select(ticker, beta = estimate)

We’re most interested in stocks which have relatively high betas in crash times and lower betas in normal times…

Next we:

  • calculate convexity as the difference between the crash beta coefficient and the full sample coefficient for each stock
  • sort by convexity descending.

This gives us a shortlist of stocks to look at as candidates to buy put options as portfolio crash protection.

Let’s look at WYNN, the casino and hotel company:

With the limited data we have available (we threw out most of our data!) it appears we may get effective downside protection by buying WYNN puts.

You might debate whether to force the regression to go through the intercept – we chose not to, but I could argue both points.

You might use this kind of screen in conjunction with other factors which are predictive of option value, to find cheap portfolio hedges.

The Google Sheets document below lists all data for the S&P 500 as at 25/5/2020:

If you liked this you’ll probably like these too…

How to Hedge a Portfolio with Put Options

How to Find Cheap Options to Buy and Expensive Options to Sell

How To Get Historical S&P 500 Constituents Data For Free

 

(2) Comments

JayB
May 27, 2020 at 11:33 pm

I really enjoy your work. Thank you very much for sharing

May 29, 2020 at 3:04 pm

Thanks Jay! Appreciate that mate.

Leave a Comment