Binomial Option Pricing

Published

October 29, 2026

TipLearning objectives
  1. The one-period model: pricing by replication (\(\Delta\) and \(B\)) and by risk-neutral expectation (\(p^*\)).
  2. Put–call parity inside the binomial model.
  3. Multi-period trees and American options (early exercise at each node).
  4. Options on currencies, where the foreign interest rate plays the role of a dividend yield.

1 Setup and notation

Symbol Meaning
\(S\) current price of the underlying (stock price, or exchange rate in $ per unit of foreign currency)
\(K\) strike price
\(r\) continuously compounded risk-free rate (domestic)
\(\delta\) continuous dividend yield (for currencies: the foreign rate \(r_f\))
\(T\) time to expiration (years)
\(n\) number of binomial periods
\(h = T/n\) length of one period
\(u, d\) up and down factors, so the price moves to \(uS\) or \(dS\)
\(C_u, C_d\) option values in the up and down states next period (similarly \(P_u, P_d\))

In one period the stock moves from \(S\) to either \(uS\) or \(dS\), with \(d < u\).

2 The one-period model

2.1 Replication

The idea is to build a portfolio from the underlying and the risk-free bond that pays exactly what the option pays in both states. We buy \(\Delta\) shares and lend \(B\) dollars (a negative \(B\) means we borrow). Each share pays dividends continuously, which we reinvest in more shares, so \(\Delta\) shares today become \(\Delta e^{\delta h}\) shares at time \(h\). Matching payoffs in both states gives two equations:

\[ \begin{aligned} \Delta\, uS\, e^{\delta h} + B e^{rh} &= C_u, \\ \Delta\, dS\, e^{\delta h} + B e^{rh} &= C_d. \end{aligned} \]

Subtracting the second equation from the first and then solving for \(B\) gives

\[ \boxed{\;\Delta = e^{-\delta h}\,\frac{C_u - C_d}{S(u-d)}, \qquad B = e^{-rh}\,\frac{u\,C_d - d\,C_u}{u-d}.\;} \]

By the law of one price, the option must cost the same as the replicating portfolio:

\[ C = \Delta S + B. \]

TipInterpretation
  • \(\Delta\) measures how sensitive the option is to the underlying. For calls \(0 \le \Delta \le e^{-\delta h}\), and for puts \(-e^{-\delta h} \le \Delta \le 0\).
  • A call is replicated by buying shares and borrowing (\(\Delta > 0\), \(B < 0\)).
  • A put is replicated by short-selling shares and lending (\(\Delta < 0\), \(B > 0\)).
  • These formulas apply to any payoff, not just calls and puts. Replace \(C_u, C_d\) with whatever the derivative pays.

2.2 No-arbitrage condition

The model is free of arbitrage if and only if

\[ d < e^{(r-\delta)h} < u. \]

If \(e^{(r-\delta)h} \ge u\), then shorting the stock and lending the proceeds beats holding the stock in every state, which is an arbitrage. The case \(e^{(r-\delta)h} \le d\) gives an arbitrage in the opposite direction. Always check this condition first.

2.3 Risk-neutral pricing

Substitute \(\Delta\) and \(B\) into \(C = \Delta S + B\) and collect the \(C_u\) and \(C_d\) terms. This gives

\[ C = e^{-rh}\left[p^* C_u + (1-p^*) C_d\right], \qquad p^* = \frac{e^{(r-\delta)h} - d}{u - d}. \]

The no-arbitrage condition is exactly the condition that \(0 < p^* < 1\). Note that \(p^*\) is not the real-world probability of an up move. It is the probability under which the underlying’s total return (price change plus dividends) earns the risk-free rate:

\[ e^{-rh}\left[p^*\, uS + (1-p^*)\, dS\right] = S e^{-\delta h}. \]

NoteTwo routes, one answer

Replication and risk-neutral expectation always give the same price, because the second is derived from the first. On exams, use \(p^*\) to get the price quickly and \(\Delta, B\) when the question asks for the hedge. When a problem asks for “premium, \(\Delta\) and \(B\) at each node”, compute all three and check that \(\Delta S + B\) equals the premium. This catches most arithmetic slips.

2.4 Where do \(u\) and \(d\) come from?

