6
$\begingroup$

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. enter image description here

$\endgroup$
7
$\begingroup$

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

$\endgroup$
2
$\begingroup$

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.

$\endgroup$
1
$\begingroup$

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

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.