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 Find Cheap Options to Buy and Expensive Options to Sell
I really enjoy your work. Thank you very much for sharing
Thanks Jay! Appreciate that mate.