Monte Carlo Simulation: Pricing by Random Sampling
Chapter 80 is where Wilmott shows you a completely different way to price options. Forget partial differential equations. Forget finite differences. Instead, just simulate random stock price paths, calculate what the option would pay on each path, average the results, and discount back to today. That is Monte Carlo simulation in a nutshell. It sounds almost too simple to work, but it is one of the most powerful tools in all of quantitative finance.
The Core Idea
Here is the recipe for pricing an option with Monte Carlo:
- Start with today’s stock price.
- Simulate a risk-neutral random walk forward to the option’s expiry date.
- Calculate the payoff at expiry for this particular path.
- Repeat steps 1 through 3 thousands (or millions) of times.
- Average all the payoffs.
- Discount that average back to today. That is your option price.
The key word in step 2 is “risk-neutral.” You do not use the stock’s real expected return. You use the risk-free interest rate as the drift instead. This is the same risk-neutral trick from Black-Scholes, just approached from the simulation side rather than the equation side.
For a lognormal random walk, each time step looks like this: the new stock price equals the old stock price multiplied by an exponential of the risk-free drift minus half the variance squared, plus the volatility times a random normal number times the square root of the time step. The nice thing about the lognormal case is that this formula is exact. There is no discretization error. You can even jump from today to expiry in a single giant step if the payoff only depends on the final stock price.
Why People Love Monte Carlo
Wilmott lists a bunch of advantages, and they are all valid:
- The math is basic. You do not need to solve differential equations. If you can generate random numbers and calculate an average, you can do Monte Carlo.
- Correlations between assets are straightforward to handle.
- You can use spreadsheet software if you want.
- Want more accuracy? Just run more simulations.
- Complex path dependence (like Asian options that depend on the average stock price) is easy to incorporate. Just track the average along each path.
- You can change your model without rewriting everything from scratch.
- People in the industry trust the technique. If you show someone a Monte Carlo result, they generally believe it.
Generating the Random Numbers
You need normally distributed random numbers to drive the simulation. Wilmott describes a few approaches.
The quick and dirty method: take 12 uniform random numbers (each between 0 and 1), add them up, and subtract 6. This gives you a variable with mean zero and standard deviation one, and it is close to normal. Good enough for spreadsheet work with small time steps, but not ideal for serious pricing.
The proper method is Box-Muller. Take two uniform random numbers x1 and x2, and transform them into two truly normally distributed numbers using a formula involving square roots and logarithms. This is what most real implementations use. The resulting numbers are genuinely normal, not just approximately.
Real vs. Risk-Neutral: When It Matters
There is an important distinction that Wilmott highlights. For pricing options (where you are hedging), you use the risk-neutral random walk with the interest rate as the drift. But if you want to see what happens when you hold an unhedged option position (speculation), you need the real random walk with the actual expected return of the stock.
Why? Because an unhedged position does not have a guaranteed outcome. You care about the whole distribution of possible payoffs, not just the average. And the real drift rate affects that distribution significantly.
Wilmott shows probability density functions for a call and a put using real drift of 20% and volatility of 20%. The call has about a 25% chance of expiring worthless. The put has about a 75% chance of expiring worthless. These probabilities would be different under the risk-neutral measure, and using the wrong one would give you a misleading picture of your actual risk.
Interest Rate Products
When interest rates are stochastic (which they obviously are in the real world), the Monte Carlo recipe gets a small twist. You simulate the risk-adjusted spot rate path, calculate the payoff, but then you discount using the average interest rate along that specific path. Each path gets its own discount factor because the rate is different on each path.
This makes intuitive sense. If you put money in a bank account, it grows at the spot rate, which changes day to day. The total growth depends on the path of rates, not just some fixed number.
Calculating the Greeks
Getting the delta from Monte Carlo is straightforward in concept. Run the simulation at stock price S+h and again at S-h (using the same random numbers for both). The delta is the difference in option values divided by 2h. Same idea for gamma and theta.
The trick of using the same random numbers is critical. If you use different random numbers, the Monte Carlo noise in each estimate gets amplified when you take the difference, and your greek estimate is garbage.
For a lognormal walk, there is an even easier approach. You do not need to resimulate. Just scale all the final stock prices by a factor (1 + small amount) to get the option value at a slightly higher stock price, and scale by (1 - small amount) for a slightly lower stock price. Delta for almost no extra computational cost.
Higher Dimensions: Cholesky Factorization
Monte Carlo really shines when you have options on multiple assets. A basket option on 50 stocks, for instance. Solving a partial differential equation in 50 dimensions is basically impossible. But simulating 50 correlated stock paths? Totally doable.
The only wrinkle is correlation. You need the random shocks to be correlated. The stock of Apple and the stock of Microsoft should not move completely independently. Cholesky factorization handles this.
Start with uncorrelated normal random numbers. Then multiply them by a special matrix M (the Cholesky factor of the correlation matrix) to get correlated normal numbers. The matrix M is lower triangular, meaning the first correlated variable uses only the first uncorrelated one, the second uses the first two, and so on. Wilmott provides Visual Basic code for the algorithm, and it works for any number of dimensions.
One warning: if you have perfect correlations (exactly +1 or -1), the Cholesky decomposition can blow up. In practice, correlation matrices from real data are rarely perfectly correlated, but it is worth checking.
How Long Does It Take?
The computation time scales as the number of paths times the number of time steps times the number of dimensions. The error goes down as one over the square root of the number of paths. So to improve accuracy by a factor of 10, you need 100 times more paths. That is not great, and it is why variance reduction techniques exist.
Speeding Things Up
Monte Carlo is slow compared to finite differences for low-dimensional problems (one, two, maybe three dimensions). Two main tricks help:
Antithetic variables. For every random path you generate, also create its “mirror” by flipping the sign of all the random numbers. Average the payoffs from both. This guarantees that the symmetry of the normal distribution is preserved in your sample, and it reduces variance for free.
Control variates. If you have a similar option with a known formula (like a vanilla call), value both your exotic option and the vanilla using the same random numbers. The error in the Monte Carlo estimate of the vanilla is known (since you have the exact formula). Use that error to correct your exotic estimate. It is like having a calibration benchmark built into your simulation.
A more sophisticated version of this is martingale variance reduction. You add a carefully chosen variable to each path that has an expected value of zero. It does not change the average, but if chosen well, it dramatically reduces the spread of results around that average.
The American Option Problem
Here is where Monte Carlo hits a wall. European options are easy because you only need the final stock price (or the path for path-dependent ones). American options are hard because at every point in time, you need to decide whether to exercise early or wait. And to make that decision, you need to know the option value for all stock prices at all future times. But basic Monte Carlo only gives you a value at one point.
In principle, you could run separate Monte Carlo simulations at every stock price and time point, building up a complete picture. But the computation time grows exponentially with the number of points. Not practical.
Longstaff-Schwartz: The Clever Fix
Longstaff and Schwartz (2001) came up with an algorithm that makes American option pricing by Monte Carlo actually work. It is the most popular method among practitioners today, and Wilmott walks through it with a detailed example.
The idea: simulate all paths forward as usual. Then work backwards from expiry, one time step at a time. At each step, for paths that are in the money, compare the immediate exercise value with the expected value of holding on. The expected holding value comes from a simple regression of future discounted cashflows against the current stock price.
The regression is the clever part. Instead of running millions of simulations at every stock price, you fit a simple curve (like a quadratic) through the data points you already have. This gives you an approximate continuation value at any stock price, and you can compare it to the exercise value to decide whether to exercise or hold.
Wilmott’s example uses an American put with strike 100, expiring in one year, with 10 simulated paths and 5 time steps. Starting from expiry and working backwards:
- At each time step, find which paths are in the money.
- Regress their discounted future cashflows against their current stock prices.
- Compare “exercise now” vs. “hold on” for each path.
- Update the cashflow matrix accordingly.
After working all the way back to time zero, present-value all cashflows and average. His example gives 6.409, compared to 6.092 from a finite-difference scheme. Not perfect with only 10 paths, but the method converges nicely with more paths.
The choice of basis functions for the regression matters. Simple quadratics work okay, but better choices exist for higher-dimensional problems. Longstaff and Schwartz’s original paper discusses this in detail.
Key Takeaways
- Monte Carlo simulation prices options by averaging discounted payoffs across many random paths. Use the risk-neutral drift for pricing, the real drift for speculation analysis.
- For lognormal models, the time-stepping formula is exact, meaning you can take large time steps without discretization error.
- Cholesky factorization lets you generate correlated random variables for multi-asset problems, making Monte Carlo the go-to method for high-dimensional pricing.
- The method is slow (error goes as 1 over the square root of number of paths), but antithetic variables and control variates help.
- American options were long considered impossible for Monte Carlo. The Longstaff-Schwartz regression approach changed that and is now the industry standard.
Previous post: Two-Factor Models and Finite Differences
Next post: Numerical Integration: From Simple Sums to Quasi-Random Sequences