Problems often give \(u\) and \(d\) directly, and in that case use the values given. When only the volatility \(\sigma\) is given, McDonald’s forward tree sets

\[ u = e^{(r-\delta)h + \sigma\sqrt{h}}, \qquad d = e^{(r-\delta)h - \sigma\sqrt{h}}, \]

and the Cox–Ross–Rubinstein tree sets \(u = e^{\sigma\sqrt h}\) and \(d = e^{-\sigma \sqrt h}\). If a problem gives both \(\sigma\) and \(u, d\), the explicit \(u\) and \(d\) take precedence, so \(\sigma\) is not needed.

3 Put–call parity in the binomial model

For European options with the same strike \(K\) and expiry \(T\) on an underlying with dividend yield \(\delta\),

\[ \boxed{\;C - P = S e^{-\delta T} - K e^{-rT}.\;} \]

Proof (one period). Look at the difference \(C - P\). Its payoff is \(\max(S_T - K, 0) - \max(K - S_T, 0) = S_T - K\) in every state, so it is a forward contract. Replicate it with the formulas above, using \(V_u = uS - K\) and \(V_d = dS - K\):

\[ \Delta_C - \Delta_P = e^{-\delta h}\frac{(uS - K) - (dS - K)}{S(u-d)} = e^{-\delta h}, \]

\[ B_C - B_P = e^{-rh}\,\frac{u(dS - K) - d(uS - K)}{u-d} = e^{-rh}\,\frac{-K(u-d)}{u-d} = -K e^{-rh}. \]

Therefore \(C - P = (\Delta_C - \Delta_P)S + (B_C - B_P) = Se^{-\delta h} - Ke^{-rh}\). \(\blacksquare\)

The same result comes out of the risk-neutral formula:

\[ e^{-rh}\left[p^*(uS - K) + (1-p^*)(dS - K)\right] = e^{-rh}\left[S e^{(r-\delta)h} - K\right] = Se^{-\delta h} - Ke^{-rh}. \]

ImportantWhat to notice
  • The parity proof never uses \(p^*\) or the values of \(u\) and \(d\), beyond the model being arbitrage-free. Parity is model-free.
  • It also gives the hedges: \(\Delta_C - \Delta_P = e^{-\delta h}\) and \(B_C - B_P = -Ke^{-rh}\). You can use these to check your trees.
  • Parity holds at every node of a multi-period European tree, with \(S\) and the remaining time to expiry at that node.
  • Parity does not hold as an equality for American options. Instead, \(Se^{-\delta T} - K \le C - P \le S - Ke^{-rT}\).

4 Multi-period trees

4.1 Building the tree

With \(n\) periods, the node reached after \(i\) up moves and \(j\) down moves has price \(S u^i d^j\). The tree recombines (an up move followed by a down move ends at the same price as a down move followed by an up move), so after \(k\) periods there are only \(k+1\) nodes.

4.2 Backward induction

  1. Terminal payoffs. At expiry, set the option value equal to the payoff, e.g. \(C = \max(Su^id^j - K, 0)\).
  2. Step back one period. At each earlier node, apply the one-period formulas using the two values that follow it: \[ \Delta = e^{-\delta h}\frac{V_{\text{up}} - V_{\text{down}}}{S_{\text{node}}(u-d)}, \quad B = e^{-rh}\frac{u V_{\text{down}} - d V_{\text{up}}}{u-d}, \quad V = \Delta S_{\text{node}} + B. \]
  3. Repeat until you reach time 0.

Since \(u\), \(d\), \(r\), \(\delta\) and \(h\) are the same at every node, \(p^*\) is also the same at every node. \(\Delta\) and \(B\), however, change from node to node. This is why replication in a multi-period tree means rebalancing the portfolio at each node. The rebalancing is self-financing: the portfolio you hold coming into a node is worth exactly the cost of the new portfolio.

TipShortcuts that save time
  • If both following values are \(0\), then \(V = \Delta = B = 0\).
  • If both following nodes are in the money for a call, then \(\Delta = e^{-\delta h}\) and \(B = -Ke^{-rh}\). The call acts like a forward contract from that node on. For a put the corresponding values are \(\Delta = -e^{-\delta h}\) and \(B = Ke^{-rh}\).

