# Divergence between binomial pricing and monte carlo simulation for vanilla european call?

I notice a divergence in my own code, but it's evident even in public code:

http://www.thalesians.com/finance/index.php/Knowledge_Base/Finance/Option_Pricing_in_Python_and_Simple_English

Pricing a vanilla option thusly shows large differences in instrument value:

::: BinomialTreeEuropeanCallPrice(50., 50., 0.065, 0.7, 1.)

14.770372341296639

::: MonteCarloEuropeanCallPrice(50., 50., 0.065, 0.7, 1.)

15.790992991711446

::: MonteCarloEuropeanCallPrice(50., 50., 0.065, 0.7, 1.)

15.708282373460175

::: MonteCarloEuropeanCallPrice(50., 50., 0.065, 0.7, 1.)

16.329354195310856

::: BinomialTreeEuropeanCallPrice(50., 50., 0.065, 0.7, 1., N=40)

14.797836571920467

::: MonteCarloEuropeanCallPrice(50., 50., 0.065, 0.7, 1., N=150, pathCount=10000)

15.465674502595983

::: MonteCarloEuropeanCallPrice(50., 50., 0.065, 0.7, 1., N=150, pathCount=10000)

15.716431314886879

Even with sd ~ 40, the standard error on the monte carlo is ~ 0.4, so the price difference is over 2 se away. Is MC convergence truly that slow? Or is the step size just too large causing an upward bias?

The Black-Scholes price of this option is approximately $14.8$. When I run a Monte Carlo simulation with $10000$ paths and "exact" time stepping, I get results very close to this value.

You are simulating the terminal asset price with the first-order Euler approximation over multiple time steps:

$$S(t+\Delta t)= S(t) + rS(t)\Delta t + \sigma S(t)\sqrt{\Delta t}\xi,$$

where $\xi \sim N(0,1).$

This will lead to an inaccurate simulation for high volatility (eg. $70\%).$

The exact solution for geometric Brownian motion over a time step is

$$S(t+\Delta t)= S(t)\exp[(r-\sigma^2/2)\Delta t]\exp[\sigma\sqrt{\Delta t}\xi].$$

With a low-order time stepping scheme you are introducing an upward bias. Either use the exact solution over the time step, or a higher-order numerical method for the SDE, or simply simulate the terminal asset price in one step as as

$$S(T)= S(0)\exp[(r-\sigma^2/2)T]\exp[\sigma\sqrt{T}\xi].$$

You can also include variance reduction techniques in you monte carlo simulations, such as control variates or antithetic variates. Both aim at reducing the variability of your simulated option price and are very popular for monte carlo simulations.

http://en.wikipedia.org/wiki/Antithetic_variates

http://en.wikipedia.org/wiki/Control_variates

Both are very simple to implement, especially antithetic variates which correspond to a second path for your underlying with negatively correlated random numbers to the first path.

Antithetic variates usually work very well and should reduce the variability of your results substantially. Control variates depend on the design of your valuation model and the payoff structure of the derivative. You can also combine both.

The book by Glasserman about Monte Carlo Techniques in Financial Engineering gives some excellent guidance.

I would bet on the slowness on Monte carlo method. Your volatlity is quite high. The error would decrease as var/sqrt(pathcount)= var *0.01, where var is the variance of the final price. 50*0.7*0.01=0.35 ~ 0.4