• Tidak ada hasil yang ditemukan

APPENDIX 4B BINOMIAL TREE OPTION VALUATION FUNCTIONS

The Black–Scholes formula gives values for straightforward European calls and puts. An alternative numerical approach to option valuation, which can be applied to a wide range of options, is the binomial tree method. This approach approximates the development of share prices over the option life by a series of linked probabilistically-determined binomial steps (at which incremental share movements are restricted to up and down movements of known size). This binomial tree structure produces a share price tree with a spread of ending prices and a cluster of paths through the tree of differing frequency.

For each ending node in the tree, the option on the share can be valued and, using the probabilistic structure of the tree, the option payoff can be discounted back to get its present value.

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

A B C D E F G H I

CRR Option Valuation

Share price (S) 100.00 Cox, Ross & Rubinstein

Exercise price (X) 95.00

Int rate-cont (r) 8.00% dt 0.0556

erdt 1.0045

Dividend yield (q) 3.00% ermqdt 1.0028

u 1.0483

Time now (0, years) 0.0000 d 0.9540

Time maturity (T, years) 0.5000 p 0.5177

Option life (T, years) 0.5000 p* 0.4823

Volatility (s) 20.0%

European American

Steps in tree (n) 9 via CRRtree 9.63

iopt 1 via fn 9.63 9.63

option type Call BS value 9.73

Figure 4.6 Option valuation via CRR binomial tree method

The spreadsheet in Figure 4.6 shows details of the call option evaluated previously (with the Black–Scholes function BSOptValue in cell G17) together with the components of a nine-step binomial tree. The life of the option (TD0.5 years) is split into nine time steps each of lengthυt (here 0.0556 years). The objective is to develop a second option valuation function, this time based on the tree valuation method. To understand the VBA code, it is important to understand how valuation occurs in the binomial tree and hence a short digression into the mechanics of the approach is in order. However, in the function to be developed, computation of the binomial tree and the option payoffs at maturity are all contained in the code of the function itself.

The values of the share price up and down multipliers (u and d) and the associated probabilities p and pŁ used at each step are due to Cox, Ross and Rubinstein (CRR).

Their formulas ensure that the resulting share price tree is consistent with the geometric diffusion process considered by practitioners to be realistic for share price processes. The detailed formulas foru,d,p and pŁ need not concern us here, but when applied to the starting price and repeated for all nine steps, these give rise to the share price tree shown in Figure 4.7 below.

17 18 19 20 21 22 23 24 25 26 27 28 29 30

A B C D E F G H I J K

Binomial Tree Valuation Share

0 1 2 3 4 5 6 7 8 9

9 152.85

8 145.81 139.09

7 139.09 132.69 126.58

6 132.69 126.58 120.75 115.19

5 126.58 120.75 115.19 109.89 104.83

4 120.75 115.19 109.89 104.83 100.00 95.40

3 115.19 109.89 104.83 100.00 95.40 91.00 86.81

2 109.89 104.83 100.00 95.40 91.00 86.81 82.81 79.00

1 104.83 100.00 95.40 91.00 86.81 82.81 79.00 75.36 71.89

0 100.00 95.40 91.00 86.81 82.81 79.00 75.36 71.89 68.58 65.43

Figure 4.7 Nine-step share price tree using CRR parameters

Writing VBA User-defined Functions 91 Starting at value 100, one step later the two possible prices are 104.83 (100u) and 95.40 (100d). After nine steps, a share that hasiup moves (and (9i) down moves) will have value 100uid9i, or more generally for ann-step tree:

SinDSuidni

It follows that the 10 payoffs of the associated option at expiry, as shown in cells K49:K58 of Figure 4.8, are given by the formulas:

max[SiX,0] foriD0,1, . . . ,9 andSD100, XD95 For example, for nine up movements the option value is:

max[1001.048995,0]D57.85