5 American options

5.1 The early-exercise rule

An American option can be exercised at any node. At each non-terminal node the holder chooses the larger of two values: exercise now, or continue holding.

\[ V_{\text{node}} = \max\Big(\underbrace{\text{payoff}(S_{\text{node}})}_{\text{exercise now}},\; \underbrace{e^{-rh}\left[p^* V_{\text{up}} + (1-p^*)V_{\text{down}}\right]}_{\text{continuation value}}\Big). \]

The continuation value must be computed from the American values at the next nodes, not the European ones. This is the most common mistake students make.

When early exercise is optimal at a node, the option is gone after that node, so no hedge is needed there. These notes report \(\Delta\) and \(B\) at such nodes in brackets. The bracketed values are the hedge you would hold if you chose not to exercise.

5.2 When is early exercise worth it?

Option Gain from exercising early Loss from exercising early Conclusion
Call, \(\delta = 0\) none interest on \(K\) and the insurance the call provides Never exercise early, so American = European
Call, \(\delta > 0\) you start receiving dividends interest on \(K\) and insurance Early exercise is possible when \(\delta\) is large and the call is deep in the money
Put, any \(\delta\) interest earned on \(K\) dividends you would keep collecting on the stock until expiry, and insurance Early exercise is possible when \(r\) is large and the put is deep in the money

For calls, the inequality \(C_{\text{Amer}} \ge C_{\text{Eur}} \ge S e^{-\delta T} - Ke^{-rT} > S - K\) (valid when \(\delta=0\), \(r>0\)) explains why an American call on a non-dividend-paying stock is never exercised early: you could always sell it for more than its exercise value.

An American put on a non-dividend stock can be worth exercising early. Whether it is in a given tree depends on the numbers: you have to compare the exercise value with the continuation value at each node.

6 Options on currencies

Let \(x\) be the exchange rate in domestic currency per unit of foreign currency (for example, $0.92 per euro). One euro is an asset that pays a continuous “dividend” at the euro interest rate \(r_f\), because a euro held in a euro bank account grows at rate \(r_f\). Therefore every formula above carries over with \(S \to x\) and \(\delta \to r_f\):

\[ p^* = \frac{e^{(r - r_f)h} - d}{u-d}, \qquad \Delta = e^{-r_f h}\frac{C_u - C_d}{x(u-d)}, \qquad B = e^{-rh}\frac{uC_d - dC_u}{u-d}. \]

Here \(\Delta\) is the number of euros to buy today and invest at \(r_f\), and \(B\) is the number of dollars to lend at \(r\).

Currency put–call parity reads

\[ C - P = x e^{-r_f T} - K e^{-rT}. \]

NoteEarly exercise of currency options
  • For an American call, the foreign rate acts as a dividend yield, so a large \(r_f\) makes early exercise more attractive.
  • For an American put, a large domestic rate \(r\) makes early exercise more attractive.

7 Worked examples

7.1 Example A: Put–call parity in one period

Data. \(S = 50\), \(K = 50\), \(r = 5\%\), \(\delta = 2\%\), \(u = 1.2\), \(d = 0.85\), \(T = h = 1\).

No-arbitrage check. \(e^{(0.05 - 0.02)} = 1.030455\) and \(0.85 < 1.030455 < 1.2\). \(\checkmark\)

Risk-neutral probability. \[ p^* = \frac{1.030455 - 0.85}{1.2 - 0.85} = 0.515584. \]

Payoffs. \(uS = 60\) and \(dS = 42.5\), so \(C_u = 10\), \(C_d = 0\), \(P_u = 0\), \(P_d = 7.5\).

Call. \[ \Delta_C = e^{-0.02}\frac{10 - 0}{50(0.35)} = 0.560114, \qquad B_C = e^{-0.05}\frac{1.2(0) - 0.85(10)}{0.35} = -23.1013, \] \[ C = 0.560114(50) - 23.1013 = 4.9044. \]

Put. \[ \Delta_P = e^{-0.02}\frac{0 - 7.5}{50(0.35)} = -0.420085, \qquad B_P = e^{-0.05}\frac{1.2(7.5) - 0.85(0)}{0.35} = 24.4602, \] \[ P = -0.420085(50) + 24.4602 = 3.4559. \]

