We now consider using Monte Carlo methods to estimate the price of an European option, and let us first consider the case of the ``usual'' European Call, which is priced by the Black Scholes equation. Since there is already a closed form solution for this case, it is not really necessary to use simulations, but we use the case of the standard call for illustrative purposes.
At maturity, a call option is worth
Lognormal variables are simulated as follows. Let be normally distributed with mean zero and
variance one. If follows a lognormal distribution, then the one-period-later price is
The above shows the case for a call option. If we want to price other types of options, with different
payoffs we could write similar routines for every possible case. But this would be wasteful, instead a
bit of thought allows us to write option valuations for any kind of option whose payoff depend on the
value of the underlying at maturity, only. Let us now move toward a generic routine for pricing
derivatives with Monte Carlo. This relies on the ability of C ++ to write subroutines which one call with
function prototypes, i.e. that in the call to to the
subroutine/function one provides a function instead of a variable. Consider pricing of standard European
put and call options. At maturity each option only depend on the value of the underlying and the
exercise price through the relations
The interesting part comes when one realises one can write a generic simulation routine to which one provide one of these functions, or some other function describing a payoff which only depends on the price of the underlying and some constant. Code 11.5 shows how this is done.
Note the presence of the line
double payoff(const double& price, const double& X),in the subroutine call. When this function is called, the calling program will need to provide a function to put there, such as the Black Scholes example above. Code 11.6 shows a complete example of how this is done.
Simulated call option price = 14.995 Black Scholes call option price = 14.9758 Simulated put option price = 5.5599 Black Scholes put option price = 5.45954As we see, even with as many as 50,000 simuations, the option prices estimated using Monte Carlo still differs substantially from the ``true'' values.
There are a number of ways of ``improving'' the implementation of Monte Carlo estimation such that the estimate is closer to the true value.
One is the method of control variates. The idea is simple. When one generates the set of terminal values of the underlying security, one can value several derivatives using the same set of terminal values. What if one of the derivatives we value using the terminal values is one which we have an analytical solution to? For example, suppose we calculate the value of an at the money European call option using both the (analytical) Black Scholes formula and Monte Carlo simulation. If it turns out that the Monte Carlo estimate overvalues the option price, we think that this will also be the case for other derivatives valued using the same set of simulated terminal values. We therefore move the estimate of the price of the derivative of interest downwards.
Thus, suppose we want to value an European put and we use the price of an at the money European call as
the control variate.
Using the same set of simulated terminal values , we estimate the two options using Monte Carlo
Code 11.7 shows the implementation of a Monte Carlo estimation using an at-the-money European call as the control variate.
An alternative to using control variates is to consider the method of antithetic variates. The idea behind this is that Monte Carlo works best if the simulated variables are
``spread'' out as closely as possible to the true distribution. Here we are simulating unit normal random
variables. One property of the normal is that it is symmetric around zero, and the median value is zero.
Why don't we enforce this in the simulated terminal values? An easy way to do this is to first simulate a
unit random normal variable , and then use both and to generate the lognormal random
variables. Code 11.8
shows the implementation of this idea.
Boyle (1977) shows that the efficiency gain with antithetic variates is not particularly large. There are other ways of ensuring that the simulated values really span the whole sample space, sometimes called ``pseudo Monte Carlo.''
Let us see how these improvements change actual values. We use the same numbers as in code 11.6, but add estimation using control and antithetic variates. Code 11.9 shows a complete example of how this is done.
Running this program results in the output:
Black Scholes call option price = 14.9758 Simulated call option price = 14.995 Simulated call option price, CV = 14.9758 Simulated call option price, AV = 14.9919 Black Scholes put option price = 5.45954 Simulated put option price = 5.41861 Simulated put option price, CV = 5.42541 Simulated put option price, AV = 5.46043
These generic routines can also be used to price other options. Any European option that only depends on the terminal value of the price of the underlying security can be valued. Consider the binary options discussed by e.g. Hull (2003). An cash or nothing call pays a fixed amount if the price of the asset is above the exercise price at maturity, otherwise nothing. An asset or nothing call pays the price of the asset if the price is above the exercise price at maturity, otherwise nothing. Both of these options are easy to implement using the generic routines above, all that is necesary is to provide the payoff functions as shown in code 11.10.
Now, many exotic options are not simply functions of the terminal price of the underlying security, but depend on the evolution of the price from ``now'' till the terminal date of the option. For example options that depend on the average of the price of the underlying (Asian options). For such cases one will have to simulate the whole path. We will return to these cases in the chapter on pricing of exotic options.
Boyle (1977) is a good early source on the use of the Monte Carlo technique for pricing derivatives. Simulation is also covered in Hull (2003).