The last operation is to value this vector of cells, K49:K58, weighting each by its probability of occurrence and discounting back to time 0. This involves ‘rolling back’ the terminal option payoffs, using the up and down probabilities, pandpŁ, and discounting to get values at step 8 in time, and so on back to their present value. For example at step 8, the option value in cell J50 is [57.85pC44.09pŁ]/1.0045D50.99. The steps are displayed numerically in Figure 4.8, so that the final option value via binomial valuation is shown in cell B58 (9.63 as compared with the Black–Scholes value of 9.73).

47 48 49 50 51 52 53 54 55 56 57 58

A B C D E F G H I J K

Option Value

0 1 2 3 4 5 6 7 8 9

9 57.85

8 50.99 44.09

7 44.47 37.89 31.58

6 38.29 32.00 25.97 20.19

5 32.41 26.41 20.65 15.13 9.83

4 26.84 21.10 15.60 10.32 5.25 0.40

3 21.65 16.27 11.24 6.67 2.81 0.20 0.00

2 16.98 12.13 7.79 4.15 1.50 0.11 0.00 0.00

1 12.96 8.76 5.23 2.52 0.80 0.05 0.00 0.00 0.00

0 9.63 6.15 3.42 1.50 0.42 0.03 0.00 0.00 0.00 0.00

Figure 4.8 Rolling back and discounting option values

The VBA code for the BinOptVal function, based on the CRR tree, is shown below. The statementOption Base 0at the top of the Module sheet is strictly speaking unnecessary.

It merely confirms that for this function, all arrays number from 0, which is the default numbering anyway. The function has eight inputs, includingnstep, the number of steps in the tree. For the moment, the function returns the value of a European option (withiopt = 1 for a call,iopt = –1for a put). At the end of the section, we note how straightforward it is to extend the function code to cover American options as well as the simpler European versions:

Option Base 0 ’arrays number from 0

Function BinOptVal(iopt, S, X, r, q, tyr, sigma, nstep) ‘code for European Options

’returns binomial option value, European only, where iopt = 1 for call, -1 for put Dim delt, erdt, ermqdt, u, d, p, pstar

Dim i As Integer, j As Integer Dim vvec As Variant

ReDim vvec(nstep) ‘known size of vector

’calculate parameters

delt = tyr / nstep ’length of time step

erdt = Exp(rŁdelt) ’compounding factor

ermqdt = Exp((r-q)Łdelt) ’drift term u = Exp(sigmaŁSqr(delt)) ’up multiplier

d = 1 / u ’down multiplier

p = (ermqdt - d) / (u - d) ’up prob

pstar = 1 - p ’down prob

’calculating vector of option values after n steps For i=0 To nstep

vvec(i)=Application.Max(iopt(S(uOi)(dO(nstep-i))-X), 0) Next i

’calculating conditional payoffs & discounting back step-by-step For j=nstep - 1 To 0 Step -1

For i=0 To j

vvec(i)=(pvvec(i+1)+pstarvvec(i))/erdt Next i

Next j

BinOptVal = vvec(0) End Function

The valuation process centres on vector array vvec(), declared as a variant type. For nstep =9, vvec() has 10 values, vvec(0) to vvec(9), as ensured by the dimensioning statementReDim vvec(9), in generalvvec(nstep).

After declaring variables, the CRR tree parameters for the up and down price movements are assigned. For the call option shown in Figure 4.6, the initial values of vvec() are vvec(0)D57.85, vvec1D44.09, . . .vvec(9)D0, i.e. the option payoffs shown in K49:K58 of Figure 4.8. In the VBA code, these values are derived from formulas of the form:

max[SuidnstepiX,0] iD0,1,2, . . . ,nstep The statements producing the initial vvec() array are:

For i = 0 To nstep

vvec(i)=Application.Max(ioptŁ(SŁ(uOi)Ł(dO(nstep-i))-X), 0) Next i

The subsequent five lines of code drive the process of working backwards through the tree, valuing and discounting:

For j = nstep - 1 To 0 Step -1 For i = 0 To j

vvec(i) = (pŁvvec(i+1)+pstarŁvvec(i))/erdt Next i

Next j

Examining the code, at each backwards step (jvalue), the vvec() array is recalculated, replacing redundant values with new values as the option is valued. This has the advantage

Writing VBA User-defined Functions 93 of limiting storage requirements to a single vector with only (nC1) elements. Thus for the nine-step tree, whenjD8, vvec() is re-evaluated, the entries changing to vvec(0)D50.99, vvec(1)D37.89, etc. and when finally jD0, vvec(0) becomes 9.63. (In the spreadsheet in contrast, working backwards through the tree from step 9 to step 0 requires us to display 10 vectors of values, see Figure 4.8). Thus, the present value of the option is contained in vvec(0) whenjD0.

Using this function to evaluate the call via a nine-step tree as in cell G15, we have:

BinOptVal(1, 100, 95, 8%, 3%, 0.5, 20%, 9)

which returns the value 9.63. In general the closeness of the binomial tree option valuation to the Black–Scholes value should improve as the number of steps increases. For example, BinOptVal(1, 100, 95, 8%, 3%, 0.5, 20%, 50) evaluates as 9.74. The proximity of binomial valuation to the Black–Scholes value can be checked out by constructing a Data Table on the function, varying the number of steps, nstep.

Figures 4.6, 4.7 and 4.8 show the binomial tree valuation of a call. If the option is a put, input parameter iopt D 1, and the VBA function statements producing the initial vvec() array:

For i = 0 To nstep

vvec(i)=Application.Max(-1*(S*(uOi)Ł(dO(nstep-i))-X), 0) Next i

give terminal outcomes for the put. Check that for a put:

DBinOptVal(1, 100, 95, 8%, 3%, 0.5, 20%, 9) evaluates as 2.40 as compared with 2.49 for the Black–Scholes value.

American options in contrast to European ones allow the possibility of early exercise, that is, exercise before the option matures. It has been shown that early exercise is never preferable for American calls (in the absence of dividends), so their valuation is exactly the same as European calls. However, for American puts, early exercise is frequently more valuable than waiting until maturity. To adjust the VBA code in the valuation function, BinOptVal, one additional input parameter (ieaD1 for European, ieaD2 for American) is introduced and just one additional line of code is required:

’for Amer options, allowing for early exercise at each step

If iea=2 Then vvec(i)=Application.Max(vvec(i), ioptŁ(SŁ(uOi)Ł(dO(j-i))-X))

The full code for this generalised binomial valuation function, which works for both European and American calls and puts, is set out below:

Function BinOptVal(iopt, iea, S, X, r, q, tyr, sigma, nstep)

’returns binomial option value (iopt=1 for call, -1 for put;

’iea=1 for euro, 2 for amer) Dim delt, erdt, ermqdt, u, d, p, pstar Dim i As Integer, j As Integer Dim vvec As Variant

ReDim vvec(nstep) ’known size of vector

’calculate parameters

delt = tyr / nstep ’length of time step

erdt = Exp(rŁdelt) ’compounding factor

ermqdt = Exp((r-q)Łdelt) ’dividend yield effect u = Exp(sigmaŁSqr(delt)) ’up multiplier

d = 1 / u ’down multiplier

p = (erdt - d) / (u - d) ’up prob

pstar = 1 - p ’down prob

’calculating vector of option values after 9 steps For i = 0 To nstep

vvec(i) = Application.Max(ioptŁ(SŁ(uOi)Ł(dO(nstep - i))-X), 0) Next i

’calculating conditional payoffs & discounting back step-by-step For j = nstep-1 To 0 Step -1

For i = 0 To j

vvec(i) = (PŁvvec(i + 1) + pstarŁvvec(i)) / erdt

’for Amer options, allowing for early exercise at each step If iea = 2 Then vvec(i) = Application.Max(vvec(i),

ioptŁ(SŁ(uOi)Ł(dO(j-i))-X)) Next i

Next j

BinOptVal = vvec(0) End Function

Previously, the value of the European put, with characteristics given in Figure 4.6, eval- uated as 2.40, whereas its American counterpart evaluated as 2.54 on the nine-step tree.