Implied Volatility and Volatility Smile › Worked Example: Building an Implied Volatility Smile from Market Data
Quantitative FinanceAll chapters 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.
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.nanStrike 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.


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:
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) * 10025-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.
