Testing Black–Scholes Prices with Monte Carlo Simulation
Summary
The document outlines a basic Monte Carlo check of Black–Scholes pricing. Simulate the underlying under risk-neutral geometric Brownian motion for the option’s life, evaluate the chosen payoff at expiry, average the simulated payoffs, and discount that average at the risk-free rate. The simulated estimate can then be compared with the analytical Black–Scholes value for a vanilla option. It stresses that the simulation dynamics must match the pricing measure; using the wrong drift will not converge to the Black–Scholes price.
The answers suggest common tools and report that tens of thousands to a hundred thousand paths may give a useful estimate with modest laptop computation. Those are approximate guidance, not a guarantee: Monte Carlo error depends on payoff, parameters, discretization, and random sampling. For vanilla options, direct analytical comparison is a narrow model-consistency check, not evidence that Black–Scholes fits market prices or future outcomes. The discussion also mentions PDE methods and replication or hedge P&L as alternative checks, while historical market validation requires actual option data.
Key ideas
- Simulate the underlying under risk-neutral geometric Brownian motion to estimate an option’s discounted expected payoff.
- Compare the Monte Carlo estimate with the analytical price when a closed-form solution is available.
- The risk-free drift is needed for convergence to the Black–Scholes value under risk-neutral pricing.
- Monte Carlo sampling error remains, and agreement with an analytical value does not establish real-market validity.
- PDE pricing and replication or hedge P&L offer additional ways to examine model behavior.
Tags
Full text
# How to conduct Monte Carlo simulations to test validity of Black Scholes for a specific option?
# How to conduct Monte Carlo simulations to test validity of Black Scholes for a specific option?
In reference to the original Black Scholes model, what approach is best to test the model in a rigorous way? Is there a standard approach that can accomplish this in a reasonable amount of time?
Details I require:
- number of trials,
- which software to use, formulas etc.
- any other information that I should be aware of
* This should be able to be done on a laptop with a Core i5 processor with a graphics card.
## Answer by Vytautas (score 5, accepted)
https://quant.stackexchange.com/a/836
- I recommend to use MATLAB / Excel for simplicity - depends which one do you already know.
- Write down the SDE for geometic brownian motion (to simulate stock price over time) on paper, as quant_dev mentioned. Discretize it using i.e. forward Euler discretization (see Wikipedia), code up a MC simulation to simulate it for the time period you want to price your options. Don't forget to use the risk-free dynamics in the SDE, otherwise you wont converge to BS price.
- Code the $f(S_T)$ payoff function for your option payoff.
- Calculate the expected (average over simulations), discounted payoff.
With 10 000 simulations, or even 100 000, there should be a decent convergence of your simulation (error at $10^{-4}$) - your CPU should handle this in a few mins max.
## Answer by quant_dev (score 3)
https://quant.stackexchange.com/a/835
Write out your model as an SDE, simulate it and compare the result with an analytical solution (if you've got one).
## Answer by ast4 (score 2)
https://quant.stackexchange.com/a/838
On the software end, if you want something quick/dirty I would personally go with Matlab/R/python however if you want something a bit more rigorous (e.g. payoff classes, "better" SDEs) something OO like C++ would really be the route to take.
The basic is fairly simple here's a quick sample of what it should look like:
```
double variance = vol*vol*expire;
double rootVariance = sqrt(variance);
double halfVar = -0.5*variance;
double SpotPlusOne = s*exp(r*expire+halfVar);
double Spot;
double runningSum=0;
for (unsigned long i=0; i < NumOfPaths; i++)
{
double SN = SNByBoxMuller();
Spot = SpotPlusOne*exp(rootVariance*SN);
double PayOff = Spot – strike;
PayOff = PayOff >0 ? PayOff : 0;
runningSum += PayOff;
}
double mean = runningSum / NumOfPaths;
mean*=exp(-r*expire);
return mean;
```
The SNByBoxMuller() is just the standard way of generating a random number from a standard normal distribution from Box Muller.
## Answer by Ralph Winters (score 0)
https://quant.stackexchange.com/a/837
I think what you really need to do is test the results of the analytic/simulated solution against the actual AND future historical price. So you need to get historical data for the specific option. That, to me, is much more interesting since it will tell you if Black-Scholes is working vs. the reality. Of course you will need a large number of historical data points to tackle this.
## Answer by TheBridge (score 0)
https://quant.stackexchange.com/a/855
It seems like everyone here is MC but you can use PDE methods as well.
Anyway there is two things that you can usually check, the Price and ... the Hedge (or replication price).
Let's look at the first case:
- If you have closed-form formulas (as is usually the case in the BS "fantas(ma)tic-wishfull thinking"-setting), then that's all you need. If not, then you are not comfortable with your math (or your model but this is another issue).
- If you don't have such an analytical solution at hand, then usually MC comes in naturally (as every one suggests here) but you could use PDE methods aswell (after all it was the original methods for derivation of the BS Call/Put options prices). And you have plenty of books and nice articles that will tell you how to proceed in both cases (especially in BS settings). An easy check that I recommand, is to compare the "closed-form formulas" vs "MC (and/or PDE)" in the vanilla cases. Moreover those methods provide a good introdution to the replication prices that you might be willing to check in the second case.
Note that by using finite difference (or element) methods for the PDE you get an error and that when using discretization sheme for SDE you get at the of the day "random variable" for your P&L. There it is really a matter of taste in my opinion both methods have pros and cons.
For the second case, that I called replication price then it is usually provided in a (at least in principle) straigthforward manner of the methods you used for the PDE and/or SDE discretization.
Still regarding the replication prices, the very recent article of Wilmott and Ahmad "Which Free Lunch Would You Like Today, Sir?: Delta Hedging, Volatility Arbitrage and Optimal Portfolios" is really illuminating in many ways and stays in the BS setting you want to stay within I think you should read it.Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.