Below, we observe the difference between American and European Options making reference to Whaley (1986) who considers options on futures valuation. Check out pdf version. To speed up estimation we apply the Leisen Reimer (1996) binomial tree in lieu of Cox, Ross and Rubinstein. For a deep dive check out the last two video clips on this page. Immediately below, the VBA Code for Leisen Reimer is set up largely based on Espen Haug. We truncate the zero region of the tree and make use of dynamic memory. (The zero region in Leisen Reimer is quite subtantial). This further accelerates estimation. We estimate both American and European analogue options with varying stock prices. By setting dividend yield = the risk free rate we can deduce an estimation for options based on futures. The lower bounds for both European and American options are included in graphing and dividends and interest rates are dynamically adjusted.
Public Function LeisenReimerTrunc(AmeEurFlag As String, CallPutFlag As String, S As Double, X As Double, _
T As Double, r As Double, b As Double, v As Double, n As Integer) As Variant
Dim OptionValue() As Double
'Dim ReturnValue(3) As Double
Dim d1 As Double, d2 As Double
Dim hd1 As Double, hd2 As Double
Dim u As Double, d As Double, p As Double
Dim dt As Double, Df As Double
Dim i As Integer, j As Integer, z As Integer
n = Application.Odd(n)
ReDim OptionValue(0 To n)
If CallPutFlag = "c" Then
z = 1
ElseIf CallPutFlag = "p" Then
z = -1
End If
d1 = (Log(S / X) + (b + v ^ 2 / 2) * T) / (v * Sqr(T))
d2 = d1 - v * Sqr(T)
'// Using Preizer-Pratt inversion method 2
hd1 = 0.5 + Sgn(d1) * (0.25 - 0.25 * Exp(-(d1 / (n + 1 / 3 + 0.1 / (n + 1))) ^ 2 * (n + 1 / 6))) ^ 0.5
hd2 = 0.5 + Sgn(d2) * (0.25 - 0.25 * Exp(-(d2 / (n + 1 / 3 + 0.1 / (n + 1))) ^ 2 * (n + 1 / 6))) ^ 0.5
dt = T / n
p = hd2
u = Exp(b * dt) * hd1 / hd2
d = (Exp(b * dt) - p * u) / (1 - p)
Df = Exp(-r * dt)
For i = 0 To n
OptionValue(i) = Application.Max(0, z * (S * u ^ i * d ^ (n - i) - X))
Next
If z = 1 Then
For j = n - 1 To ((n + 1) / 2) Step -1
For i = (j - ((n - 1) / 2)) To j
If AmeEurFlag = "e" Then
OptionValue(i) = (p * OptionValue(i + 1) + (1 - p) * OptionValue(i)) * Df
ElseIf AmeEurFlag = "a" Then
OptionValue(i) = Application.Max((z * (S * u ^ i * d ^ (j - i) - X)), _
(p * OptionValue(i + 1) + (1 - p) * OptionValue(i)) * Df)
End If
Next
Next
ElseIf z = -1 Then
For j = n - 1 To ((n + 1) / 2) Step -1
For i = 0 To ((n - 1) / 2)
OptionValue((n + 1) / 2) = 0
If AmeEurFlag = "e" Then
OptionValue(i) = (p * OptionValue(i + 1) + (1 - p) * OptionValue(i)) * Df
ElseIf AmeEurFlag = "a" Then
OptionValue(i) = Application.Max((z * (S * u ^ i * d ^ (j - i) - X)), _
(p * OptionValue(i + 1) + (1 - p) * OptionValue(i)) * Df)
End If
Next
Next
End If
For j = ((n + 1) / 2) - 1 To 0 Step -1
For i = 0 To j + 1
If AmeEurFlag = "e" Then
OptionValue(i) = (p * OptionValue(i + 1) + (1 - p) * OptionValue(i)) * Df
ElseIf AmeEurFlag = "a" Then
OptionValue(i) = Application.Max((z * (S * u ^ i * d ^ (j - i) - X)), _
(p * OptionValue(i + 1) + (1 - p) * OptionValue(i)) * Df)
End If
Next
Next
LeisenReimerTrunc = OptionValue(0)
End Function
In the video below, we set out the main factors that contribute to making American Futures Options more valuable than their European analogue.
We again emphasize below some of benefits of using Leisen Reimer (1996) when estimating American Options. We note that if set the cost of carry equal the zero then the binomial tree can be easily applied to the options on futures valuation.
Below we set two mini-lectures that examine differences in valuation when comparing American and European options. Some discussion of option properties and lower bonds are included.