Skip to main content

← Back to the demo

Example.Written by the StrikeLab team to show what a finished capstone looks like; not a student's work.

ExamplePrice an option and defend your volatility

Is a 30-day SPY call fairly priced at 18% volatility?

Question

SPY trades at $521 and a 30-day $525 call is quoted around $9.70. Black-Scholes only matches that price at one volatility. Is that volatility believable, given how much SPY has actually moved?

Code

from math import erf, exp, log, sqrt

def N(x):
    return 0.5 * (1 + erf(x / sqrt(2)))

def bs_call(S, K, T, r, sigma):
    d1 = (log(S / K) + (r + sigma**2 / 2) * T) / (sigma * sqrt(T))
    d2 = d1 - sigma * sqrt(T)
    return S * N(d1) - K * exp(-r * T) * N(d2)

S, K, T, r = 521, 525, 30 / 365, 0.044
for sigma in (0.13, 0.18, 0.23):
    print(f"sigma={sigma:.2f}  call={bs_call(S, K, T, r, sigma):.2f}")

Results

At 18% volatility the model gives $9.73, almost exactly the quoted price, so the market is implying about 18%. At 13% the call would be worth $6.75; at 23%, $12.70. A 5-point mistake in volatility moves the price by about $3, roughly 30%.

In this example, SPY's realized volatility over the last month was closer to 14%, so buyers would be paying for more movement than recently happened.

Reflection

Realized volatility looks backward and implied looks forward, so "too expensive" isn't proven: an earnings season or a Fed meeting inside the 30 days could justify it. Next I'd compare implied and realized volatility across a year of dates to see how often the premium pays off.