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).