Early Exercise in Binomial Trees





Kerry Back

Review of binomial tree logic

  • Calculate risk-neutral probability
  • Calculate intrinsic option values at last date
  • Back up in tree:
    • At each date, loop over nodes, calculating option value as discounted expected value.

Example code for a put

import numpy as np
S = 100             # stock price
K = 105              # strike
u = 0.05            # up return per period
r = 0.03            # interest rate per period
n = 4               # number of periods
d = 1/(1+u) - 1     # down return per period
p = (r-d) / (u-d)   # risk-neutral prob
x = [S*(1+u)**(n-2*i) for i in range(n+1)]
v = np.maximum(0, K-np.array(x))
while len(v)>1:
    v = (p*v[:-1]+(1-p)*v[1:]) / (1+r)
v[0]
0.5967712907402317

American options

  • Same logic, except, when looping over nodes,
    • also calculate intrinsic value of option
    • then record value of option as maximum of (i) discounted expected value, and (ii) intrinsic value.
  • When (ii) \(\ge\) (i), exercise is optimal.

Code modification

while len(v)>1:
    v1 = (p*v[:-1]+(1-p)*v[1:]) / (1+r)
    m = len(v1) - 1            # date number
    x = [S*(1+u)**(m-2*i) for i in range(m+1)]
    v2 = np.maximum(0, K-np.array(x))
    v = np.maximum(v1, v2)
V[0]
5.0

More examples

  • It is optimal to exercise a put whenever the stock price is sufficiently low.
  • The ability to exercise early adds value (American > European).