Risk-Neutral Drift in Monte Carlo Option Pricing
Summary
The document diagnoses why a Monte Carlo estimate of a European call price differs sharply from its Black–Scholes value. In the simulation, the stock paths use a drift parameter called mu, while the Black–Scholes calculation prices the option using the risk-free rate. Under risk-neutral pricing, the simulated asset drift should be the risk-free rate, not the physical expected return, with the payoff then discounted at that rate.
The answer identifies this drift mismatch as the likely cause of the discrepancy. The code uses a finite number of simulated paths and time steps, so sampling variation can remain after correcting the drift; however, the response does not quantify that error or review other implementation details. Its central lesson is to align the Monte Carlo dynamics with the pricing measure used by the analytical benchmark before comparing prices.
Key ideas
- Risk-neutral Monte Carlo pricing uses the risk-free rate as the simulated asset drift.
- Using a physical expected return instead of the risk-free rate can inflate or otherwise alter estimated option values.
- The simulated payoff should be discounted consistently with the risk-free rate.
- Monte Carlo sampling can still cause estimation error even when the drift is correct.
- The response identifies the drift mismatch but does not provide a full code review.
Tags
Full text
# Monte Carlo simulation and Black Scholes give different results in my code # Monte Carlo simulation and Black Scholes give different results in my code I am a student, so please don't judge me for stupid questions. I'm writing a code to valuate call option (based on random geometric Brownian motion) using Monte Carlo Simulation and Black Scholes Model, however, I am getting absolutely different results. Here is my code: ``` T=1; n=100; d=T/n; N=1000; S0=100; mu=0.2; s=0.1; r=0.01; K=105; t=0:d:T; W=zeros(N,n+1); Z= randn(N,n); W=cumsum([zeros(N,1) sqrt(d)*Z],2); S=S0*exp((mu-0.5*s^2).*t+s*W); payoffs=max(S(:,n+1)-K,0); disc_payoffs=payoffs/exp(r*(T-t(1))); MC=mean(disc_payoffs); d1=(log(S0./K)+(r+0.5.*s^2).*(T-t(1)))/(s.*sqrt(T-t(1))); d2=(log(S0./K)+(r-0.5.*s^2).*(T-t(1)))/(s.*sqrt(T-t(1))); BS=S0.*normcdf(d1)-K.*exp(-r.*(T-t(1))).*normcdf(d2); ``` With MC my answer is around 17, but with BS is always 2 point something. Could you please help me to find the mistake? ## Answer by dm63 (score 3) https://quant.stackexchange.com/a/36961 It seems that you are using mu in your MC code where you should be using r. The reason that we use r instead of mu is that we need to perform risk-neutral pricing. Please read about that in detail if you are not familiar.
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.