American options on Futures
Options on Futures
A major innovation of the 1980s was the introduction of exchange-traded option contracts written on underlying assets other than individual stocks. The CBOE and AMEX moved to listed interest rate options in October 1982. In the same month Options on Futures were listed on the CBT in the form of Treasury bond futures options. Around the same time the Coffee, Sugar, and Cocoa Exchange (CSCE) began to list options on sugar and gold futures. In January 1983, the CME and the New York Futures Exchange (NYFE) followed by listing options directly on stock index futures. An option on a futures contract affords the holder the right, but not the obligation, to buy or sell a specific futures contract at a pre-determined exercise price. These type of options can be either American or European in nature. Options on Futures are no different to basic stock options, but some theory is worth outlining and valuation for European style can be accomplished by using Black (1976) or the Binomial framework. American options we will examine here by applying the Binomial framework. Below, we outline some VBA code for valuing American and European Options on Futures.
VBA Static Code for estimating Options on Futures using a Cox, Ross and Rubinstein tree
Function CRRTreeF(F, K, T, rf, vol, n, OpType As String, ExType As String)
dt = T / n
u = Exp(vol * (dt ^ 0.5))
d = 1 / u
' I just changed the code for p
p = (1 - d) / (u - d)
' Tree for stock price
' spot was taken out and replaced with F
Dim S() As Double
ReDim S(n + 1, n + 1) As Double
For i = 1 To n + 1
For j = i To n + 1
S(i, j) = F * u ^ (j - i) * d ^ (i - 1)
Next j
Next i
' Calculate Terminal Price for Calls and Puts
Dim Op() As Double
ReDim Op(n + 1, n + 1) As Double
For i = 1 To n + 1
Select Case OpType
Case "C": Op(i, n + 1) = Application.Max(S(i, n + 1) - K, 0)
Case "P": Op(i, n + 1) = Application.Max(K - S(i, n + 1), 0)
End Select
Next i
' Calculate Remaining entries for Calls and Puts
For j = n To 1 Step -1
For i = 1 To j
Select Case ExType
Case "A":
If OpType = "C" Then
Op(i, j) = Application.Max(S(i, j) - K, Exp(-rf * dt) * (p * Op(i, j + 1) + (1 - p) * Op(i + 1, j + 1)))
ElseIf OpType = "P" Then
Op(i, j) = Application.Max(K - S(i, j), Exp(-rf * dt) * (p * Op(i, j + 1) + (1 - p) * Op(i + 1, j + 1)))
End If
Case "E":
Op(i, j) = Exp(-rf * dt) * (p * Op(i, j + 1) + (1 - p) * Op(i + 1, j + 1))
End Select
Next i
Next j
CRRTreeF = Op(1, 1)
End Function
Below, we set out some theoretical background for applying the Cox, Ross and Rubinstein tree to valuing options on Futures. The format follows John C Hull: Option Futures and Other Derivatives.
Below, we continue with theory and provide a 2 step tree numerical example that we can square with VBA code above to verify code is in line with a simplified example:
Below, we continue with the a 2 step example to test VBA code for American and European options. We then take some more numerically intensive estimations from Chaudhury (1995) and illustrate that VBA code above produces consistent results. The Binomial Tree is valued for both European and and American style Options. VBA code is used to verify the 2 step tree. The same VBA Code is benchmarked against Chaudhury (1995)
In the video below, we work out the value of the European Put and American Put and demonstrate put call parity for Options on Futures.
Below, we estimate and compare the VBA static code above and verify results from Chaudhury (1995).