Parity check. \[ C - P = 4.9044 - 3.4559 = 1.4485, \qquad Se^{-\delta T} - Ke^{-rT} = 50e^{-0.02} - 50e^{-0.05} = 1.4485. \;\checkmark \]

The hedges agree with parity as well: \(\Delta_C - \Delta_P = 0.980199 = e^{-0.02}\) and \(B_C - B_P = -47.5615 = -50e^{-0.05}\).

7.2 Example B: Two-period European call

Data. \(S = 100\), \(K = 95\), \(r = 6\%\), \(\delta = 0\), \(u = 1.25\), \(d = 0.85\), \(T = 1\), \(n = 2\), so \(h = 0.5\).

Constants. \(e^{rh} = 1.030455\) and \(e^{-rh} = 0.970446\), so \[ p^* = \frac{1.030455 - 0.85}{0.40} = 0.451136. \]

Stock prices. \(S_u = 125\), \(S_d = 85\), \(S_{uu} = 156.25\), \(S_{ud} = 106.25\), \(S_{dd} = 72.25\).

Terminal payoffs. \(C_{uu} = 61.25\), \(C_{ud} = 11.25\), \(C_{dd} = 0\).

Node \(u\). Both following nodes are in the money, so the call acts like a forward contract from here: \[ \Delta_u = \frac{61.25 - 11.25}{125(0.40)} = 1, \qquad B_u = 0.970446\cdot\frac{1.25(11.25) - 0.85(61.25)}{0.40} = -92.1923 = -95e^{-0.03}, \] \[ C_u = 125 - 92.1923 = 32.8077. \]

Node \(d\). \[ \Delta_d = \frac{11.25 - 0}{85(0.40)} = 0.330882, \qquad B_d = 0.970446\cdot\frac{0 - 0.85(11.25)}{0.40} = -23.1997, \] \[ C_d = 0.330882(85) - 23.1997 = 4.9253. \]

Root. \[ \Delta_0 = \frac{32.8077 - 4.9253}{100(0.40)} = 0.697060, \qquad B_0 = 0.970446\cdot\frac{1.25(4.9253) - 0.85(32.8077)}{0.40} = -52.7192, \] \[ C_0 = 69.7060 - 52.7192 = 16.9867. \]

\[ \begin{array}{ccccc} \textbf{t = 0} & & \textbf{t = 0.5} & & \textbf{t = 1} \\[6pt] & & & & \boxed{\begin{array}{c} S = 156.25 \\ C = 61.25 \end{array}} \\[6pt] & & \boxed{\begin{array}{c} S = 125 \\ C = 32.8077 \\ \Delta = 1.0000 \\ B = -92.1923 \end{array}} & \begin{array}{c}\nearrow \\[14pt] \searrow\end{array} & \\[6pt] \boxed{\begin{array}{c} S = 100 \\ C = 16.9867 \\ \Delta = 0.6971 \\ B = -52.7192 \end{array}} & \begin{array}{c}\nearrow \\[14pt] \searrow\end{array} & & & \boxed{\begin{array}{c} S = 106.25 \\ C = 11.25 \end{array}} \\[6pt] & & \boxed{\begin{array}{c} S = 85 \\ C = 4.9253 \\ \Delta = 0.3309 \\ B = -23.1997 \end{array}} & \begin{array}{c}\nearrow \\[14pt] \searrow\end{array} & \\[6pt] & & & & \boxed{\begin{array}{c} S = 72.25 \\ C = 0 \end{array}} \end{array} \]

Check with \(p^*\). \(C_0 = e^{-2rh}\left[(p^*)^2(61.25) + 2p^*(1-p^*)(11.25)\right] = 16.9867\). \(\checkmark\)

Because \(\delta = 0\), the American call has the same price: at node \(u\), for example, \(32.8077 > 30 = 125 - 95\), so exercising early would throw away value.

7.3 Example C: Two-period American put, where early exercise happens

Data. \(S = 100\), \(K = 110\), \(r = 10\%\), \(\delta = 0\), \(u = 1.2\), \(d = 0.9\), \(T = 1\), \(n = 2\), so \(h = 0.5\).

