[PLUS] Calculating & Interpreting the Implied Volatility Term Structure Spread

This article is the product of a user's request (we love requests!) who asked to write a demonstration of how to calculate Bitcoin's Implied volatility term structure slope using DeriBit options. Specifically, we will look at the 1-month to 6-month implied volatility term structure slope, which is also known as the "volatility term spread", and is calculated as the difference in implied volatilities between options with a 1-month expiration and options with a 6-month expiration, but using the same underlying asset and strike price. Analyzing this slope can provide insights into market expectations regarding volatility over the short term (1 month) versus the medium term (6 months).

Insights Gained
Interpreting the 1m-6m implied volatility term structure slope can provide the following various insights:

1. Short Term vs Medium Term Expectations - If the 1m implied volatility is higher than the 6m implied volatility, it suggests that the market expects more price volatility in the short term compared to the medium term. This could indicate anticipation of near-term events or developments that could lead to price swings. Conversely, if the 1m implied volatility is lower than the 6m implied volatility, it may signal greater stability in the short term.

2. Upcoming Market Events - If the 1m-6m slope increases significantly around a specific date, it could indicate that the market expects significant price movement due to an upcoming event, such as a regulatory announcements, legislative votes or judicial outcomes. It could also be technology related pertaining to certain upgrades to blockchain technologies. Given the global nature of cryptocurrency, it could also be geopolitically related.

3. Market Uncertainty - Generally, a steeper slope (higher 1m implied volatility relative to 6m implied volatility) reflects heightened market uncertainty or potential news-driven volatility in the short term.

4. Volatility Impact - Traders and investors can use this slope to assess the potential impact of a near-term event on implied volatility. If the slope is steep, it suggests that the event could lead to more significant volatility in the near term.

5. Option Strategy Selection - Traders might adjust their option strategies based on the slope. For instance, they might consider short-term strategies that benefit from increased volatility when the slope is steep, or longer-term strategies when the slope is flatter.

6. Market Sentiment - The slope can provide insights into market sentiment over different time horizons. A steep slope might indicate short-term pessimism or uncertainty, while a flatter slope might reflect longer-term stability.

The Code
The code we have built to demonstrate how to calculate the ATM volatility term slope is dynamic and relies on multiple functions to get the latest data. We use ACTUAL trade activity for a given ATM strike in order to calculate the IV. (not implied volatility based on the bid/ask spread). Because we use actual transaction data, there is the possibility that no activity has occurred for a certain date at either the 1M or 6M strike, and therefore we could not calculate an actual 1m-6m spread. As always, we comment EVERY LINE of code so that you can understand what it is doing and modify to fit your purpose. In a nutshell, here is what we are doing in the code:

1. Get closing prices - we first need to determine the last X number of days of closing prices for BTC. (we use 10 in the script). We need closing prices in order to determine what is the At-the-money (ATM) strike that is closest to this price for the given date. The get_closing_prices() function will return the date and the closing prices for the number of days passed.
2. Get option chains - We pull from DeriBIT all option chains that are currently active, meaning they are trading today/live. The next step is to determine, based on the maturity dates, which option maturities closest match end dates that are 1month (30 days) and 6months (180 days) away. We create a two new dataframes of strikes, one for the 1month options and one for the 6month option chains. Ultimately, we have to find the IV spread between the 1m and 6m options of the same type (put/call) and strike. So we create a merged dataframe where strikes are both in the 1month and 6month chain and disregard the rest
3. Find ATM strikes - This is a crucial step given the volatility of an asset like BTC can move drastically day over day, and so therefore what could be "ATM" one day could be "OTM" the next. We want to match and determine which option strikes are closest to the ending price of BTC across a series of days (the ATM strikes). We do this by taking our list of option chains, and using a function to determine which strike is closest to the closing price, which creates a new list of strikes that are ATM. Afterwards, we create a new dataframe called atm_df, which only includes the ATM strikes from the time period.
4. Get Implied Volatility Spreads - Now that we have our ATM strikes based on closing prices and the option instruments that align to those prices, we need to get the actual IV data from transactional data for a certain date. We do this in a function called get_all_IV(), which takes 2 option instrument names and a unix date timestamp to lookup transactional data. We take the IV from the last transaction for that given day for both the 1m option and 6month option, and then subtract the two to arrive at the spread between the two. We do this for both puts and calls of the same strike. Those spreads are then averaged together to arrive at the ATM term structure spread for the given date and we save those results in a dictionary where the unix timestamp is the key and the average spread is the value.
5. Plotting Results - Our final step transforms the dictionary of timestamps/spreads into a dataframe, and then we use matplotlib to graph the results in a simple date graph to view how the term structure has changed over the timeframe chosen.

Volatility Term Slope Generated

The generated graph could be interpreted to show that 1m volatility has decreased against 6m vol over the last 5 days, and has stabilized between 8/23 and 8/24. Shorter term volatility outlook has decreased over the timeframe (lower volatility expectations)

This is a premium post. Create Plus+ Account to view the live, working codebase for this article.

Notice: Information contained herein is not and should not be construed as an offer, solicitation, or recommendation to buy or sell securities. The information has been obtained from sources we believe to be reliable; however no guarantee is made or implied with respect to its accuracy, timeliness, or completeness. Author does not own the any crypto currency discussed. The information and content are subject to change without notice. CryptoDataDownload and its affiliates do not provide investment, tax, legal or accounting advice.

This material has been prepared for informational purposes only and is the opinion of the author, and is not intended to provide, and should not be relied on for, investment, tax, legal, accounting advice. You should consult your own investment, tax, legal and accounting advisors before engaging in any transaction. All content published by CryptoDataDownload is not an endorsement whatsoever. CryptoDataDownload was not compensated to submit this article. Please also visit our Privacy policy; disclaimer; and terms and conditions page for further information.

Latest Posts
Follow Us
Notify me of new content