Skip to content
CONTENTS
Press a letter to jump to a section

Binomial option pricing: build the hedge, then work backwards

Published Updated 5 min readOptions pricing:Part 1Part 2Part 3Part 4Part 5Part 6Part 7Part 8

A pricing formula returns one number. A tree shows the decisions that produce it.

Suppose a stock is at $100 and can move to $120 or $80 in a year. A $100-strike call pays $20 or zero. We can reproduce those payoffs with half a share and borrowing. Its price follows from that hedge, not from guessing which terminal outcome is more likely.

Now repeat the idea over many short intervals. At each node, price the next pair of possible outcomes. Work backwards to today. This is the binomial method, and it becomes especially useful when a contract includes an early-exercise decision.

Replication and the risk-neutral probability at one node

Let a stock be worth SS at a node. Next period it is SuSu or SdSd, with u>du>d. Assume no dividends in this first derivation and let the bank grow by RR.

If the option's next values are VuV_u and VdV_d, the hedge solves:

ΔSu+BR=Vu,ΔSd+BR=Vd.\Delta Su+BR=V_u,\qquad\Delta Sd+BR=V_d.

Therefore:

Δ=Vu−VdS(u−d),V=pVu+(1−p)VdR,p=R−du−d.\Delta=\frac{V_u-V_d}{S(u-d)},\qquad V=\frac{pV_u+(1-p)V_d}{R},\qquad p=\frac{R-d}{u-d}.

The condition d<R<ud<R<u keeps pp between zero and one. It also prevents the stock or bank from dominating the other asset in every state. If your implementation produces p=1.2p=1.2, clipping it to one changes the model and hides the problem. Revisit the step size and parameters.

For u=1.2u=1.2, d=0.8d=0.8, and R=1.05R=1.05, the call price is 11.904811.9048. The up-state pricing probability is 0.625. A historical estimate of 0.60 is irrelevant to this complete two-state replication calculation.

The probability also satisfies pu+(1−p)d=Rpu+(1-p)d=R: under these weights, expected stock growth equals bank growth. With no dividends, the discounted stock is therefore a martingale on the tree. This is the risk-neutral valuation condition applied at each node, and backward induction uses it to price the option.
The single-node replication behind a tree
The single-node replication behind a tree
Each node repeats the same replication argument. This diagram uses the separate one-period teaching example.

The Cox–Ross–Rubinstein binomial tree

The Cox–Ross–Rubinstein construction uses NN intervals of size Δt=T/N\Delta t=T/N:

u=eσΔt,d=u−1,p=e(r−q)Δt−du−d.u=e^{\sigma\sqrt{\Delta t}},\qquad d=u^{-1},\qquad p=\frac{e^{(r-q)\Delta t}-d}{u-d}.

Here qq is a continuous dividend yield. The u,du,d steps describe the ex-dividend stock; r−qr-q sets its risk-neutral carry. These equations are a numerical construction aimed at the diffusion limit. For very coarse steps or extreme carry, the probability may be invalid.

The identity ud=1ud=1 makes the tree recombine: up then down reaches the same price as down then up. At time step nn, the distinct prices are:

Sn,j=S0ujdn−j,j=0,…,n.S_{n,j}=S_0u^jd^{n-j},\qquad j=0,\ldots,n.

There are n+1n+1 nodes at that time, rather than 2n2^n separate histories. Recombination makes vanilla pricing manageable. A payoff that depends on the entire running average cannot generally be valued using only this stock-price node: paths reaching the same stock price can have different averages.

At expiry, assign the contract's payoff to every node. For a European call, VN,j=max⁡(SN,j−K,0)V_{N,j}=\max(S_{N,j}-K,0). Then repeat:

Vn,j=e−rΔt{(1−p)Vn+1,j+pVn+1,j+1}.V_{n,j}=e^{-r\Delta t}\{(1-p)V_{n+1,j}+pV_{n+1,j+1}\}.

