# Greeks: Why does my Monte Carlo give correct delta but incorrect gamma?

For a vanilla European call, my Monte Carlo method gives the right option price and delta but the wrong gamma. In particular, the value of gamma varies wildly each time I run the method. I estimate gamma by $$\Gamma = \frac{C(S+\Delta S,K,T,\sigma,r) - 2C(S,K,T,\sigma,r) + C(S-\Delta S,K,T,\sigma,r)}{(\Delta S)^2}$$ Here's my Matlab code. Could anyone tell me what I'm doing wrong? Thanks.

the problem is that the pay-off has discontinuous first derivative. Try a contract with pay-off that is twice differentiable and it will probably work.

The problem is that all the value comes from the tiny number of paths within $\Delta S$ of the strike, and these paths have huge value.

This is a well-known problem. As the bump size goes to zero, the pathwise value converges to differentiating along the path twice. Since the second derivative is a delta function, you get nonsense. A huge amount of work has gone into coping with discontinuities for the pathwise method. See eg http://ssrn.com/abstract=2431580

It's a combination of too few sample paths and/or too small an increment.

Your estimation error on the price is magnified by the $dS^2$. Try using a larger sample or a larger increment. Alternatively, you can use a multiplier instead of a fixed increment; in my experience, it usually yields better results.

consider adjoint algorithmic differentiation to get an exact derivative here. Works especially well for monte carlo. Here is an example paper: http://luca-capriotti.net/pdfs/Finance/jcf_capriotti_press_web.pdf

• Straight differentiation doesn't work when the pay-off has discontinuous first derivative. Making it adjoint only affects computational order not accuracy. – Mark Joshi Jun 8 '15 at 21:49