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