Keep the indexing explicit. In this convention jj counts up moves. The upper child receives probability pp. Reversing the weights is an easy bug that can produce plausible-looking prices.

American option pricing and early exercise

At a node an American put can be exercised for K−SK-S. Its owner compares immediate exercise with continuation:

Vn,j=max⁡{K−Sn,j,  Vn,jcontinuation}.V_{n,j}=\max\{K-S_{n,j},\;V_{n,j}^{\mathrm{continuation}}\}.

Suppose a put can receive $20 immediately, while its discounted continuation value is $18.50. The node value is 2020. Exercising exchanges remaining optionality for cash now. Positive rates can make receiving the strike earlier valuable.

That does not mean every in-the-money put should be exercised. If continuation is 2121, waiting is worth more than the immediate $20. Moneyness and optimal exercise answer different questions.

For a non-dividend-paying stock under the usual frictionless assumptions and nonnegative rates, early exercise of an American call is not optimal. Exercise gives up remaining protection and requires paying the strike sooner. Dividends can change that conclusion. A continuous yield is a smooth approximation; an actual discrete ex-dividend date may require a tree specifically designed for cash dividends.

The European and American prices must be computed with the same parameters and grid if we want to interpret their difference as the numerical early-exercise premium. Our lab checks that the American put is at least as valuable as the European put.

Exercise value compared with two continuation values
Exercise value compared with two continuation values
At one node, the decision changes when continuation moves above or below the immediate $20 exercise value. These node values illustrate the rule; they are not outputs of the benchmark tree.

More steps help, but errors can oscillate

For the series benchmark—spot and strike 100100, one year, r=5%r=5\%, q=2%q=2\%, σ=20%\sigma=20\%—the CRR European price tends toward the Black–Scholes result as we refine the grid.

The limiting connection is developed in the Black–Scholes derivation: Brownian motion replaces the small up/down steps, and Itô's lemma supplies the option's continuous-time change. The Python pricing lab measures the finite tree's error against that formula.
CRR call error as time steps increase
CRR call error as time steps increase
The curve is synthetic numerical error against the closed-form price under the same assumptions. Adjacent step counts can lie on opposite sides of the benchmark.

Why oscillation? The payoff has a kink at the strike. Changing the number of steps changes where terminal stock nodes land relative to that kink. A finer grid does not guarantee that every adjacent approximation moves monotonically closer.

Compare several step counts, including even and odd sequences. Look at the size of the error, not just whether the last two prices agree. For early exercise, also inspect the exercise boundary. A single converged European benchmark does not validate every American or barrier implementation.

Barriers introduce another alignment problem. A tree that only checks the barrier at grid times implements discrete monitoring. A contract monitored continuously can knock out between those times. Increasing NN helps, but the contractual monitoring rule must be represented deliberately.

A compact implementation

The lab stores only one time slice of option values. That gives O(N)O(N) working memory for the plain vanilla recursion. It still visits roughly N2/2N^2/2 nodes, so the runtime is O(N2)O(N^2). Recombination saves much more than it eliminates.

Read the terminal payoff first, then the discounted expectation, then the exercise maximum. Each line should correspond to a cash-flow or decision argument. Add discrete dividends, path state, or multiple assets only after explaining why the current state is insufficient.

A tree is a strong choice for a one-dimensional exercise problem and a useful teaching bridge from replication to continuous time. It becomes cumbersome when a contract needs several interacting state variables or a large amount of path history. That is where other numerical methods earn their place.

Try it

For a two-step tree, calculate all three terminal stock prices and call payoffs by hand. Discount the two middle nodes, then today. Now replace the call with a put and compare exercise with continuation at every node. Identify exactly which node changes value; do not simply add an arbitrary premium for being American.

Continue learning

Use the binomial model, backward induction, and American exercise. Next we derive the continuous-time benchmark rather than treating it as a magic formula.

Sources

Go deeper with lessons, derivations and worked exercises behind this article.