When I was using Monte Carlo to calculate the gamma of a vanilla call option by finite difference method, I stuck in this weird situation as below.

Consider this, $$ Gamma = \frac{CallPrice(S^{up}_{T}) - 2 * CallPrice(S_{T}) + CallPrice(S^{down}_{T})}{dS^2} $$ And we can choose dS small enough such that when $$ S_{T}>K \text{ then } S^{down}_{T}>K $$ and $$ S_{T}<K \text{ then } S^{up}_{T}<K $$

That is, we can write the above Gamma formula as $$ Gamma = \frac{(S^{up}_{T}-K)I(S_{T}>K) - 2 * (S_{T}-K)*I(S_{T}>K) + (S^{down}_{T}-K)I(S_{T}>K)}{dS^2} $$ $$ = \frac{(S^{up}_{T} - 2 * S_{T} + S^{down}_{T})I(S_{T}>K)}{dS^2} $$ $$ = \frac{(S_{0}+dS)*exp(...) - 2*S_{0}*exp(...) + (S_{0}-dS)*exp(...)}{dS^2} = 0 $$

So every time I run the simulation, I always get a correct delta but wrong gamma. (Not equal to zero maybe because of rounding error?)

I know gamma is nonzero, but I can't find where I did it wrong. Any help?

Note: This question is a bit similar to this one "Greeks: Why does my Monte Carlo give correct delta but incorrect gamma?", but slightly different.


1 Answer 1


Pathwise finite difference Gamma formula is indeed:

$$\Gamma(S_0,T, dS; Z) = (dS)^{-2} \left[ (S_T^{up} (Z) - K)^+ -2 (S_T (Z) - K)^+ + (S_T^{dn} (Z) - K)^+ \right], $$

where $Z$ is a standard normal rv, and

$$ S_T (Z) = S_0\eta (Z), $$

$$ S_T^{up} (Z) = (S_0+dS)\eta(Z) = (S_0+dS)S_0^{-1} S_T (Z) $$

$$ S_T^{dn} (Z) = (S_0-dS)\eta(Z) = (S_0-dS)S_0^{-1} S_T (Z), $$


$$ \eta(Z) = \exp \left( (r-0.5\sigma^2)T + \sigma \sqrt{T} Z \right). $$

For realizations of $Z$, if $ S_T (Z) > K$, then $ S_T^{up} (Z) > K$. We also have $ S_T^{dn} (Z) > K$, but only if:

$$ dS < (S_T(Z) - K)\eta(Z)^{-1}.$$

If $ S_T (Z) <K$, then $ S_T^{dn} (Z) <K$. And $ S_T^{up} (Z) <K$, if

$$ dS < (K -S_T(Z) )\eta(Z)^{-1}. $$

So, for such $Z$ realization and $dS$, we do have:

$$ I(S_T(Z)-K) = I(S_T^{up}(Z)-K) = I(S_T^{up}(Z)-K). $$

If $ S_T (Z) = K$, then $ S_T^{up} (Z) > K$, and $ S_T^{dn} (Z) < K$ no matter what $dS>0$ we choose. So, in this case:

$$ I(S_T(Z)-K) = I(S_T^{dn}(Z)-K) =0 \not= 1 = I(S_T^{up}(Z)-K). $$

The link that you provided offers answers and resources on how to deal with Gamma calculations in Monte Carlo framework.

Note that, with notations above,

$$ \lim_{dS\rightarrow 0}\Gamma(S_0,T, dS; Z) = \delta (S_T(Z)-K) S_T(Z)S_0^{-1}, $$

where $\delta$ is the Dirac delta function. So, computing its expectation via Monte Carlo is bound to give meaningless results. The probability of giving a non-zero result is zero, while in reality we know that:

$$ E[\delta (S_T(Z)-K) S_T(Z)S_0^{-1}] = KS_0^{-1}f(K), $$

where $f$ is the pdf of $S_T(Z)$.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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