What Is the Black-Scholes Model?
The Black-Scholes model, published by Fischer Black and Myron Scholes in 1973 (with significant contributions from Robert Merton), is the foundational framework for pricing European options. It earned Scholes and Merton the Nobel Prize in Economics in 1997.
Before Black-Scholes, options pricing was largely guesswork. The model provided, for the first time, a theoretically rigorous formula that connects an option's price to observable market variables. It remains the starting point for all options pricing in quantitative finance, even though practitioners now use more sophisticated models.
The Formula
European Call Option
$$C = S_0 N(d_1) - K e^{-rT} N(d_2)$$
European Put Option
$$P = K e^{-rT} N(-d_2) - S_0 N(-d_1)$$
Where:
$$d_1 = \frac{\ln(S_0/K) + (r + \sigma^2/2)T}{\sigma\sqrt{T}}$$
$$d_2 = d_1 - \sigma\sqrt{T}$$
And:
- S₀ = current stock price
- K = strike price
- T = time to expiration (in years)
- r = risk-free interest rate
- σ = volatility of the underlying asset
- N(·) = cumulative standard normal distribution function
Intuition Behind Each Component
Understanding the formula intuitively is more valuable than memorising it.
The Call Formula: C = S₀N(d₁) - Ke⁻ʳᵀN(d₂)
Think of this as two parts:
S₀N(d₁) — The expected value of receiving the stock, weighted by the probability that the option finishes in the money (under the stock-price measure). N(d₁) is also the option's delta — how much the option price changes per £1 change in the stock.
Ke⁻ʳᵀN(d₂) — The present value of paying the strike price, weighted by the probability the option finishes in the money (under the risk-neutral measure). N(d₂) is the risk-neutral probability of exercise.
The call price is the difference: what you expect to receive minus what you expect to pay, discounted to the present.
Understanding d₁ and d₂
d₂ captures how far the stock is from the strike, adjusted for drift and time:
- If the stock is well above the strike, d₂ is large and positive → N(d₂) ≈ 1 → the option will almost certainly be exercised
- If the stock is well below the strike, d₂ is large and negative → N(d₂) ≈ 0 → the option will almost certainly expire worthless
d₁ = d₂ + σ√T adds a volatility adjustment. The difference between d₁ and d₂ reflects the asymmetry between the stock-price measure and the risk-neutral measure.
The Assumptions
The Black-Scholes model rests on several assumptions. Understanding where these break down is essential for quant practitioners.
1. Geometric Brownian Motion
The stock price follows:
$$dS = \mu S , dt + \sigma S , dW$$
where W is a Brownian motion. This means:
- Returns are normally distributed
- The stock price is log-normally distributed
- Volatility is constant over time
In reality: Returns have fat tails (more extreme moves than a normal distribution predicts), volatility changes over time, and there are occasional jumps (flash crashes, earnings surprises).
2. Constant Volatility
The model assumes σ is known and constant. In practice, implied volatility varies by strike (the volatility smile/skew) and by maturity (the term structure of volatility).
In reality: Volatility is itself stochastic. This is why models like Heston and SABR were developed.
3. No Dividends
The basic formula assumes the stock pays no dividends during the option's life.
Extension: The model can be adjusted for continuous dividend yields by replacing S₀ with S₀e⁻ᑫᵀ, where q is the continuous dividend yield.
4. Risk-Free Rate Is Constant
The interest rate r is assumed constant and known.
In reality: Interest rates fluctuate, though for short-dated options this assumption is usually reasonable.
5. No Transaction Costs
The model assumes frictionless trading — no spreads, commissions, or market impact.
In reality: Transaction costs are significant and affect hedging strategies.
6. Continuous Trading
The derivation assumes you can trade continuously to maintain a perfect hedge.
In reality: Trading is discrete, and each rebalance incurs costs. This creates hedging error.
7. European Exercise Only
The basic formula prices European options (exercisable only at expiry). It does not directly apply to American options (exercisable any time).
Deriving Black-Scholes
The derivation uses several key ideas from stochastic calculus:
Step 1: Model the Stock
Assume the stock follows geometric Brownian motion: dS = μS dt + σS dW
Step 2: Apply Itô's Lemma
For any function V(S, t) of the stock price:
$$dV = \frac{\partial V}{\partial t}dt + \frac{\partial V}{\partial S}dS + \frac{1}{2}\frac{\partial^2 V}{\partial S^2}(dS)^2$$
Step 3: Construct a Risk-Free Portfolio
Create a portfolio Π = V - (∂V/∂S)·S (the option minus delta shares). This eliminates the random dW term, making the portfolio instantaneously risk-free.
Step 4: No-Arbitrage Condition
A risk-free portfolio must earn the risk-free rate:
$$d\Pi = r\Pi , dt$$
Step 5: The Black-Scholes PDE
Combining steps 2-4 yields the Black-Scholes partial differential equation:
$$\frac{\partial V}{\partial t} + \frac{1}{2}\sigma^2 S^2 \frac{\partial^2 V}{\partial S^2} + rS\frac{\partial V}{\partial S} - rV = 0$$
Step 6: Solve with Boundary Conditions
For a European call with terminal condition V(S, T) = max(S - K, 0), solving this PDE gives the Black-Scholes formula.
Python Implementation
Here is a complete implementation:
import numpy as np from scipy.stats import norm class BlackScholes: """Black-Scholes European option pricing model.""" def __init__(self, S, K, T, r, sigma): self.S = S # Current stock price self.K = K # Strike price self.T = T # Time to expiry (years) self.r = r # Risk-free rate self.sigma = sigma # Volatility self.d1 = (np.log(S/K) + (r + sigma**2/2)*T) / (sigma*np.sqrt(T)) self.d2 = self.d1 - sigma*np.sqrt(T) def call_price(self): return (self.S * norm.cdf(self.d1) - self.K * np.exp(-self.r * self.T) * norm.cdf(self.d2)) def put_price(self): return (self.K * np.exp(-self.r * self.T) * norm.cdf(-self.d2) - self.S * norm.cdf(-self.d1)) def call_delta(self): return norm.cdf(self.d1) def put_delta(self): return norm.cdf(self.d1) - 1 def gamma(self): return norm.pdf(self.d1) / (self.S * self.sigma * np.sqrt(self.T)) def vega(self): return self.S * norm.pdf(self.d1) * np.sqrt(self.T) / 100 def call_theta(self): term1 = -(self.S * norm.pdf(self.d1) * self.sigma) / (2 * np.sqrt(self.T)) term2 = -self.r * self.K * np.exp(-self.r*self.T) * norm.cdf(self.d2) return (term1 + term2) / 365 def call_rho(self): return self.K * self.T * np.exp(-self.r*self.T) * norm.cdf(self.d2) / 100 def implied_volatility(self, market_price, option_type='call', tol=1e-8): """Newton-Raphson method to find implied vol.""" sigma = 0.2 # Initial guess for _ in range(100): bs = BlackScholes(self.S, self.K, self.T, self.r, sigma) price = bs.call_price() if option_type == 'call' else bs.put_price() vega = bs.vega() * 100 if abs(vega) < 1e-12: break sigma -= (price - market_price) / vega if abs(price - market_price) < tol: return sigma return sigma # Example usage option = BlackScholes(S=100, K=105, T=0.5, r=0.05, sigma=0.2) print(f"Call price: £{option.call_price():.4f}") print(f"Put price: £{option.put_price():.4f}") print(f"Delta: {option.call_delta():.4f}") print(f"Gamma: {option.gamma():.4f}") print(f"Vega: {option.vega():.4f}") print(f"Theta: {option.call_theta():.4f}")
Try this interactively with our Black-Scholes calculator tool.
The Greeks
The Greeks are partial derivatives of the option price with respect to model inputs. They quantify sensitivities:
| Greek | Measures | Formula (Call) |
|---|---|---|
| Delta (Δ) | Price sensitivity to stock | N(d₁) |
| Gamma (Γ) | Rate of change of delta | N'(d₁) / (Sσ√T) |
| Theta (Θ) | Time decay | -(Sσ N'(d₁))/(2√T) - rKe⁻ʳᵀN(d₂) |
| Vega (ν) | Sensitivity to volatility | S√T N'(d₁) |
| Rho (ρ) | Sensitivity to interest rate | KTe⁻ʳᵀN(d₂) |
These are not just theoretical — traders use Greeks daily to manage their positions. Delta hedging, gamma scalping, and vega trading are all fundamental trading strategies.
Extensions and Modern Usage
While the original model has limitations, it spawned an entire family of models:
Local Volatility (Dupire)
Makes volatility a function of stock price and time: σ(S, t). Can match any observed volatility surface exactly.
Stochastic Volatility (Heston)
Volatility itself follows a stochastic process. Captures the dynamics of volatility more realistically.
Jump-Diffusion (Merton)
Adds occasional jumps to the stock price process, capturing crash risk and sudden moves.
SABR Model
Stochastic Alpha Beta Rho — widely used in interest rate markets for its ability to capture smile dynamics.
Modern Practice
In practice, quant analysts at banks calibrate sophisticated models to market prices, but they often convert results back to Black-Scholes implied volatility for communication. The Black-Scholes framework remains the common language of options markets.
Frequently Asked Questions
Why is Black-Scholes still taught if the assumptions are wrong?
Because it provides the correct conceptual framework. The ideas — risk-neutral pricing, dynamic hedging, no-arbitrage — underpin all modern derivatives pricing. More advanced models are extensions of Black-Scholes, not replacements.
Can I use Black-Scholes for American options?
Not directly, since it prices European options only. For American calls on non-dividend-paying stocks, early exercise is never optimal, so Black-Scholes gives the correct price. For American puts and dividend-paying stocks, you need alternative methods (binomial trees, finite differences).
What is implied volatility?
The volatility σ that, when plugged into Black-Scholes, produces the market-observed option price. It is "implied" by the market and is the standard way options are quoted. When traders say volatility is "high" or "low," they mean implied volatility.
How accurate is Black-Scholes in practice?
For at-the-money, short-dated options on liquid stocks, it is reasonably accurate. For deep out-of-the-money options, long-dated options, or during market stress, the model's assumptions break down significantly and more sophisticated models are needed.
Want to go deeper on The Black-Scholes Model Explained: Formula, Intuition & Python Code?
This article covers the essentials, but there's a lot more to learn. Inside Quantt, you'll find hands-on coding exercises, interactive quizzes, and structured lessons that take you from fundamentals to production-ready skills — across 50+ courses in technology, finance, and mathematics.
Free to get started · No credit card required