Deploying A VIX-Based Volatility Frown System [Code Included]
We managed to put the VIX to work through a creative quantitative strategy that aims to capture high premiums on a daily basis.
The core of this strategy is to systematically collect high premiums on 0 days-to-expiration SPX options. Without using any historical data, we were able to create accurate synthetic option chains and also develop a real-time monitoring approach that shows us the live, dynamic probability of our position needing to be adjusted or closed.
The Volatility Problem
We want to build out our own, real-time options chain with prices that would closely match reality. Since SPX Options are European-Style, we can get a solid approximation of prices from just using the Black-Scholes model. By entering the index price, implied volatility, and a few other parameters, we can arrive at a price that will be close to the price offered by the market. However, what do we input for volatility?
When a broker quotes implied volatility, it is usually their own estimate backed out from their chosen models, but we want more control of this process and would prefer our own proprietary volatility. To help us solve this problem, in comes the VIX.
The VIX is an accurate measure of how volatile the S&P 500 will be on an annualized basis. By using real-time prices from a strip of SPX options, the VIX has no delay in its dissemination of implied volatility. For a better understanding, refer to a prior post in which I go over how useful the mechanics are:
Taking a VIX value of 30 for example, this implies that over the next year, the S&P 500 will have a realized volatility of 30%. We can adjust this value by time to get the volatility based on our desired option contract. So, if we want to estimate the realized volatility of the S&P 500 for the next trading day, we would do:
This translates to a 1.88% daily realized volatility, so we can say: if the VIX is at 30, the S&P 500 will have a 1.88% volatility in the next day. To extrapolate any number of days from this would just need you to multiply that 1.88% by the square root of the number of days you need.
While this approach is fine for options that expire in close to 30 days, our goal is to get our own implied volatility for options that expire in 0 days. So, we have to get a bit more creative:
Implementation
To better understand how this system works, it may help to see simplified code-snippets as we move along. The full code is linked at the bottom of the post. For those who do not code, you will still be able to follow along:
First, let’s load our data and assign the necessary parameters: