Let us look at a numerical example to clarify the price process. Assume a European call option that matures in a year
in a market where the annual continuously compounded risk-free rate is
. We divide the year into time periods of 2 months in length and so generate a binomial tree with
, i.e.,
. As per equation (13.3),
. Let us fix the factor
and
according to the specification of equation (13.4) so that
takes the value
if state
Up
occurs or the value
if state
Down
occurs. For the time being we do not explain how these factors were determined
Footnote 10, but we will dedicate Section 14.1 to this issue. Hence,
>
evalf(exp((1/5)*sqrt(1/6)));
and Do=
>
evalf(exp(-(1/5)*sqrt(1/6)));
We verify below that these choices for
and
satisfy the no-arbitrage condition. The no-arbitrage condition in a one-period binomial model is satisfied if and only if the system of equations in (2.1) in Chapter 2 is consistent. In our context it can be translated to the system of equations and inequalities represented in (13.22), being consistent.
< 1
(13.22)
The consistency of (13.22) guarantees the existence of a risk-neutral probability under which the expected value of the stock future price, discounted by the risk-free rate, is its current price. The first equation in (13.22) is independent of
, the price of the stock at the beginning of the period and can be rewritten as
.
Hence, if the system in (13.22) is consistent, there are no arbitrage opportunities in each of the one-period binomial models composing the
N
-period binomial tree spanning the full year. Therefore, by Theorem 11, the
N
-period binomial model is arbitrage-free. We ask the reader to verify that
solves the equation above.
With these values for
and
the evolution of the price of the stock is displayed in the spreadsheet below (Table 13.3 in the hard copy). In the on-line version, the reader may change the values of
- the current price of the stock, of
- the annual continuously compounded risk-free rate, and of
- the length of a time period in years, and reevaluate the spreadsheet. Note that for the prepared spreadsheet the maturity time will be
but the reader may increase the number of periods and thereby extend the maturity time. Reevaluating the spreadsheet will triger also the recalculation of the factors
and
and of the risk-neutral probability
.
Table 13.3: A Numeric Price Evolution in a Six-Period Binomial Tree
The value of a European-type contingent claim that pays f(S) at its maturity time (time 6 in our example) can be calculated utilizing the replication approach as in equation (13.21). Alternatively it can be done via the stochastic discount factor as in equation (13.15). In this section we value the call option via the replication approach. We do it in two ways -- once based on equation (13.15), and once showing the price evolution and the replicating portfolio in each time and state.
Let us assign values to the following variables:
> i:='i';j:='j';T:=1;N:=6;r[f]:=.1;
> Up:=evalf(exp(1/5*sqrt(T/N)));Do:=1/Up;S:=100;
> qu:=(exp(r[f]/N)-Do)/(Up-Do);
With these assignments the value of the stochastic discount factor in state at time is given by
> d(N,j):=(N!/(j!*(N-j)!))*exp(-r[f]*T)*qu^j*(1-qu)^(N-j);
We also specify the payoff (value) at a maturity that is defined by the function . The function defined below is the payoff from a European call option with an exercise price of $80. (The reader may choose to define the function f differently in order to value another contingent claim.)
> f:=S->max(S-80,0);
The value of such a contingent claim, utilizing the stochastic discount factor approach, is based on equation (13.15). It is given by the command below:
> 'sum(d(N,j)*f(S*Up^j*Do^(N-j)),j=0..N)'\
> =sum(d(N,j)*f(S*Up^j*Do^(N-j)),'j'=0..N);
We can also calculate the value of the derivative security and its replicating portfolio at each intermediate node. This is not necessary if one is only interested in the value of the European option. However, for an American-type option the situation is different. To pave the ground for our discussion of American options we present the value of the option and its value if exercised at each node.
The value of the option at each node is calculated in a recursive way as was done in the symbolic example of Section 13.2.2. We use the two-dimensional array DerPrice to store the value of the option at each node, where the first index of the array will denote time and the second index denotes the number of up movements since time zero. Hence we assign the value of for ,...,6, as below.
> j:='j':i:=6;
> for j from i to 0 by -1 do;
> DerPrice[i,j]:=f(S*Up^j*Do^(i-j));
> od;
As was seen in the symbolic example at the end of Subsection 13.3.2, we can run a "do loop" within a "do loop" to calculate the value of the option at time 0. This is done below but we will also run it step-by-step and observe the evolution of the price of the option and the replicating portfolios.
> i:='i';j:='j';
> for i from 5 to 0 by -1 do;
> for j from i to 0 by -1 do;
>
> od;
> od;
> DerPrice[0,0];
We therefore conclude that the value calculated in this manner leads to the same price, 28.01861454.
We proceed now to calculate the option value step-by-step and its evolution. Having calculated the value of the option at maturity we can calculate the value of the option at each node at time 5. Its price at time 5 is the discounted expected value of the option price at time 6. Hence,
> j:='j':i:=5;
> for j from i to 0 by -1 do;
>
> od;j:='j':
This option is of European-type and cannot be exercised at time 5. Let us see, however, if it would have been optimal to exercise in some states at time 5, if that possibility had been available to us. We should realize that since the underlying asset pays no dividend, early exercise would not have been optimal. Nevertheless, we present in the group of Maple commands below, the value of the option at time 5 at each node for ,...,5, compared with its value if exercised at time 5, . Furthermore, we display the composition of the replicating portfolio, where is the holding of the stock, and is the amount invested in the risk-free rate. The on-line version of the book presents the output of these commands and also summarizes the output in a spreadsheet. The hard copy of the book only presents the spreadsheet Footnote 11 in the table below.
> for j from i to 0 by -1 do;
> ['j'=j,'S'=S*Up^j*Do^(i-j),'DerPrice'=DerPrice[i,j],\
> 'f(S)'=f(S*Up^j*Do^(i-j)),\
> 'Xs'=(-DerPrice[i+1,j]+DerPrice[i+1,j+1])\
> /(S*Up^j*Do^(i-j)*(Up-Do)),\
> 'Xb'=-(Do*DerPrice[i+1,j+1]-DerPrice[i+1,j]*Up)\
> /((Up-Do))*exp(r[f]*T/N)];
> od;j:='j':
The on-line version of the book proceeds with the recursive solution showing the output of the Maple commands, finding the value of the option at time 4, and continuing to time 3 until we reach time zero. The hard copy of the book will show only the spreadsheet. At each time period we compare the value of the option to its value if exercised immediately and display the replicating portfolio.
> i:=4;
> for j from i to 0 by -1 do;
>
> od;j:='j':
> for j from i to 0 by -1 do;
> ['j'=j,'S'=S*Up^j*Do^(i-j),'DerPrice'=DerPrice[i,j],\
> 'f(S)'=f(S*Up^j*Do^(i-j)),\
> 'Xs'=(-DerPrice[i+1,j]+DerPrice[i+1,j+1])\
> /(S*Up^j*Do^(i-j)*(Up-Do)),\
> 'Xb'=-(Do*DerPrice[i+1,j+1]-DerPrice[i+1,j]*Up)\
> /((Up-Do))*exp(r[f]*T/N)];
> od;j:='j':
> i:=3;
> for j from i to 0 by -1 do;
>
> od;j:='j':
> for j from i to 0 by -1 do;
> ['j'=j,'S'=S*Up^j*Do^(i-j),'DerPrice'=DerPrice[i,j],\
> 'f(S)'=f(S*Up^j*Do^(i-j)),\
> 'Xs'=(-DerPrice[i+1,j]+DerPrice[i+1,j+1])\
> /(S*Up^j*Do^(i-j)*(Up-Do)),\
> 'Xb'=-(Do*DerPrice[i+1,j+1]-DerPrice[i+1,j]*Up)\
> /((Up-Do))*exp(r[f]*T/N)];
> od;j:='j':
Before we continue with the next steps of the calculation we would like to alert the reader again to the evolution and meaning of . We have mentioned before that plays the role of the sensitivity measure. Indeed , the holding of the stock in the replicating portfolio, takes care of the changes in the value of the derivative security that are the result of changes in the price of the stock. In our discussion of the sensitivity measure, Chapter 7, the measure was defined as the (calculus) derivative of the derivative security's price with respect to the stock price. In this model, though, the change in the stock price is discrete and cannot be defined as the (calculus) derivative. In the current setting, is the solution to the system of equations in (13.16) stipulating that holding of units of the stock ensures that the portfolio value is equal to the value of the derivative security in the next time period. The investigation of hedging with in Chapter 8 enforces the similarity between , in the binomial model, and , in a model where the stock price can take any value in [ ).
Looking at the evolution of
and
exemplifies this interpretation. When the call option is in the money it is "closer" in nature to a stock than to a bond and
should be closer to 1. Indeed the closer f(s) is to
, the value of the derivative, the closer
is to 1 and the smaller is
. The reader is encouraged to pay attention to this phenomenon which essentially holds for a put option. However, in the case of a put, the larger the value of the stock, the smaller the value of the put option and hence we expect
to be negative and close to
. We proceed now with the final steps of the calculation. Observe the evolution of
, keeping in mind the explanation above.
> i:=2;
> for j from i to 0 by -1 do;
>
> od;j:='j':
> for j from i to 0 by -1 do;
> ['j'=j,'S'=S*Up^j*Do^(i-j),'DerPrice'=DerPrice[i,j],\
> 'f(S)'=f(S*Up^j*Do^(i-j)),\
> 'Xs'=(-DerPrice[i+1,j]+DerPrice[i+1,j+1])\
> /(S*Up^j*Do^(i-j)*(Up-Do)),\
> 'Xb'=-(Do*DerPrice[i+1,j+1]-DerPrice[i+1,j]*Up)\
> /((Up-Do))*exp(r[f]*T/N)];
> od;j:='j':
> i:=1;
> for j from i to 0 by -1 do;
> DerPrice[i,j]:=exp(-r[f]*T/N)*\
> (qu*DerPrice[i+1,j+1]+(1-qu)*DerPrice[i+1,j]);
> od;j:='j':
> for j from i to 0 by -1 do;
> ['j'=j,'S'=S*Up^j*Do^(i-j),'DerPrice'=DerPrice[i,j],\
> 'f(S)'=f(S*Up^j*Do^(i-j)),\
> 'Xs'=(-DerPrice[i+1,j]+DerPrice[i+1,j+1])\
> /(S*Up^j*Do^(i-j)*(Up-Do)),\
> 'Xb'=-(Do*DerPrice[i+1,j+1]-DerPrice[i+1,j]*Up)\
> /((Up-Do))*exp(r[f]*T/N)];
> od;j:='j':
> i:=0;
> for j from i to 0 by -1 do;
>
> od;j:='j':
> for j from i to 0 by -1 do;
> ['j'=j,'S'=S*Up^j*Do^(i-j),'DerPrice'=DerPrice[i,j],\
> 'f(S)'=f(S*Up^j*Do^(i-j)),\
> 'Xs'=(-DerPrice[i+1,j]+DerPrice[i+1,j+1])\
> /(S*Up^j*Do^(i-j)*(Up-Do)),\
> 'Xb'=-(Do*DerPrice[i+1,j+1]-DerPrice[i+1,j]*Up)\
> /((Up-Do))*exp(r[f]*T/N)];
> od;j:='j':i:='i':
We confirm that the call price is indeed 28.01861454 as calculated before and that it was not optimal to exercise the option prior to maturity. The latter follows since there was no node at which , the payoff from the option if exercised, was larger than the option's value. This, as we know from Chapter 12, is not necessarily the situation for a put option, even a put written on a stock that pays no dividends. The next subsection exemplifies the optimality of early exercising of a put option within the framework of the binomial model.
We repeat the same sort of calculations, only this time for a put option. The only change required for this calculation is the definition of the payoff function at maturity. Nevertheless, for convenience we redefine all the parameters below.
> i:='i':j:='j':T:=1:N:=6:r[f]:=.1:
> Up:=evalf(exp(1/5*sqrt(T/N)));Do:=1/Up;S:=100;
> qu:=(exp(r[f]/N)-Do)/(Up-Do);
> d(N,j):=(N!/(j!*(N-j)!))*exp(-r[f]*T)*qu^j*(1-qu)^(N-j);
Here is where the value of is defined to reflect a put payoff at maturity.
> f:=S->max(80-S,0);
The value of the put based on equation (13.15) is given by the command below.
> 'sum(d(N,j)*f(S*Up^j*Do^(N-j)),j=0..N)'\
> =sum(d(N,j)*f(S*Up^j*Do^(N-j)),'j'=0..N);
We proceed to calculate step-by-step the value of the put option based on the replication approach. We start, as we did for the call option, with the value of the put at maturity.
> i:=6:j:='j';
> for j from i to 0 by -1 do;
> DerPrice[i,j]:=f(S*Up^j*Do^(i-j));
> od;j:='j':
The value of the put can be calculated as before using a "do-loop" within a "do-loop". This is done below:
> i:='i';j:='j';
> for i from 5 to 0 by -1 do;
> for j from i to 0 by -1 do;
> DerPrice[i,j]:=exp(-r[f]*T/N)*\
> (qu*DerPrice[i+1,j+1]+(1-qu)*DerPrice[i+1,j]);
> od;
> od;i:'i':j:='j':
> DerPrice[0,0];
We confirm that the value of the put coincides with its value calculated using the stochastic discount approach. We continue with the step-by-step calculation, displaying the replicating portfolio and the optimal early exercise situations. As expected, in the case of a put, it might be optimal to exercise prior to maturity. Note that at certain states and times might be less than , which means exercising would be optimal.
> i:=5;
> for j from i to 0 by -1 do;
> DerPrice[i,j]:=exp(-r[f]*T/N)*\
> (qu*DerPrice[i+1,j+1]+(1-qu)*DerPrice[i+1,j]);
> od;j:='j':
> for j from i to 0 by -1 do;
> ['j'=j,'S'=S*Up^j*Do^(i-j),'DerPrice'=DerPrice[i,j],\
> 'f(S)'=f(S*Up^j*Do^(i-j)),\
> 'Xs'=(-DerPrice[i+1,j]+DerPrice[i+1,j+1])\
> /(S*Up^j*Do^(i-j)*(Up-Do)),\
> 'Xb'=-(Do*DerPrice[i+1,j+1]-DerPrice[i+1,j]*Up)\
> /((Up-Do))*exp(r[f]*T/N)];
> od;j:='j':
The reader's attention is drawn to the values displayed in the row that corresponds to
. The value of
is larger than the value of the option, meaning it would have been optimal to exercise the option, were it of the American-type. The spreadsheet displays the values of
in case early exercise is optimal, i.e., if
, in [ ]. The table in the hard copy also displays these values of
in bold fonts.
The value of
is negative since the put option behaves like a short position in the stock. Recall the payoff graph of a put option (see Figure 4.7 in Chapter 4) in comparison to the payoff from a short position in a stock. In the region when the put option is in the money, its payoff graph has a slope like that of the payoff from a short position in the stock i.e., of -1. Thus the deeper in the money the put is, the closer is
to -1. Observe the evolution of
in comparison to the value of the derivative and to the instances where early exercise, if possible, would have been optimal.
> i:=4;
> for j from i to 0 by -1 do;
> DerPrice[i,j]:=exp(-r[f]*T/N)*\
> (qu*DerPrice[i+1,j+1]+(1-qu)*DerPrice[i+1,j]);
> od;j:='j':
> for j from i to 0 by -1 do;
> ['j'=j,'S'=S*Up^j*Do^(i-j),'DerPrice'=DerPrice[i,j],\
> 'f(S)'=f(S*Up^j*Do^(i-j)),\
> 'Xs'=(-DerPrice[i+1,j]+DerPrice[i+1,j+1])\
> /(S*Up^j*Do^(i-j)*(Up-Do)),\
> 'Xb'=-(Do*DerPrice[i+1,j+1]-DerPrice[i+1,j]*Up)\
> /((Up-Do))*exp(r[f]*T/N)];
> od;j:='j':
Here we see again that for a value of , early exercise would have been optimal. The value of the option is $6.85 and by exercising it one collects $7.86. If the option had been American it would have been exercised. This would trigger a domino effect causing a change in the value of the option at time i=3, which in turn would cause a change in the value of the option at time i=2. We shall examine this in the next subsection where an American option is valued. The rest of this subsection presents the evolution of the value of the European put and its replicating portfolios.
> i:=3;
> for j from i to 0 by -1 do;
> DerPrice[i,j]:=exp(-r[f]*T/N)*\
> (qu*DerPrice[i+1,j+1]+(1-qu)*DerPrice[i+1,j]);
> od;j:='j':
> for j from i to 0 by -1 do;
> ['j'=j,'S'=S*Up^j*Do^(i-j),'DerPrice'=DerPrice[i,j],\
> 'f(S)'=f(S*Up^j*Do^(i-j)),\
> 'Xs'=(-DerPrice[i+1,j]+DerPrice[i+1,j+1])\
> /(S*Up^j*Do^(i-j)*(Up-Do)),\
> 'Xb'=-(Do*DerPrice[i+1,j+1]-DerPrice[i+1,j]*Up)\
> /((Up-Do))*exp(r[f]*T/N)];
> od;j:='j':
> i:=2;
> for j from i to 0 by -1 do;
> DerPrice[j,i]:=exp(-r[f]*T/N)*\
> (qu*DerPrice[i+1,i+1]+(1-qu)*DerPrice[i+1,i]);
> od;j:'j':
> for j from i to 0 by -1 do;
> ['j'=j,'S'=S*Up^j*Do^(i-j),'DerPrice'=DerPrice[i,j],\
> 'f(S)'=f(S*Up^j*Do^(i-j)),\
> 'Xs'=(-DerPrice[i+1,j]+DerPrice[i+1,j+1])\
> /(S*Up^j*Do^(i-j)*(Up-Do)),\
> 'Xb'=-(Do*DerPrice[i+1,j+1]-DerPrice[i+1,j]*Up)\
> /((Up-Do))*exp(r[f]*T/N)];
> od;j:='j':
> i:=1;
> for j from i to 0 by -1 do;
> DerPrice[i,j]:=exp(-r[f]*T/N)*\
> (qu*DerPrice[i+1,j+1]+(1-qu)*DerPrice[i+1,j]);
> od;j:='j':
> for j from i to 0 by -1 do;
> ['j'=j,'S'=S*Up^j*Do^(i-j),'DerPrice'=DerPrice[i,j],\
> 'f(S)'=f(S*Up^j*Do^(i-j)),\
> 'Xs'=(-DerPrice[i+1,j]+DerPrice[i+1,j+1])\
> /(S*Up^j*Do^(i-j)*(Up-Do)),\
> 'Xb'=-(Do*DerPrice[i+1,j+1]-DerPrice[i+1,j]*Up)\
> /((Up-Do))*exp(r[f]*T/N)];
> od;j:='j':
> i:=0;
> for j from i to 0 by -1 do;
> DerPrice[i,j]:=exp(-r[f]*T/N)*\
> (qu*DerPrice[i+1,j+1]+(1-qu)*DerPrice[i+1,j]);
> od;j:='j':
> for j from i to 0 by -1 do;
> ['j'=j,'S'=S*Up^j*Do^(i-j),'DerPrice'=DerPrice[i,j],\
> 'f(S)'=f(S*Up^j*Do^(i-j)),\
> 'Xs'=(-DerPrice[i+1,j]+DerPrice[i+1,j+1])\
> /(S*Up^j*Do^(i-j)*(Up-Do)),\
> 'Xb'=-(Do*DerPrice[i+1,j+1]-DerPrice[i+1,j]*Up)\
> /((Up-Do))*exp(r[f]*T/N)];
> od;j:='j':i:='i':
We shall now proceed with the calculation of the value of an American option. The reader probably expects, given the examples above, the methods by which this will be done.
Because of the possibility of early exercise, there is no analytical solution for the value of an American put option. The nonexistence of an analytical solution follows from the fact that in order to value this option, one needs to know when it is optimal to exercise it. On the other hand, in order to know if it is optimal to exercise the option one needs to know its value. This creates a vicious circle that cannot be overcome analytically. The value of an American option for which early exercise is not optimal is equal to the value of an otherwise identical European option. Such is the case, as we have seen in Chapter 12, for an American call option on a stock that pays no dividends. Hence, if it is not possible to prove that the early exercise is not optimal we have to resort to numerical solutions.
The previous section and Chapter 12, within the context of the binomial model, demonstrated that early exercise of an American put might be optimal. Those descriptions pointed to the method of identifying, within the context of the binomial model, a numerical solution for the value of American options lacking an analytical solution. The vicious circle, mentioned above, can be overcome within the binomial model framework, again by recursive valuation. Starting from the maturity time and going backward, the option value, if the option is not exercised, is calculated at each possible state of nature and compared to its value if exercised. The ''true'' value of the option at each node is the maximum of these two values. Hence, when the recursion continues, backward, it takes into account the additional value due to the possibility of early exercise.
Calculating the price of an American option, we transverse back from the maturity time
to time
, and so on. At each time we evaluate whether or not it is optimal to exercise the option, given the time and the realized state. Since the value of the option at maturity is known, we essentially can apply the pricing-by-arbitrage arguments of the one-period model to value the option at each of the coordinates (
) for
,...,
. After all, looking ahead from a coordinate (
), for some
, one sees exactly the same situation as in a one-period binomial model. Therefore, at that time, we can compare the value of the option if not exercised to its value if exercised. We are not sure which of the (
),...,(
) states will be realized at time
. Hence we calculate the value of the option at each possible state. Continuing in the same manner we can find the value of the option at time zero.
Let us see how this works. We reassign the following parameters and redefine
to be the payoff from a put option with an exercise price of $80.
> i:='i';j:='j';T:=1;N:=6;r[f]:=.1;
> Up:=evalf(exp(1/5*sqrt(T/N)));Do:=1/Up;S:=100;
> qu:=(exp(r[f]/N)-Do)/(Up-Do);
> f:=S->max(80-S,0);
Since we have to take into account the possibility of early exercise it is not possible to value the option via the stochastic discount factor approach as we did for a European option. We will have to do it recursively step-by-step as explained in Section (13.4.3). Let us assign the value of the put option at maturity to , j =0,...,6. This value, needless to say, coincides with the value of a European option at maturity.
> i:='6':j:='j':
> for j from i to 0 by -1 do;
> DerPrice[i,j]:=f(S*Up^j*Do^(i-j));
> od;
We then go a step backward and again consider the value of the option if it is held without being exercised. As we have seen before, at a few states in time (nodes), it was profitable to exercise the option. At these nodes the payoff from exercising the option is larger than the value if exercised. The possibility of early exercise does not influence the value of the option at maturity. Thus for both American and European options the value at maturity is the payoff from the option.
Having calculated, as above, the value of the option at time 6 we can calculate its value at each node at time 5 if not exercised. This amounts to calculating the discounted expected value of the option payoff at each node. The next step is to calculate the value of the option if exercised at this point, i.e.,
, for j=0,..,5. The value of the option at each node (i,j) is the larger of the two values calculated. Hence, at each node, we should check if it is optimal to exercise the option and value the option it by
,
(13.23)
where
.
Calculating the value at each node based on equation (13.23) affects the value of the option at all the nodes prior in time to this node, and so alters the value of the option at time zero. It also follows that a very small change in the code shown above for a European option will suffice to value an American option. This is exemplified below where the value of the American option is calculated by a "do-loop" within a "do-loop".
> i:='i';j:='j';
> for i from 5 to 0 by -1 do;
> for j from i to 0 by -1 do;
> DerPrice[i,j]:=max(exp(-r[f]*T/N)*\
> (qu*DerPrice[i+1,j+1]+(1-qu)*DerPrice[i+1,j]),f(S*Up^j*Do^(i-j)));
> od;
> od;
> DerPrice[0,0];
> i:='i';j:='j';
The comparison of this value to the counterpart European option below reveals that the European option is cheaper.
> 'sum(d(N,j)*f(S*Up^j*Do^(N-j)),j=0..N)'\
> =sum(d(N,j)*f(S*Up^j*Do^(N-j)),'j'=0..N);
This confirms that the possibility of early exercise increases the value of an American option option relative to its European equivalent.
To gain a better understanding and to visualize the impact of early exercise, we repeat the above calculations step-by-step. In addition we would like to keep a record of the coordinates at which it was optimal to excise the option prior to maturity. We define as an object where we keep these coordinates. We will add another line to the code above that will append the coordinate ( ) to this object if it was optimal to exercise the option there, that is, if ( ) satisfies the inequality in (13.24).
(13.24)
We initialize to be the empty set, unassign the values of and , and then run the modified code.
> OptExer:={};
> i:='i':j:='j';
> for j from 5 to 0 by -1 do;
> for i from j to 0 by -1 do;
> DerPrice[j,i]:=max(exp(-r[f]*T/N)*\
> (qu*DerPrice[j+1,i+1]+(1-qu)*DerPrice[j+1,i]),f(S*Up^i*Do^(j-i)));
> if exp(-r[f]*T/N)*(qu*DerPrice[j+1,i+1]+(1-qu)*DerPrice[j+1,i])\
> <f(S*Up^i*Do^(j-i)) then OptExer:=[[j,i],op(OptExer)] fi;
> od;
> od;
> DerPrice[0,0];
The coordinates at which it was optimal to exercise the option are now contained in .
> OptExer;
The following command superimposes a blue box on each node of the binomial tree at which it is optimal to exercise the option. This is displayed in Figure 13.5.
> BinTree(6,OptExer);
Figure 13.5: A Binomial Tree with a Box Superimposed on Nodes Where Early Exercise Is Optimal
Let us rerun this same valuation again, but for a higher exercise price so that it will make it optimal to exercise prior to maturity more frequently. We thus reassign the variables and change the payoff function f to have an exercise price of $110.
> j:='j':i:=6;
> f:=S->max(110-S,0);
> for j from i to 0 by -1 do;
> DerPrice[i,j]:=f(S*Up^j*Do^(i-j));
> od;
> OptExer:={};
> i:='i':j:='j':
> for j from 5 to 0 by -1 do;
> for i from j to 0 by -1 do;
> DerPrice[j,i]:=max(exp(-r[f]*T/N)*\
> (qu*DerPrice[j+1,i+1]+(1-qu)*DerPrice[j+1,i]),f(S*Up^i*Do^(j-i)));
> if exp(-r[f]*T/N)*(qu*DerPrice[j+1,i+1]+(1-qu)*DerPrice[j+1,i])\
> <f(S*Up^i*Do^(j-i)) then OptExer:=[[j,i],op(OptExer)] fi;
> od;
> od;
The price of such an option will be
> DerPrice[0,0];
and the nodes at which it is optimal to exercise this option are given below.
> OptExer;
The next command superimposes the boxes on the nodes in which the option should be exercised. Figure 13.6 in the hard copy displays the output.
> BinTree(6,OptExer);
Figure 13.6: A Binomial Tree with a Box Superimposed on Nodes Where Early Exercise Is Optimal for a Binary Option
We can utilize the template presented above to calculate the prices of different types of American options. Suppose we have an option that pays $10 if the price of the stock falls below $90, and zero otherwise. This is an example of a binary options introduced in Section 4.5. In Chapter 4 we only approximated the value of such a European option by replicating its payoff using plain vanilla puts and calls. Since the option is American and the payoff is $10 or nothing, if the price of the stock falls below $90 it should be clear that it is optimal to excise immediately. To value such an option we need only to change the payoff function and define it as below.
> f:=S->piecewise(S<90,10);
The payoff at maturity is displayed in the on-line version of the book in the figure below, but is omitted from the hard copy.
> plot(f(s),s=0..150,thickness=3);
We keep the parameters as above and change only the form of . The valuation code is rerun below.
> j:='j':i:=6;
> for j from i to 0 by -1 do;
> DerPrice[i,j]:=f(S*Up^j*Do^(i-j));
> od;
> OptExer:={};
> i:='i':j:='j':
> for j from 5 to 0 by -1 do;
> for i from j to 0 by -1 do;
> DerPrice[j,i]:=max(exp(-r[f]*T/N)*\
> (qu*DerPrice[j+1,i+1]+(1-qu)*DerPrice[j+1,i]),f(S*Up^i*Do^(j-i)));
> if exp(-r[f]*T/N)*(qu*DerPrice[j+1,i+1]+(1-qu)*DerPrice[j+1,i])\
> <f(S*Up^i*Do^(j-i)) then OptExer:=[[j,i],op(OptExer)] fi;
> od;
> od;
The price of such an option is therefore
> DerPrice[0,0];
The nodes at which it is optimal to exercise the option are presented and the binomial tree with these nodes superimposed is displayed in Figure 13.7.
> OptExer;
> BinTree(6,OptExer);
Figure 13.7: A Binomial Tree with a Box Superimposed on Nodes Where Early Exercise Is Optimal
Footnotes
As might be suspected, the under the square root sign is indeed and the meaning of the will be uncovered soon.
The spreadsheet uses some global variables that are defined by the Maple commands. However, the reader may change the template presented above and modify the spreadsheet to summarize the new results.