Learning Objectives
By the end of this section, you will be able to:
- Explain the structural gap between European and American options: a single deterministic exercise time vs. an optimal stopping decision at every instant up to maturity.
- Argue from first principles when early exercise of a put or call is rational, and why Merton's theorem makes early exercise of an American call on a non-dividend-paying stock irrelevant.
- Set up the free-boundary problem and recognise the variational inequality as the natural calculus statement of optimal exercise.
- Build the Cox-Ross-Rubinstein binomial tree by hand and price a 3-step American put backwards through it.
- Implement the binomial pricer in plain Python and then in PyTorch, getting all the Greeks via one
.backward()call. - Identify the four canonical exotic payoffs (Asian, barrier, lookback, digital) and read them off a simulated GBM path.
- Use Monte-Carlo + autograd as a universal pricer for payoffs that have no closed-form Black-Scholes solution.
The Big Picture: Where Black-Scholes Stops
Every option we have priced so far has been a vanilla European call or put: a payoff or paid out at one fixed time . For that single object, Black-Scholes is a beautiful endgame: a one-line PDE, a one-line formula, and Greeks in closed form.
Reality is messier. On any trading screen you will see two adjacent prices that the textbook formula cannot reach:
- American options — exercise allowed at any instant , not just at maturity. Now pricing is no longer an evaluation — it is an optimal stopping problem.
- Exotic options — payoffs that depend on the entire path of the underlying, not just on : average prices (Asian), barriers (knock-in / knock-out), running extrema (lookback), all-or-nothing payouts (digitals), and combinations of these.
Both extensions break the closed-form magic of Black-Scholes. But the underlying calculus — Itô, risk-neutral expectation, the heat equation in disguise — is unchanged. What changes is the boundary condition: the PDE now lives on a region whose shape we have to solve for, or it lives on a path-functional that only Monte Carlo can integrate.
American Options: The Right to Wait — or Not
A European call says: "pay me at time ." Period. You have one chance.
An American call says: "at any moment you choose, I will pay you and the contract is over." You hold an entire continuum of exercise rights and you must pick which one to use.
Mathematically, the price is the supremum over all stopping times (rules that decide when to exercise using only the information available so far):
Here is the intrinsic-value function ( for a call, for a put). The supremum is taken over all admissible stopping times — that single change is the entire structural difference from Black-Scholes.
Intuition: When Does Early Exercise Pay?
Holding an option is holding a right. The question is whether, at this exact moment, the right is worth more in your hands (continuation value) or in your bank account (intrinsic value ). The optimal rule is
Otherwise and you hold on. Three forces drive the trade-off:
| Force | Wants you to hold (continuation) | Wants you to exercise (intrinsic) |
|---|---|---|
| Volatility σ | Convexity ⇒ more time = more option value | — |
| Time-value of money on the strike (puts) | — | Receive K now ⇒ earn interest on it |
| Dividends on the underlying (calls) | — | Skip the discounting on a dividend you would have foregone |
| Carry on the underlying (puts) | Continuation lets carry build up | — |
For an American put with a positive interest rate , exercise can be rational: cash received today earns risk-free interest you would have to discount away later. Deep enough in the money, already so big and so unlikely to grow much more, it is optimal to take the money.
For an American call on a non-dividend-paying stock, early exercise is never optimal. The reason — Merton, 1973 — is two-line clean: any time you would exercise, you would receive ; but you could instead short the stock, lock in , and invest at the risk-free rate. At maturity you cover, pay only if the call ends in-the-money, and pocket the carry on as a bonus. So holding strictly dominates exercising.
Practical rule of thumb. American calls on non-dividend stocks = European calls. American puts ≠ European puts — and the "early-exercise premium" grows with and with how deep the put is in the money.
The following plot makes the geometry visible. Slide up and watch the American-put curve (orange) peel off the European put (blue) and start hugging the intrinsic line (grey) — and watch the red early-exercise frontier march to the right.
The American put (orange) tracks the European put (blue) when the option is out-of-the-money, then bends up to hug the intrinsic line (grey dashed) once it dives deep enough in-the-money. The crossing point — the red dashed vertical — is the early-exercise frontier: below it, holding wastes time-value of money on the receivable strike. Crank the rate up and watch climb.
The Free-Boundary Problem
In the Black-Scholes derivation (section-04), the option price satisfied the PDE
For an American option, this PDE only holds in the continuation region . In the exercise region the price tracks the intrinsic value , which has its own (different) PDE operator. The boundary between the two — the curve — is not given; it is part of the solution. That is exactly what makes this a free-boundary problem.
The combined statement is the variational inequality:
Read this as two simultaneous statements:
- In the continuation region , so the second argument is negative, which forces the first argument to be zero: . That is BS.
- In the exercise region , so the second argument is zero, which is the binding maximum. The PDE is allowed to fail there — and it does, because the holder has already taken the cash.
max(continuation, exercise). The one line of code in the loop below is the discrete variational inequality.Closed-form solutions for this problem do not exist in general. So we switch to a discrete approximation that converges to it: the binomial tree.
Binomial Trees: Discrete Calculus to the Rescue
Chop time into equal steps of length . At each step, allow the stock to do exactly one of two things:
- go up by a factor , or
- go down by a factor .
The reason for that exact choice — Cox, Ross, Rubinstein 1979 — is that the resulting two-state distribution matches the mean and variance of the continuous-time GBM over the same . As , the binomial price converges to the Black-Scholes price.
To make the binomial market arbitrage-free, the "up" probability under the risk-neutral measure is forced to be
This is the discrete analogue of Girsanov's theorem: it twists the natural up-probability into one under which the stock grows at the risk-free rate.
Given , the algorithm is now four lines of pseudo-code:
- Fill the terminal column with intrinsic payoffs .
- For each earlier slice, compute the continuation value .
- Compute the intrinsic value .
- Set the node value to .
That last is the discrete variational inequality. Everything else is identical to a European tree.
Interactive: The American-Put Binomial Tree
Play with the controls below. Each node shows the stock price , the American option value , and (if toggled on) the European value . Red nodes are the ones where early exercise dominates — the "exercise region" in miniature.
Each node shows the underlying stock price S, the American option value V, and (optionally) the European value E. Red nodes are where exercising right now is better than holding. Cranking rates up for a put, or moving deep into the money, lights up more red.
Things to try:
- Start with the put. Push from to : more red nodes appear on the lower half. Higher rates make "take the strike now and bank it" more attractive.
- Switch to the call. On a non-dividend stock there will be no red nodes anywhere — Merton's theorem in pixels.
- Increase . The European and American values get smoothly closer (more accurate) but their difference — the early-exercise premium — converges to a finite limit. That limit is the analytic premium.
- Move below . The root's European value and American value both rise, but rises faster. Deep ITM puts are where early exercise matters most.
Worked Example (Try It By Hand)
Price an American put with , , year, (deliberately high so early exercise really bites), , on a -step tree ().
Click to expand the by-hand 3-step backward induction
Step 0 — tree parameters. .
Stock tree. Each node has .
.
Step 1 — terminal payoffs (i = 3). :
Step 2 — back to i = 2. At each node compare with the intrinsic value.
exercise > continuation → (early-exercise node).
(hold).
Step 3 — back to i = 1.
(hold — barely).
Step 4 — root i = 0.
Answer: . The corresponding European put on the same tree comes out to . The early-exercise premium is roughly — about of the option's value, paid in exchange for the right to exercise early. Increasing to a few hundred gets you 3-decimal agreement with the converged price.
What just happened geometrically: the single "early exercise" node was , the deep-in-the-money node where the put's strike is so much larger than the stock that holding for one more random walk is simply not worth giving up the immediate . That one node pulled up by .
Plain Python: Binomial American Pricer
Here is the same algorithm written in straight Python. The whole American/European distinction lives on a single line — the max(cont, exer) deep inside the inner loop.
Running this prints:
American put price ≈ 9.9444
Compare against the European put under the same inputs: roughly . The gap is the early-exercise premium for these parameters — it gets larger as you push up or move further below .
PyTorch: Autograd Greeks Through the Tree
On the European side, Greeks were available in closed form. On the American side they are not — the kink at the exercise boundary breaks every analytic derivative formula. So we let autograd do the bookkeeping: write the tree in tensors, call .backward(), and read all the Greeks off.grad.
Expected output (for the worked-example inputs, N = 200):
Price : 9.9407 Delta : -0.4524 Vega : 35.41
The Exotic Zoo: Payoffs That Remember the Path
A European call cares only about — the terminal value. Most real-world exotics care about the entire path . That single change forces Monte Carlo (or path-aware PDE methods) on us, because the BS PDE is path-independent by construction.
| Family | Payoff | What it remembers | Cheaper / pricier than vanilla? |
|---|---|---|---|
| Asian (arithmetic avg) | max(avg(S_t) − K, 0) | The arithmetic average of the path | Cheaper (averaging suppresses terminal vol) |
| Knock-out barrier | vanilla payoff if path never touches B, else 0 | Whether the path ever crossed the barrier | Cheaper (you can lose everything) |
| Knock-in barrier | vanilla payoff if path does touch B, else 0 | Whether the path ever crossed the barrier | Cheaper (you only get a payoff in some scenarios) |
| Lookback call | max(max_t S_t − K, 0) | The running maximum of the path | Pricier (you always get the best-ever price) |
| Digital (cash-or-nothing) | 1 if S_T > K else 0 | Whether the path lands in-the-money (binary) | Cheaper, but huge gamma at the strike |
Notice the common thread: every payoff is a functional of the path — a number you can only compute after you have observed (or simulated) the whole trajectory. That rules out the "just look at " Black-Scholes shortcut.
Interactive: Watch a Path Pay a Payoff
Pick a payoff type, generate a Monte-Carlo path, and watch how each exotic reads the trajectory differently. The pink line is the running arithmetic average (used by Asians); the green line is the running maximum (used by lookbacks); the red dot is the first time the path touches the barrier (used by knock-in / knock-out).
One Monte-Carlo path of geometric Brownian motion. Switch payoff types to see how each one reads the path: pink = running arithmetic average (Asian), green = running maximum (lookback), red dot = barrier touch. The payoff cell at the bottom right populates once the path reaches maturity. Pricing the option means averaging this payoff across millions of independent paths and discounting by e^(-rT).
One path tells you very little about the price — but it tells you everything about the structure of the payoff. Generate a new seed a few times and notice:
- The Asian payoff is almost always smaller than the vanilla payoff on the same path — averaging clips the tails.
- The up-and-out call evaporates the instant the path pokes above . Push the barrier down to a level near the spot and watch how often the option dies.
- The lookback's payoff is driven entirely by the highest point the path ever reached. Cranking up rewards the lookback non-linearly: every jagged spike adds option value.
- The digital pays either or — a binary outcome that depends only on the very last sample.
Monte Carlo + Autograd: The Modern Toolkit
For any payoff that is a functional of the path, the risk-neutral price is
The Monte-Carlo recipe is three lines:
- Simulate independent paths under the risk-neutral measure.
- Evaluate the payoff on each path: .
- Discount and average: .
The standard error decays as — slow, but independent of dimension, which is the entire reason Monte Carlo wins at high dimensions where finite-difference PDE solvers choke.
The classical Greeks question — how do you differentiate with respect to the parameters when randomness is baked into the estimator? — used to require three competing techniques:
- Bump-and-reprice: re-run with , subtract, divide. Easy to code, but each Greek doubles the cost and finite-difference error swamps Monte-Carlo noise.
- Pathwise (IPA): differentiate the path generator and the payoff symbolically. Exact, low-variance — but you write a new estimator per Greek.
- Likelihood-ratio (score): keep the path fixed and differentiate the density. Works for non-smooth payoffs but tends to be noisier.
Autograd automates the pathwise method. You write the price; PyTorch records the graph; .backward() delivers every Greek of every input flagged requires_grad=True. No bumps, no symbolic derivations.
Plain Python: Monte Carlo Asian Call
Here is the simplest possible Monte-Carlo Asian pricer. No NumPy, no vectorisation — just a double loop, so the algorithm is visible. Production code would replace the inner loop with a vectorised tensor pipeline (next code block).
Sample output:
Asian call ≈ 7.1486
For the same inputs, the European call (BS) is . The Asian is roughly of the European premium — exactly the kind of vol-suppression we predicted.
PyTorch: Pathwise Greeks via Autograd
Now we rewrite the same algorithm in torch with two extra wins: (1) the inner loop disappears — every path is computed in parallel as a slab of tensor math; (2) the Greeks of the Monte-Carlo estimator come out of one backward pass.
Expected output (50,000 paths):
Asian price : 7.1432 Delta : 0.5174 Vega : 26.30
torch.randn call.Application: Why Trading Desks Care
Every name on this page corresponds to a multi-billion-dollar market:
- American puts on equity indices. SPX index options are European, but single-stock options listed on US exchanges are American. Every model that prices single-stock options under the BS framework must solve the free-boundary problem above. The early-exercise premium is small but it is real money on a portfolio of millions of contracts.
- Asian options on commodities. Crude oil, jet fuel, gold, agricultural products — every commodity desk uses arithmetic Asians because they suppress squeeze risk on the settlement date. An airline hedging fuel costs over a month would rather pay on the month-average than on one observation that a producer can corner.
- Barrier options in FX. EUR/USD knock-outs, double-no-touch, autocallables — barriers are the bread and butter of structured-product desks. The continuous-monitoring assumption baked into the closed-form Reiner-Rubinstein formulas is, in practice, replaced by a discretely-monitored Monte-Carlo simulation.
- Lookbacks and cliquets in structured products. The retail "principal-protected note" market is full of payoffs of the form "participate in the best of the last months," which is a basket of forward-start cliquets — and every one of them is priced by the autograd Monte-Carlo above.
- Real-options analysis. Outside finance: a mining company deciding when to open a pit, a pharma company deciding when to start a trial, an oil major deciding when to drill — all are American-style optimal-stopping problems on a state variable like commodity price or trial success probability. The same binomial backward induction prices them.
In every case the pattern is the same: describe the payoff as code, simulate or backward-induct, differentiate with autograd, hedge against the Greeks. The elegant closed form of Black-Scholes was the special case where every step had a clean answer; the modern desk is the general case where every step is a tensor operation.
Summary
What we built in this section:
- American options: pricing is an optimal stopping problem. The natural calculus statement is the variational inequality on a free boundary.
- Binomial tree (Cox-Ross-Rubinstein): the discrete pricer that converges to that PDE/inequality. European-to-American is one extra
max(cont, exer)per node — that is the discrete variational inequality made literal. - Autograd Greeks: writing the tree (or Monte-Carlo) in PyTorch and calling
.backward()gives you Delta, Vega, Theta, Rho, Gamma exactly — no bumping, no symbolic derivation. - Exotic options: Asian, barrier, lookback, digital — payoffs that read the entire path, not just . Black-Scholes does not reach them in closed form. Monte-Carlo does, and autograd hands you the pathwise Greeks for free.
- Practical synthesis: in modern code, every option — vanilla, American, exotic, basket, autocallable — is the same six-line skeleton: pick a path generator, evaluate a payoff, mean over paths, discount, call
.backward(). The calculus we developed across the chapter is now a tensor program.
That is where the journey through Black-Scholes ends — not at a single formula, but at a programmable framework that absorbs every special case under one autograd-aware skeleton. The next chapter leaves finance behind and turns to a different masterpiece of 19th- century calculus: Maxwell's equations.
Next steps
- Try implementing the Longstaff-Schwartz least-squares Monte Carlo algorithm — it prices American options without a tree, by regressing the continuation value onto path basis functions.
- Add antithetic variates and a geometric-Asian control variate to the torch Monte-Carlo. You will typically see a 5–10× reduction in standard error for the same number of paths.
- Reproduce the Reiner-Rubinstein closed-form for a continuously monitored knock-out call, then compare it against a discretely monitored Monte-Carlo at increasing monitoring frequencies. The gap is real money.
- Calibrate a local-volatility surface to a real options chain by using the autograd binomial pricer as the loss function — every quoted strike contributes one term, and
.backward()handles the gradient flow.