Constants. \(e^{rh} = 1.051271\) and \(e^{-rh} = 0.951229\), so \(p^* = (1.051271 - 0.9)/0.3 = 0.504237\).

Terminal payoffs. \(S_{uu} = 144\), \(S_{ud} = 108\), \(S_{dd} = 81\), so \(P_{uu} = 0\), \(P_{ud} = 2\), \(P_{dd} = 29\).

European put (for comparison).

  • Node \(u\) (\(S = 120\)): \(\Delta = -0.055556\), \(B = 7.6098\), \(P = 0.9432\).
  • Node \(d\) (\(S = 90\)): \(\Delta = -1\), \(B = 104.6352\), \(P = 14.6352\). Both following nodes are in the money, so \(B = Ke^{-rh}\).
  • Root: \(\Delta = -0.456402\), \(B = 52.9944\), \(P_{\text{Eur}} = 7.3541\).

American put. Work backwards, comparing the two values at each node.

  • Node \(u\): exercise value \(\max(110 - 120, 0) = 0\), continuation \(0.9432\). Hold, so \(V_u = 0.9432\).
  • Node \(d\): exercise value \(110 - 90 = 20\), continuation \(14.6352\). Exercise, so \(V_d = 20\).
  • Root: the continuation value uses the American values \(V_u = 0.9432\) and \(V_d = 20\): \[ e^{-rh}\left[p^*(0.9432) + (1-p^*)(20)\right] = 9.8841. \] The exercise value is \(110 - 100 = 10\), which is larger. Exercise immediately, so \(P_{\text{Amer}} = 10\).

\[ \begin{array}{ccccc} \textbf{t = 0} & & \textbf{t = 0.5} & & \textbf{t = 1} \\[6pt] & & & & \boxed{\begin{array}{c} S = 144 \\ P = 0 \end{array}} \\[6pt] & & \boxed{\begin{array}{c} S = 120 \\ P = 0.9432 \\ \Delta = -0.0556 \\ B = 7.6098 \end{array}} & \begin{array}{c}\nearrow \\[14pt] \searrow\end{array} & \\[6pt] \boxed{\begin{array}{c} S = 100 \\ P = 10.0000^{\,\text{ex}} \\ [\Delta = -0.6352] \\ [B = 73.4068] \end{array}} & \begin{array}{c}\nearrow \\[14pt] \searrow\end{array} & & & \boxed{\begin{array}{c} S = 108 \\ P = 2 \end{array}} \\[6pt] & & \boxed{\begin{array}{c} S = 90 \\ P = 20.0000^{\,\text{ex}} \\ [\Delta = -1.0000] \\ [B = 104.6352] \end{array}} & \begin{array}{c}\nearrow \\[14pt] \searrow\end{array} & \\[6pt] & & & & \boxed{\begin{array}{c} S = 81 \\ P = 29 \end{array}} \end{array} \]

A superscript “ex” marks a node where early exercise is optimal. The bracketed \(\Delta\) and \(B\) at those nodes are the hedge for the continuation value.

Why the answer comes out this way. The interest rate is high (10%) and the put is already in the money. Exercising early lets you collect \(K\) now and earn interest on it, and here that interest is worth more than the protection the put still offers. Compare this with Problem 3 on the worksheet, where the same check says don’t exercise.

7.4 Example D: Two-period currency call, European vs. American

Data. \(x_0 = 1.25\) dollars per pound, \(K = \$1.20\), \(r_{\text{USD}} = 3\%\), \(r_{\text{GBP}} = 8\%\), \(u = 1.15\), \(d = 0.90\), \(T = 0.5\), \(n = 2\), so \(h = 0.25\).

Constants. \[ e^{(r_{\text{USD}} - r_{\text{GBP}})h} = e^{-0.0125} = 0.987578, \qquad e^{-r_{\text{USD}} h} = 0.992528, \qquad e^{-r_{\text{GBP}} h} = 0.980199, \] \[ p^* = \frac{0.987578 - 0.90}{0.25} = 0.350311. \]

Exchange-rate tree. \(x_u = 1.4375\), \(x_d = 1.125\), \(x_{uu} = 1.653125\), \(x_{ud} = 1.29375\), \(x_{dd} = 1.0125\).

