In a recent post, I introduced Asian options, an exotic option which pay the average of the underlying over a sequence of fixing dates.

The payoff of an Asian call is

and to price the option at an earlier time via risk-neutral valuation requires us to solve the integral

A simple way to do this is using Monte Carlo – we simulate a spot path drawn from the distribution and evaluate the payoff at expiry of that path, then average over a large number of paths to get an estimate of C(t).

It’s particularly easy to do this in Black-Scholes, all we have to do is simulate N gaussian variables, and evolve the underlying according to a geometric brownian motion.

I’ve updated the C++ and Excel Monte Carlo pricer on the blog to be able to price asian puts and calls by Monte Carlo – have a go and see how they behave relative to vanilla options. One subtlety is that we can no longer input a single expiry date, we now need an array of dates as our function input. If you have a look in the code, you’ll see that I’ve adjusted the function optionPricer to take a datatype MyArray, which is the default array used by XLW (it won’t be happy if you tell it to take std::vector). This array can be entered as a row or column of excel cells, and should be the dates, expressed as years from the present date, to average over.

The pricing function has changed to take a risk-free rate and an initial spot; the old one takes a forward and a discount factor. Why did this change? You sometimes seem to use spot and forward interchangably – is this ok?

Jim, these are different ways of representing the same thing. If rates are constant, then a discount factor and a forward is equivalent to a spot and a constant rate (see the formula in the spreadsheet for the conversion factor).

If we want rate to vary with time, we’d need to specify either a sequence of discount factors or a sequence of different rates, so there is an equivalence between the two representations.

Check my post on the time value of money for more details!