Implied Volatility and Volatility Smile › Worked Example: Building an Implied Volatility Smile from Market Data

Michael BrenndoerferNovember 30, 20257 min read
Quantitative FinanceAll chapters
Part 5 of 15Stochastic Calculus and Pricing Theory
Chapter 32Implied Volatility and Volatility Smile › Worked Example: Building an Implied Volatility Smile from Market Data
Reading section 9 of 12 · Worked Example: Building an Implied Volatility Smile from Market Data · 7 minSection 9 of 12 · 7 min

Book contents

Section 9 of 12 · 7 min read

Implied Volatility and Volatility Smile › Worked Example: Building an Implied Volatility Smile from Market DataOne section · Sections in this chapter9 / 12 ↓
Reading tools Definitions & inline links

Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.

Article links

Make inline references clickable

Let's extract implied volatilities from hypothetical market prices and analyze the resulting smile.

In[23]:
Code
import numpy as np

# Suppose we observe the following market data for 3-month options on a stock at $100
# with a risk-free rate of 4%

S = 100
T = 0.25  # 3 months
r = 0.04

# Market call option prices (mid-market)
market_data = {
    85: 16.50,  # Deep ITM call
    90: 12.20,  # ITM call
    95: 8.30,  # Slightly ITM call
    100: 5.15,  # ATM call
    105: 2.80,  # OTM call
    110: 1.35,  # OTM call
    115: 0.55,  # Deep OTM call
}

# Compute implied volatilities
iv_results = {}
for strike, price in market_data.items():
    try:
        iv = implied_vol_newton(S, strike, T, r, price)
        iv_results[strike] = iv
    except:
        iv_results[strike] = np.nan
Out[24]:
Console
Strike 85: $16.50 -> 27.78% IV
Strike 90: $12.20 -> 26.35% IV
Strike 95: $8.30 -> 24.55% IV
Strike 100: $5.15 -> 23.37% IV
Strike 105: $2.80 -> 22.16% IV
Strike 110: $1.35 -> 21.42% IV
Strike 115: $0.55 -> 20.66% IV

The table reveals a clear volatility skew pattern characteristic of equity options. Low strikes (out-of-the-money puts converted to call parity) show higher implied volatilities than high strikes (out-of-the-money calls), which reflects the market's assessment that downside moves are more likely and more severe than upside moves of similar magnitude. The at-the-money strike shows intermediate volatility levels.

Out[25]:
Visualization
Bar chart showing call option prices decreasing from $16.50 at the $85 strike to $0.55 at the $115 strike, with a dashed line marking the $100 spot price.
Market call option prices for 3-month options on a stock at $100 with 4% risk-free rate, across strikes from $85 to $115. Prices decrease from $16.50 (deep in-the-money) to $0.55 (deep out-of-the-money). Price decay accelerates as strikes move further out-of-the-money, illustrating the convexity of option value. This nonlinear relationship between price and strike reflects how time value decays at an increasing rate as options move away from the money.
Line chart showing implied volatility declining from approximately 27.8% at the $85 strike to 20.7% at the $115 strike, illustrating the equity skew pattern.
Implied volatilities recovered from market prices using Newton-Raphson, showing a characteristic equity skew. Volatility declines from approximately 27.8% at the $85 strike to 20.7% at the $115 strike, spanning about 7.1 volatility points. This downward slope reflects the market's pricing of crash risk and the persistent premium for downside protection.

The analysis reveals a typical equity skew. A trader observing this pattern might consider selling the expensive low-strike options and buying the cheap high-strike options if they believed the skew was too extreme.

Measuring the Skew

A common metric for quantifying the skew is the difference between the implied volatility at the 25-delta put and the 25-delta call. Delta measures how far in or out of the money an option is in probability terms. Roughly speaking, a 25-delta put corresponds to a strike about 1 standard deviation below spot, and a 25-delta call corresponds to a strike about 1 standard deviation above. By using delta rather than fixed strike prices, the skew metric adjusts automatically for different volatility levels and times to expiration, making it comparable across different market conditions.

We can estimate the skew from our data by interpolating:

In[26]:
Code
import numpy as np
from scipy.interpolate import interp1d

# Recreate variables from earlier
S = 100
T = 0.25
r = 0.04
market_data = {
    85: 16.50,
    90: 12.20,
    95: 8.30,
    100: 5.15,
    105: 2.80,
    110: 1.35,
    115: 0.55,
}
iv_results = {}
for strike, price in market_data.items():
    try:
        iv = implied_vol_newton(S, strike, T, r, price)
        iv_results[strike] = iv
    except:
        iv_results[strike] = np.nan

# Create interpolator for the implied vol curve
strikes_arr = np.array(sorted(iv_results.keys()))
ivs_arr = np.array([iv_results[k] for k in strikes_arr])

iv_interp = interp1d(
    strikes_arr, ivs_arr, kind="cubic", fill_value="extrapolate"
)

# Approximate 25-delta strikes (roughly 1 std move in either direction)
# With 20% vol over 3 months, 1 std ≈ 20% * sqrt(0.25) = 10%
k_25d_put = S * np.exp(-0.10)  # ~90.5
k_25d_call = S * np.exp(0.10)  # ~110.5

iv_25d_put = iv_interp(k_25d_put)
iv_25d_call = iv_interp(k_25d_call)
skew_25d = (iv_25d_put - iv_25d_call) * 100
Out[27]:
Console
25-delta put strike: $90.5
25-delta call strike: $110.5
IV at 25-delta put: 26.17%
IV at 25-delta call: 21.35%
25-delta skew: 4.82 vol points

The 25-delta skew measures the difference in implied volatility between options that are roughly one standard deviation away from the current price. The put at a lower strike implies higher volatility, while the call at a higher strike implies lower volatility. The difference quantifies the steepness of the skew. This metric is widely used by traders to measure how much more expensive downside protection is compared to upside speculation on a percentage basis.

Out[28]:
Visualization
Line chart of the implied volatility curve with distinct dots marking the 25-delta put and call strikes, and arrows indicating the vertical skew distance between them.
Illustration of the 25-delta skew metric, a standard measure used across options markets. The 25-delta put at strike \$90.5 shows approximately 26.2% implied volatility, while the 25-delta call at strike \$110.5 shows 21.4% IV. The vertical distance of approximately 4.8 volatility points represents the 25-delta skew. This delta-based metric standardizes skew comparison across different underlying assets and volatility regimes.