Terminal payoffs. \(C_{uu} = 0.453125\), \(C_{ud} = 0.09375\), \(C_{dd} = 0\).

European call.

Node \(x\) \(C\) \(\Delta\) (£) \(B\) ($)
\(u\) 1.4375 0.2180 0.980199 \(-1.1910\)
\(d\) 1.1250 0.0326 0.326733 \(-0.3350\)
root 1.2500 0.0968 0.581550 \(-0.6301\)

American call. At node \(u\), the exercise value \(1.4375 - 1.20 = 0.2375\) is larger than the continuation value \(0.2180\), so exercise early. At node \(d\) the call is out of the money, so hold. At the root, recompute the continuation value with \(V_u = 0.2375\): \[ C_{\text{Amer}} = e^{-r_{\text{USD}} h}\left[p^*(0.2375) + (1-p^*)(0.0326)\right] = 0.1036 > 0.05 = x_0 - K, \] so hold at the root. The root hedge becomes \(\Delta = 0.642708\) and \(B = -0.6998\).

Why the answer comes out this way. The pound interest rate (8%) is much higher than the dollar rate (3%). Holding pounds through the call means giving up that 8% “dividend”, so when the call is deep in the money it pays to exercise and start earning it. The early exercise premium is \(0.1036 - 0.0968 = 0.0068\) dollars per pound.

8 Checklist for the worksheet

  1. Compute \(h\), \(e^{(r-\delta)h}\), \(e^{-rh}\), \(e^{-\delta h}\) and \(p^*\) once, then reuse them.
  2. Check \(d < e^{(r-\delta)h} < u\).
  3. Fill in the price tree and the terminal payoffs.
  4. Step backwards. At each node, compute \(\Delta\), \(B\) and the premium, and check that \(\Delta S + B\) equals the premium.
  5. For American options, compare exercise and continuation values at every node, including time 0, and use the American values when stepping back.
  6. Keep at least 4 decimal places in intermediate steps. In currency problems, use 6, because early-exercise decisions can be close.

9 Appendix: checking trees in Python

Students can run this short function to check their hand calculations. The block is not executed when this document renders.

import math

def binomial(S, K, r, delta, u, d, T, n, kind="call", american=False):
    """Return {(i, j): (S, V, Delta, B, exercised)} for an n-step tree.
    Node (i, j) is time i*h after j down moves."""
    h = T / n
    p = (math.exp((r - delta) * h) - d) / (u - d)
    disc = math.exp(-r * h)
    pay = (lambda s: max(s - K, 0)) if kind == "call" else (lambda s: max(K - s, 0))
    V = {(n, j): pay(S * u**(n - j) * d**j) for j in range(n + 1)}
    out = {}
    for i in range(n - 1, -1, -1):
        for j in range(i + 1):
            s = S * u**(i - j) * d**j
            Vu, Vd = V[(i + 1, j)], V[(i + 1, j + 1)]
            Delta = math.exp(-delta * h) * (Vu - Vd) / (s * (u - d))
            B = disc * (u * Vd - d * Vu) / (u - d)
            cont = disc * (p * Vu + (1 - p) * Vd)
            ex = american and pay(s) > cont
            V[(i, j)] = pay(s) if ex else cont
            out[(i, j)] = (s, V[(i, j)], Delta, B, ex)
    return out

# Example C: American put
for node, vals in sorted(binomial(100, 110, 0.10, 0, 1.2, 0.9, 1, 2,
                                  kind="put", american=True).items()):
    print(node, [round(v, 4) if isinstance(v, float) else v for v in vals])

10 References

  • McDonald, R. L. Derivatives Markets, 3rd ed. Pearson. Chapter 10 (binomial option pricing: one period, multi-period, American options, currency options) and Chapter 11 (early exercise and the risk-neutral interpretation). The notation in these notes (\(\Delta\), \(B\), \(p^*\), forward tree) follows McDonald.
  • Cox, J. C., Ross, S. A., and Rubinstein, M. (1979). Option pricing: A simplified approach. Journal of Financial Economics, 7(3), 229–263. RePEc listing · PDF
Back to top