Four lines of arithmetic, one lookup table and a parity check: a full Black-Scholes worked example you can rebuild in a spreadsheet.
Compute d1 and d2, look up their normal probabilities, and take the discounted difference: call = S × N(d1) − K × e−rT × N(d2). For a one-year at-the-money call on a stock at 100, with a 4 per cent rate and 24 per cent volatility, d1 is 0.2867, d2 is 0.0467 and the call is worth 11.4541; the matching put is 7.5330. Every step fits on one page and can be checked against put-call parity.
Worked in full in Quantitative Finance by Julian R. Sterling, with every figure reproduced in a free workbook.See the book on Amazon →
The option is Kestrel 100, the European call that runs through Quantitative Finance. All inputs are illustrative; the volatility is the one input nobody can observe.
| Input | Symbol | Value |
|---|---|---|
| Spot price | S | 100 |
| Strike | K | 100 |
| Maturity, years | T | 1 |
| Risk-free rate, continuously compounded | r | 4.00% |
| Dividend yield | q | 0.00% |
| Implied volatility | σ | 24.00% |
d1 measures how far the forward sits from the strike in units of volatility, plus a half-variance correction; d2 is d1 less one volatility over the life of the option.
d1 = [ln(S/K) + (r − q + σ²/2) × T] / (σ × √T)
= [0.0000 + (0.04 + 0.0288) × 1] / 0.2400 = 0.0688 / 0.2400 = 0.2867
d2 = d1 − σ × √T = 0.2867 − 0.2400 = 0.0467
Excel: =(LN(S/K)+(r-q+vol^2/2)*T)/(vol*SQRT(T))
Because the option is struck at spot, ln(S/K) is zero and the whole of d1 comes from the drift term: the rate plus half the variance, 0.0688, over one volatility.
Units matter more than the algebra. T is in years, so an option with three months to run takes a quarter, and the rate and volatility must be annual figures on the same basis. The rate is continuously compounded: convert an annual quote with ln(1 + rate) before using it. Volatility enters only as σ√T, which is why doubling the life of an option raises its total volatility by the square root of two, not by two.
N() is the cumulative standard normal distribution, NORM.S.DIST(x,TRUE) in Excel. N(d1) = 0.6128, which is also the call's delta. N(d2) = 0.5186, the risk-neutral probability that the call finishes in the money: 51.86 per cent, slightly above a half because the 4 per cent rate more than offsets the half-variance term of 0.0288, so d2 is positive.
Call = S × e−qT × N(d1) − K × e−rT × N(d2)
Discount factor e−0.04 = 0.9608, so the present value of the strike is 96.0789
= 100 × 0.6128 − 96.0789 × 0.5186 = 61.2816 − 49.8276 = 11.4541
Excel: =S*EXP(-q*T)*NORM.S.DIST(d1,TRUE)-K*EXP(-r*T)*NORM.S.DIST(d2,TRUE)
Read the two terms as a replicating portfolio: hold 0.6128 of a share, worth 61.2816, and borrow 49.8276. The difference is what the option costs to manufacture, which is why the price contains no view on where the stock is going. On a lot of 10,000 options the position is worth 114,541.
Put = K × e−rT × N(−d2) − S × e−qT × N(−d1)
= 96.0789 × 0.4814 − 100 × 0.3872 = 46.2514 − 38.7184 = 7.5330
Parity check: C − P = S − K × e−rT, so 11.4541 − 7.5330 = 3.9211 = 100 − 96.0789
If the two sides of parity do not agree to the last decimal, the spreadsheet is wrong, usually in a sign of d1 or d2 inside N(−x). Run the check every time; it costs one cell.
The model inputs are all observable except one. Holding everything else at Kestrel 100's values:
| Volatility | d1 | N(d2) | Call | Put | Change in call |
|---|---|---|---|---|---|
| 20% | 0.3000 | 0.5398 | 9.9251 | 6.0040 | −13.3% |
| 22% | 0.2918 | 0.5286 | 10.6888 | 6.7678 | −6.7% |
| 24% | 0.2867 | 0.5186 | 11.4541 | 7.5330 | 0.0% |
| 26% | 0.2838 | 0.5095 | 12.2202 | 8.2991 | +6.7% |
| 28% | 0.2829 | 0.5011 | 12.9867 | 9.0656 | +13.4% |
| Strike | d1 | d2 | N(d2) | Call | Put |
|---|---|---|---|---|---|
| 90 | 0.7257 | 0.4857 | 0.6864 | 17.2443 | 3.7153 |
| 100 | 0.2867 | 0.0467 | 0.5186 | 11.4541 | 7.5330 |
| 110 | −0.1105 | −0.3505 | 0.3630 | 7.2382 | 12.9251 |
Each volatility point is worth about 0.3829 here, the option's vega. Put that beside the model question. The companion workbook prices the same option by a binomial lattice and by simulation, and the three methods sit within 0.0297 of each other, 0.26 per cent of the price. One point of volatility moves the price 12.9 times as much as the choice of model. The formula is rarely the risk; the volatility you put in it is. To go the other way, from a quoted price back to the volatility, see how to calculate implied volatility with Newton's method.
Two errors account for most wrong prices. The first is forgetting to discount the strike: S × N(d1) − K × N(d2) gives 9.4206, 2.0335 too low, and parity no longer closes. The second is ignoring a dividend yield. If the stock actually yields 2 per cent, the correct call is 10.2723 and the put 8.3314; leaving q at zero overstates the call by 1.1817, or 11.5 per cent. Two smaller ones: entering volatility and rate as whole numbers rather than decimals, and mixing a continuously compounded rate with an annual quote.
N(d2) is a risk-neutral probability, not a forecast. It tells you what the hedge costs, not how likely a profit is.
Every intermediate quantity, the lattice and the parity identities are live in the free workbook for this case.
N(d2) is the risk-neutral probability that the call finishes in the money, and K x e^(-rT) x N(d2) is the present value of the strike payment weighted by that probability. For a one-year at-the-money call with a 4 per cent rate and 24 per cent volatility, N(d2) is 0.5186. It is not a forecast of the real-world chance of exercise.
Use K x e^(-rT) x N(-d2) minus S x e^(-qT) x N(-d1), or derive it from parity: put = call minus S plus the discounted strike. With spot and strike at 100, a 4 per cent rate and 24 per cent volatility, the put is 96.0789 x 0.4814 minus 100 x 0.3872, which is 7.5330, and 11.4541 minus 3.9211 gives the same figure.
Very. The sensitivity is vega, S x n(d1) x the square root of T, and for this option it is 0.3829 per volatility point. Moving from 24 to 28 per cent volatility raises the call from 11.4541 to 12.9867, 13.4 per cent. That is far more than the 0.26 per cent spread between Black-Scholes, a binomial lattice and Monte Carlo on the same inputs.
This article is one calculation from Quantitative Finance. The book takes the same case from first principles to the decision, chapter by chapter, and every figure it prints is a live formula in the free companion workbooks.
Get the book on Amazon →Free companion files
Also on Amazon UK · Amazon Germany · Amazon France · Amazon Canada
Reading guide: corporate finance, valuation and markets → · All 453 articles →
If this book helped, or didn’t, a few lines on Amazon are worth more than they look: they are what the next reader goes on. Write a review. The workbook stays free either way.