Black-Scholes Model
Finance
An option is a contract that gives its holder a choice later — a
call is the right (not the obligation) to buy a stock at a fixed
strike price on a fixed expiry date. What is that
right worth today? Black and Scholes answered by changing the question:
not "what will the stock do?" but "what does it cost to
manufacture the option?" If a dealer can trade the stock
continuously, she can build a portfolio that reproduces the option's
payoff no matter where the stock goes — and then the option must cost
what the manufacturing costs, or there is free money on the table. Every
number on this page comes from
code in this repository
(scripts/gen_black_scholes.py), and the model's central
claim is demonstrated below by simulation, not asserted.
The idea before any equations
Sell a call option and you are exposed: if the stock rises, you owe the difference. But the option's value moves with the stock — when the stock rises $1, the call rises by some fraction (between 0 and 1, called the option's delta). So hold shares against the short option, and over the next instant the two movements cancel. The combined book — short one option, long shares — is momentarily riskless, and a riskless position must earn exactly the risk-free interest rate (what a bank deposit pays), or arbitrage exists. Writing "the hedged book earns " in calculus produces the Black-Scholes equation. The hedge has to be adjusted as the stock moves and time passes — that continual adjustment is delta hedging, and its cost is the option's price.
One consequence surprises everyone the first time: the stock's expected return never appears. Whether the stock drifts up 8% a year or down 3%, the hedge cancels the direction and only the wiggle size — the volatility — survives into the price. The simulation below runs the stock at an 8% drift while the formula knows only the 5% risk-free rate, and the hedge works anyway.
The model's world
The stock price is modeled as geometric Brownian motion: in each instant the price changes by a predictable piece plus a coin-flip piece,
where is the drift (average growth rate), is the volatility (the size of the random wiggles, quoted per year), and is the coin flip — an increment of Brownian motion, a random step of typical size . Both terms scale with itself, so it is percentage changes that are random — a $200 stock jumps twice as many dollars as a $100 stock. Solving this (Itô's lemma) gives a lognormal price:
For pricing, the hedging argument lets us set — the so-called risk-neutral world. This is not a claim that stocks really drift at the risk-free rate; it is the mathematical shadow of the fact that the hedge cancels the drift, so we may price as if it were .
The equation and the formula
"The hedged book earns ", written out for an option value , is a partial differential equation:
with the terminal condition that at expiry the option equals its payoff, for a call. For European options (exercisable only at expiry) the PDE has a closed-form solution:
Here is the standard normal cumulative distribution function — the probability that a standard Gaussian lands below . The two terms read like a story: is the (risk-neutral) probability the option finishes in the money, so is the discounted strike you expect to pay, and is the value of the stock you expect to receive, with because receiving the stock is worth more on exactly the paths where the stock ended high.
Checking it three ways
All checks run in scripts/gen_black_scholes.py with
, year, ,
. First, price the same call two independent
ways — the closed form, and 200,000 simulated risk-neutral paths:
closed form call C = 10.450584
Monte Carlo call = 10.463414 +/- 0.033118 (0.39 SE away)
parity: C - P = 4.877057549929 S - K e^-rT = 4.877057549929 diff = 0.00e+00 The Monte Carlo agrees within a third of its own standard error, and put-call parity — the model-independent identity , which must hold for European options or a static arbitrage exists — holds to the last printed digit.
The third check is the one that matters, because it tests the argument rather than the algebra. Sell one call at the formula price, delta-hedge it at evenly spaced times, and settle at expiry. The stock paths are simulated with a real-world 8% drift — not the 5% the formula uses — so this also tests the claim that the drift drops out:
rehedges N std of hedge P&L (short 1 call, premium 10.45)
4 3.1890
16 1.6688
64 0.8498
256 0.4241
1024 0.2148
log-log slope = -0.488 (theory: -0.5)
unhedged short call: std = 16.645; hedged (N=64): std = 0.843
That last plot is the Black-Scholes model: the price is fair precisely because the payoff can be manufactured, and the manufacturing error is controlled by how often you rebalance. The rate has the same origin as the standard error of a mean — each rehedging interval contributes an independent slice of unhedged randomness, and independent slices average down like .
The pricing function
import numpy as np
from scipy.stats import norm
def black_scholes(S, K, T, r, sigma, option_type="call"):
d1 = (np.log(S / K) + (r + 0.5 * sigma**2) * T) / (sigma * np.sqrt(T))
d2 = d1 - sigma * np.sqrt(T)
if option_type == "call":
return S * norm.cdf(d1) - K * np.exp(-r * T) * norm.cdf(d2)
return K * np.exp(-r * T) * norm.cdf(-d2) - S * norm.cdf(-d1)
print(black_scholes(100, 100, 1.0, 0.05, 0.20, "call")) # 10.450584
print(black_scholes(100, 100, 1.0, 0.05, 0.20, "put")) # 5.573526 The sensitivities of this function — delta, gamma, theta, vega, rho — are the Greeks, and they have their own page with working code: Greeks and delta hedging.
Where the model breaks
The formula assumes one volatility for all strikes and expiries. Markets disagree: back out the that reproduces each traded option price and you get the volatility smile — different implied volatilities at different strikes, the subject of the implied volatility and volatility surface pages. Real returns also have fatter tails than the lognormal allows: the October 1987 crash was a ~20-standard-deviation event under GBM, which is the polite way of saying the distributional assumption failed, and the smile appeared in equity markets immediately afterward. The model survives these failures because of how it is used in practice: as a quoting convention (prices are quoted in implied volatility) and as the base case more realistic models are measured against.
Notation: one formula, five costumes
Derivatives pricing has a notation problem: every major textbook writes the same objects differently, and the differences look like math when they are only spelling. This page uses , for the standard normal CDF, and . Here is the translation table for reading anything else:
| object | here / Hull | Shreve | Wilmott | papers/desks |
|---|---|---|---|---|
| option value | , | |||
| normal CDF | ||||
| the two arguments | ||||
| Brownian motion | ||||
| risk-neutral expectation | "risk-neutral world" | — |
Two of the differences are genuine traps, not just spelling. First, time: some books work in calendar time , others in time-to-expiry — and since , the theta of an option flips sign depending on the convention. A "positive theta" claim means nothing until you know which clock the author is holding. Second, carry: Hull writes the dividend yield explicitly, Black-76 replaces the spot with the forward (absorbing and at once), and older texts use the cost-of-carry where is stock, is dividend-paying, is futures. Three parameterizations of one idea — and formulas copied between conventions without translating are the classic way to be silently wrong by a factor of .
The defense is the one this page practices: declare the convention once, then translate at the border. When a formula from another source disagrees with yours, check the clock and the carry before suspecting the math.
References
F. Black and M. Scholes, J. Political Economy 81, 637 (1973); R. C. Merton, Bell J. Econ. 4, 141 (1973) — the hedging argument as presented here is closer to Merton's. J. Hull, Options, Futures, and Other Derivatives for the practitioner's treatment; S. Shreve, Stochastic Calculus for Finance II for the measure-theoretic one.