To break down the implied volatility surface at ORATS, we look at the term structure in three points: 30 day IV, 2 year IV, and earnings effect. We summarize the strike relationships in two points, slope and derivative. From those five points, most of the surface can be calibrated. There still needs to be work done on the wings, which is a separate issue.

We looked at term structure in a separate blog: Implied Volatility Term Structure and Interpolated IVs so in this blog we will look at slope and derivative, which some call skewness and kurtosis.


An implied volatility surface for a month can be described as a 2-dimensional surface where the independent variables option delta and the dependent variable is implied volatility. ORATS solves for the surface using the following summary characteristics, strike slope and derivative.

Strike Slope is a measure of the amount that implied volatility changes for every increase of 10 call delta points within the intra-month skew. It measures how lopsided the 'smile' or 'smirk' is. The derivative is a measure of the rate at which the strike slope changes for every increase of 10 call delta points within the intra-month skew. It measures the curvature of the intra-month skew or 'smile.' We chose just two parameters to describe the skew to get a reasonable fit for the fewest assumptions.

Using this method of describing the skew has the additional benefit of producing accurate at-the-money volatility readings important for summarizing the term structure.

Another benefit of this approach is the ability to:

  1. Compare the slope and deriviative readings to other stocks and to other historical periods, even when the stock price or implied volatility level was much different.
  2. Forecast the parameters of the skew and make some assessment of under or over valued.
  3. Compute a reasonable volatility surface and produce good greeks.
  4. Compare individual stock readings to related ETFs or indexes to get a relative value of slope and derivative.

The Data API has access to a trove of historical and current slope and derivatives based on delayed market quotes. Here's a graph of MSFT slope in Blue and MSFT slope divided by the XLK (MSFT's best ETF) in Red. That valley around 2/22/10 was when MSFT stock price went from mid $80s to mid $90s.


Data API free trial sign up here.

Advanced: Calculating an Implied Volatility for Each Strike

Given the at-the-money implied volatility, the slope and the derivative, an implied volatility can be calculated for each strike. First, a call delta is calculated for the strike using a standard option pricing model (not provided). Second, the slope and derivative for the expiration is calculated given the interpolated slope and derivative for that expiration. Third, the implied volatility formula is used to determine the strike implied.

Formula: Atmiv*(1+(slope/1000+(deriv/1000*(delta*100-50)/2))*(delta*100-50))

For example, assume the following:

Since we are finding the month 1 volatility the 30 day slope and derivative can be used. 30*(1+(1/1000+(0.1/1000*(0.75*100-50)/2))*(0.75*100-50)) = 31.688

Example2, assume:

In this example we first need to interpolate the IV, slope and derivative between the 30 day and in the infinite. This is done by weighting the 30day * 81% and the infinite 19% (see below).

IV = 0.81 * 32 + 0.19 * 28 = 31.26 Slope = 0.81 * 1 + 0.19 * 2 = 1.19 Derivative = 0.81 * 0.1 + 0.19 * 0.08 = 0.084 Implied volatility at 25 delta: 31.26*(1+(1.19/1000+(0.084/1000*(0.25*100-50)/2))*(0.25*100-50))=31.15

NEW - Finding the interpolation weightings between the 30 day and in the infinite: The weightings are found by first calculating the target days difference between the 30 day and 2 year (used for infinite days to expiration). For DTE < 30 us the 30 day reading. For DTE> 730 (2*365) us the infinite reading alone. For those DTE between 30 and 730 use the following method:

  1. Calculate the square roots for 30 days, 730 days and the target date, here 90 days.
  2. Total the absolute difference between square roots of the target DTE and 30 and 730.
  3. The weighting for each is the complement of the difference divided by the total error.

In the example of finding the weights for 90 DTE:

  1. The square root of 90 is 9.49, of 30 is 5.48 and of 730 is 27.02.
  2. The total errors is (9.49-5.48)=4.01 plus (27.02-9.49)=17.53 total is 21.54.
  3. The complement for the 30 day is 17.53/21.54=.81 and the infinite is .19

Thus to find a weighted 30 day and in the infinite, multiply each reading by the above ratios.

More reading:

NDX Skew Surpasses SPX - Nasdaq 100 Put Buying Continues

Surf the IV Implied Volatility Surface

QQQ Puts Get Pricey

related posts

Python Access to Our API
Data, data api, Python, code example

Python Access to Our API

Python is a popular programming language that lets you work quickly and integrate systems...

Read Post
Futures Prices Implied from Options Prices for Indexes
Data, Index Options, Futures Prices, Options Pricing

Futures Prices Implied from Options Prices for Indexes

Indexes price options off of futures prices for each expiration. Here's how ORATS does handles...

Read Post

We're here, if you need us.

Still curious how we can help you?