Learning Objectives
By the end of this section you will be able to:
- State the Black-Scholes formula for a European call and explain what each of and represents.
- Compute and by hand and interpret them as signed log-distances measured in standard deviations.
- Read as the risk-neutral probability that the option is exercised, and as the same probability weighted by the share you receive when it is.
- Use put-call parity to derive the put formula from the call.
- Implement the formula in Python with and reproduce the canonical sanity check for the ATM example.
The goal of this section: turn the famously intimidating expression into a sentence you can say out loud in plain English — and then play with it until it feels obvious.
From PDE to Closed-Form Formula
In the previous section we derived the Black-Scholes partial differential equation:
On its own, that PDE is a recipe, not a number. To get an actual price we need a boundary condition — what the option is worth at expiry — and a clever change of variables. For a European call the boundary condition is the payoff:
Substituting and turns the Black-Scholes PDE into the heat equation on a log axis, which has been solvable since Fourier. After undoing the change of variables you are left with the closed-form solution discovered by Fischer Black, Myron Scholes, and (in a more rigorous derivation) Robert Merton in 1973.
Why a closed form was such a big deal
Before 1973, banks priced options by simulation, intuition, or haggling. A closed-form formula meant a trader could price thousands of options in microseconds, hedge them in real time, and arbitrage anyone still pricing by gut. That single equation built a multi-trillion-dollar industry.
The Black-Scholes Formula
For a European call option on a non-dividend-paying stock with spot , strike , volatility , risk-free rate , and time to expiry :
where
and is the cumulative distribution function of a standard normal random variable.
The whole formula in one English sentence
The fair price of a call option is the expected stock you receive at expiry minus the expected cash you pay — both weighted by the probability that the option is actually exercised, and both pulled back to today's dollars.
Read out loud: "Stock leg minus discounted cash leg." That is the whole intuition. The rest of this section is just unpacking why the probabilities and show up.
What Are d₁ and d₂?
Stripped of decoration, and are signed distances: how far is the current stock from the strike, measured on a log scale, in units of the stock's diffusion ?
The numerator: how far from the strike, in log-space?
The numerator of is . The first piece is positive when (in-the-money), zero at the strike, and negative when out-of-the-money. The second piece is the drift of the log-stock under the risk-neutral measure — where the stock is "expected" to be, on average, by expiry.
The denominator: how big are the wiggles?
is the standard deviation of the log-stock at time . So dividing by it converts "distance to strike" into "distance in standard deviations." This is exactly the kind of z-score you would compute in any statistics class.
The one-sentence interpretation
is the z-score of the log-strike under the risk-neutral distribution of the stock at expiry. is the same z-score shifted by one diffusion unit, which is exactly the shift induced by changing measure from cash-weighted to share-weighted.
Step-by-step for the canonical example
Take the textbook ATM call: , , , , year.
| Quantity | Substitution | Value |
|---|---|---|
| ln(S₀/K) | ln(1) | 0 |
| (r + ½σ²)T | (0.05 + 0.02)·1 | 0.07 |
| σ√T | 0.20·1 | 0.20 |
| d₁ | 0.07 / 0.20 | 0.35 |
| d₂ | 0.35 − 0.20 | 0.15 |
| N(d₁) | Φ(0.35) | 0.6368 |
| N(d₂) | Φ(0.15) | 0.5596 |
Notice how small and are — both well under 1 standard deviation. That tells you the at-the-money case is genuinely "undecided": the option is roughly a coin flip plus a small drift bonus.
The Two Pieces of the Price
The Black-Scholes formula has the form . Each leg corresponds to one of the two things that happen if the option is exercised at expiry: you receive a share and you pay the strike. Both are weighted by a probability and pulled back to today.
Stock leg:
Present value of receiving the share when the call is exercised. The probability weight is the risk-neutral probability of exercise weighted by the share you collect — a stock-measure expectation.
Cash leg:
Present value of paying the strike when the call is exercised. discounts the strike back to today; is the plain risk-neutral probability that exercise actually happens.
Why N(d₁) ≥ N(d₂)
The two probabilities are not the same. over-weights paths where the stock ends up high (because the share you receive is worth more there). is the unweighted probability of exercise. The gap is exactly where the option's convexity premium hides.
The Risk-Neutral Probability Story
Under the Black-Scholes model, the stock at expiry follows a log-normal distribution:
The event "call ends in the money" is , equivalently . Standardising by its mean and standard deviation and using gives, after a couple of algebraic lines,
That is the "cash-leg" probability. The stock-leg probability arises if you instead compute the same probability under a different measure — one in which the share itself is the numeraire instead of the bank account. Changing measure shifts the mean of up by , which is exactly the shift between and .
Below, each bar is the value of for a call with , , , , as the spot price moves further into the money. It is the model's answer to the question: "how likely am I to actually exercise this call?"
Each bar is the risk-neutral probability that the call finishes in-the-money. Deep OTM ≈ small chance; deep ITM ≈ near certainty.
Interactive Visualization
The figure below plots option price as a function of spot . The dashed grey line is the intrinsic value at expiry ( for a call, for a put). The bright curve is the Black-Scholes price today. The green bracket is the time value: how much extra you pay today for the chance that the stock moves favourably before expiry.
Things to try as you move the sliders:
- Crank up: the curve lifts off the intrinsic line — more uncertainty is more option value.
- Drag down toward zero: the price curve collapses onto the dashed payoff line. At expiry, time value disappears.
- Crank up: the call gets more expensive (the discounted strike is cheaper) and the put gets cheaper.
- Push the spot far ITM or far OTM: the price approaches its limit (a forward minus discounted strike for deep ITM calls, nearly zero for deep OTM).
Drag the sliders to feel how each parameter pushes the price up or down. The dashed gray line is the payoff at expiry (what the option is worth if today were the expiration day). The colored curve is the Black-Scholes price today. The green bracket at S is the time value — the premium you pay for the chance that the stock moves favorably before expiry.
Worked Example: ATM Call Option
Let us walk through the canonical at-the-money example by hand. This is the example every quant has memorised, because the answers are round and clean — if you ever code Black-Scholes and the numbers don't match, this is the test case that pins down the bug.
▸ Click to expand the full hand-traced solution
Step 1 — Compute the diffusion scale σ√T
Over one year, the log-stock is normally distributed with standard deviation 0.20 (about 20% as a multiplicative move).
Step 2 — Compute d₁
Plug numbers into the definition:
Interpretation: today's log-spot is 0.35 standard deviations above the log-strike, after accounting for risk-neutral drift. A small positive number — the option is just barely tilted toward exercise.
Step 3 — Compute d₂
Step 4 — Look up the standard normal CDF
From a normal table (or scipy.stats.norm.cdf):
So the model says: under risk-neutral probabilities, there is a 55.96% chance the call is exercised. The share-weighted exercise probability is a bit higher, 63.68%, because exercise "happens more heavily" on paths where the stock is worth more.
Step 5 — Compute the discount factor
So a dollar received in one year is worth about today. The present value of the strike is .
Step 6 — Plug into the formula
Sanity check — does this number feel right?
- The intrinsic value today is . All of the price is time value.
- That is roughly of the stock price — completely typical for a one-year ATM call with 20% volatility.
- If we set , the price collapses to . Time value vanishes.
- If we set , the call becomes a deterministic forward and the price collapses to . No randomness, no convexity bonus.
Conclusion: the fair price of this call is about — and the model can break that number down into a stock leg of minus a discounted cash leg of .
Python Implementation
Now let us translate the formula directly into Python. The whole thing is twelve real lines of arithmetic — Black-Scholes is shockingly small once you trust the formula.
We are using scipy.stats.norm.cdf for the normal CDF and nothing else. As you read the code-explanation cards on the left, hover over the line on the right to see the exact correspondence — every non-trivial line is traced against the canonical example so you can verify the intermediate values by eye.
What you should see when you run this
d1 = 0.350000 d2 = 0.150000 N(d1) = 0.636831 N(d2) = 0.559618 Call = 10.4506
Closed-form Greeks fall out of the same formula by differentiating each input. The implementation is just one extra line per Greek — and each one tells the trader something concrete about how the option behaves.
Put-Call Parity
We can derive the put price from the call without re-doing the whole derivation. Consider a portfolio: buy one call, sell one put, both with the same strike and expiry . Its payoff at expiry is:
But is exactly the payoff of a forward contract on the stock. By no-arbitrage, its price today must equal the forward price . So:
This is put-call parity. It is model-independent — it holds for any European options, not just Black-Scholes ones. Rearranging gives the put formula:
For our canonical example, . We can double-check directly: .
Use parity as a free unit test
Any time you implement Black-Scholes, compute both and from your code and verify to machine precision. If parity fails by more than ~1e-12, you have a bug in your CDF, your discount factor, or your sign conventions.
Limiting Behavior and Sanity Checks
A good way to feel the formula is to watch what happens at its boundaries. Each limit collapses Black-Scholes back to something simple — and each one tells you the model is doing the right thing.
| Regime | What happens to d₁ and d₂ | Call price collapses to | Intuition |
|---|---|---|---|
| S → ∞ (deep ITM) | Both → +∞, N → 1 | S₀ − K·e^(−rT) | Owning the call is basically owning the stock minus a delayed payment of K. |
| S → 0 (deep OTM) | Both → −∞, N → 0 | 0 | Worthless — the stock has no chance of recovery. |
| σ → 0 (no volatility) | d₁ = d₂ = sign(S₀ − K·e^(−rT)) · ∞ | max(S₀ − K·e^(−rT), 0) | Deterministic forward; option is exercised if and only if the discounted forward beats the strike. |
| T → 0 (about to expire) | σ√T → 0, then d → ±∞ depending on S vs K | max(S₀ − K, 0) | Time value vanishes — only intrinsic value remains. |
| σ → ∞ (infinite uncertainty) | d₁ → +∞, d₂ → −∞ | S₀ | The call is as valuable as just owning the stock — the strike becomes irrelevant. |
Reality check on σ → ∞
The formula gives the right limit mathematically, but in real markets nobody would ever sell you a stock for a call with σ in the hundreds of percent. Implied volatilities for traded options typically sit between 10% and 100% — anything beyond that is either a meme stock, a takeover candidate, or a numerical glitch in your data pipeline.
Applications
The Black-Scholes formula is the bedrock of an enormous amount of practical machinery. A few highlights:
💹 Market-making and quoting
Every options exchange screen you have ever seen has Black-Scholes (or a richer cousin) running underneath. Bid/ask spreads are quoted around the formula price.
🛡️ Delta hedging
tells you how many shares to hold to neutralise small moves in the underlying. Every options desk reruns this calculation hundreds of times a second.
🏢 Employee stock options
U.S. accounting rules (FASB ASC 718) require companies to expense stock-option grants at fair value — and Black-Scholes (or a lattice extension) is the standard valuation tool.
📈 Implied volatility
Run the formula backwards: given a market price , solve for the that produces it. This implied volatility is how traders actually quote options — in vol points, not dollars.
Summary
- The Black-Scholes formula for a European call is . Read it as "stock leg minus discounted cash leg."
- is the z-score of the log-strike under the risk-neutral measure; is the same z-score under the share-numeraire measure.
- is the probability the call is exercised; is the same probability weighted by the share you receive.
- For the canonical ATM example , — every quant's favourite sanity check.
- Put-call parity derives the put price from the call without any new modelling assumptions, and is a free unit test for any implementation.
- Every Greek (Delta, Gamma, Vega, Theta, Rho) is one more derivative of the same formula — three lines of code each.
Coming next: in the next section we make the Greeks , , , — the partial derivatives we just sketched — the protagonists. They are how every options trader actually sees the market: not as prices, but as a portfolio of exposures.