# Pricing European Options with Monte Carlo

Given the following code (S0 = Initial Share Price, r= (risk-free) interest rate, K=Strike, Sigma= Standard Deviation, T=years, nExp=Number of Experiments)

def MonteCarlo_OptionPricing(S0, K, r, sigma, T, nExp=100000):

rMC = rd.randn(n_exp) * sigma * np.sqrt(T) + (r - sigma**2 / 2) * T
ST = S0 * np.exp(rMC)

cT = np.maximum(ST-K, 0)

c0 = np.mean(cT) * np.exp(-r*T)

return c0


For large nExp it will basically return almost the same value for European options as the (standard) Black-Scholes-Model.

My question concerns (r - sigma**2 / 2) * T: What exactly is this part accounting for? Is that taking care of the drift?

Any input is welcome!

The term $$r - \frac{\sigma^2}{2}$$ is used to account for the risk-neutral drift in the spot price evolution.
We do not use drift $$\mu$$ because we are simulating the stochastic process in the risk-neutral world, which states that evolution occurs at the risk-free rate.
You penalize this riskless rate using the volatility term $$\frac{\sigma^2}{2}$$ because of Ito's calculus, which suggests that we need this second term, full explanation here - Geometric Brownian motion - Volatility Interpretation (in the drift term).
• So Iet's denote $\mu = a + \frac{\sigma^2}{2}$ and $a = \mu - \frac{\sigma^2}{2}$. Then we would consider $\mu$ to be some kind of real world drift. Whereas $a$ denotes the risk-neutral drift? Commented May 2 at 21:30
• @MarlonBrando from what I understand, real world drifts aren't computed using the formula you suggested, but rather based on time series of log returns (the simplest model) or other methods. The risk-neutral drift is based on the riskless rate, not a return $\mu$. Commented May 3 at 13:52