Numerical Greeks

Numerical Greeks or Greeks by Finite Difference

Analytical Greeks are the standard approach to estimating Delta, Gamma etc... That is what we typically use when we can derive from closed form solutions. Normally, these are well-defined and available in text books. Previously, we relied on closed form solutions for the call or put formulae differentiated with respect to the Black Scholes parameters. When Greeks formulae are difficult to develop or tease out, we can alternatively employ numerical Greeks - sometimes referred to finite difference approximations. A key advantage of numerical Greeks relates to their estimation independent of deriving mathematical Greeks. This could be important when we examine American options where there may not technically exist an exact closed form solution that is straightforward to work with. Below we have put together some some VBA code to implement a batch of numerical Greeks. The BSMCall and BSMPut VBA analytical functions can be obtained from the previous pages. These seem to tally with Numerical Greeks. We observed that when we graphically explored the relationship between analytical and numerical Greeks can be found here (or on previous page.) For a more technical approach, please follow this link. Espen Haug also employed both approaches when estimating Greeks for GBS.

'Call


Function DeltaCN(S, K, T, r, q, Sigma)

dS = 0.01

DeltaCN = (BSMCall(S + dS, K, T, r, q, Sigma) - BSMCall(S - dS, K, T, r, q, Sigma)) / (2 * dS)

End Function


Function GammaCN(S, K, T, r, q, Sigma)

dS = 0.01

GammaCN = (DeltaCN(S + dS, K, T, r, q, Sigma) - DeltaCN(S - dS, K, T, r, q, Sigma)) / (2 * dS)

End Function


Function VegaCN(S, K, T, r, q, Sigma)

dSigma = 0.0001

VegaCN = (BSMCall(S, K, T, r, q, (Sigma + dSigma)) - BSMCall(S, K, T, r, q, (Sigma - dSigma))) / (2 * dSigma)

End Function


Function ThetaCN(S, K, T, r, q, Sigma)

dT = 0.0001

ThetaCN = (BSMCall(S, K, (T + dT), r, q, Sigma) - BSMCall(S, K, (T - dT), r, q, Sigma)) / (-2 * dT)

End Function


Function RhoCN(S, K, T, r, q, Sigma)

dR = 0.0001

RhoCN = (BSMCall(S, K, T, (r + dR), q, Sigma) - BSMCall(S, K, T, (r - dR), q, Sigma)) / (2 * dR)

End Function



'Put


Function DeltaPN(S, K, T, r, q, Sigma)

dS = 0.01

DeltaPN = (BSMPut(S + dS, K, T, r, q, Sigma) - BSMPut(S - dS, K, T, r, q, Sigma)) / (2 * dS)

End Function


Function GammaPN(S, K, T, r, q, Sigma)

dS = 0.01

GammaPN = (DeltaPN(S + dS, K, T, r, q, Sigma) - DeltaPN(S - dS, K, T, r, q, Sigma)) / (2 * dS)

End Function


Function VegaPN(S, K, T, r, q, Sigma)

dSigma = 0.0001

VegaPN = (BSMPut(S, K, T, r, q, (Sigma + dSigma)) - BSMPut(S, K, T, r, q, (Sigma - dSigma))) / (2 * dSigma)

End Function


Function ThetaPN(S, K, T, r, q, Sigma)

dT = 0.0001

ThetaPN = (BSMPut(S, K, (T + dT), r, q, Sigma) - BSMPut(S, K, (T - dT), r, q, Sigma)) / (-2 * dT)

End Function


Function RhoPN(S, K, T, r, q, Sigma)

dR = 0.0001

RhoPN = (BSMPut(S, K, T, (r + dR), q, Sigma) - BSMPut(S, K, T, (r - dR), q, Sigma)) / (2 * dR)

End Function