Option Explicit Global Const Pi = 3.141592653589 '********************************************************************************** ' http://www.global-derivatives.com - for all your resources 'Black & Scholes Call Delta Function Public Function BSDelta_C(S As Double, x As Double, D As Double, r As Double, V As Double, T As Double) Dim dt As Double, d1 As Double, Nd1 As Double dt = V * Sqr(T) d1 = (Log(S / x) + (r - D + 0.5 * V ^ 2) * T) / dt Nd1 = Norm(d1) BSDelta_C = Nd1 * Exp(-D * T) End Function '********************************************************************************** 'Black & Scholes Put Delta Function Public Function BSDelta_P(S As Double, x As Double, D As Double, r As Double, V As Double, T As Double) Dim dt As Double, d1 As Double, Nd1 As Double dt = V * Sqr(T) d1 = (Log(S / x) + (r - D + 0.5 * V ^ 2) * T) / dt Nd1 = Norm(d1) BSDelta_P = (Nd1 - 1) *Exp(-D*T) End Function '********************************************************************************** 'Black & Scholes Gamma Function Public Function BSGamma_CP(S As Double, x As Double, D As Double, r As Double, V As Double, T As Double) Dim dt As Double, d1 As Double, NN1 As Double dt = V * Sqr(T) d1 = (Log(S / x) + (r - D + 0.5 * V ^ 2) * T) / dt NN1 = (1 / Sqr(2 * Pi) * Exp(-0.5 * d1 ^ 2)) BSGamma_CP = (NN1 * Exp(-D * T)) / (S * dt) End Function '********************************************************************************** 'Black & Scholes Call Theta Function Public Function BSTheta_C(S As Double, x As Double, D As Double, r As Double, V As Double, T As Double) Dim dt As Double, d1 As Double, d2 As Double, Nd1 As Double, Nd2 As Double, NN1 As Double dt = V * Sqr(T) d1 = (Log(S / x) + (r - D + 0.5 * V ^ 2) * T) / dt Nd1 = Norm(d1) d2 = d1 - dt Nd2 = Norm(d2) NN1 = (1 / Sqr(2 * Pi) * Exp(-0.5 * d1 ^ 2)) BSTheta_C = -((S * NN1 * Exp(-D * T) * V) / (2 * Sqr(T))) + (D * S * Nd1 * Exp(-D * T)) - (r * x * Exp(-r * T) * Nd2) End Function '********************************************************************************** 'Black & Scholes Put Theta Function Public Function BSTheta_P(S As Double, x As Double, D As Double, r As Double, V As Double, T As Double) Dim dt As Double, d1 As Double, d2 As Double, NNd1 As Double, NNd2 As Double, NN1 As Double dt = V * Sqr(T) d1 = (Log(S / x) + (r - D + 0.5 * V ^ 2) * T) / dt NNd1 = Norm(-d1) d2 = d1 - dt NNd2 = Norm(-d2) NN1 = (1 / Sqr(2 * Pi) * Exp(-0.5 * d1 ^ 2)) BSTheta_P = -((S * NN1 * V * Exp(-D * T)) / (2 * Sqr(T))) - (D * S * NNd1 * Exp(-D * T)) + (r * x * Exp(-r * T) * NNd2) End Function '********************************************************************************** 'Black & Scholes Vega Function Public Function BSVega_CP(S As Double, x As Double, D As Double, r As Double, V As Double, T As Double) Dim dt As Double, d1 As Double, NN1 As Double dt = V * Sqr(T) d1 = (Log(S / x) + (r - D + 0.5 * V ^ 2) * T) / dt NN1 = (1 / Sqr(2 * Pi) * Exp(-0.5 * d1 ^ 2)) BSVega_CP = S * Sqr(T) * NN1 * Exp(-D * T) End Function '********************************************************************************** 'Black & Scholes Call Rho Function Public Function BSRho_C(S As Double, x As Double, D As Double, r As Double, V As Double, T As Double) Dim dt As Double, d1 As Double, d2 As Double, Nd2 As Double dt = V * Sqr(T) d1 = (Log(S / x) + (r - D + 0.5 * V ^ 2) * T) / dt d2 = d1 - dt Nd2 = Norm(d2) BSRho_C = x * T * Exp(-r * T) * Nd2 End Function '********************************************************************************** 'Black & Scholes Put Rho Function Public Function BSRho_P(S As Double, x As Double, D As Double, r As Double, V As Double, T As Double) Dim dt As Double, d1 As Double, d2 As Double, NNd2 As Double dt = V * Sqr(T) d1 = (Log(S / x) + (r - D + 0.5 * V ^ 2) * T) / dt d2 = d1 - dt NNd2 = Norm(-d2) BSRho_P = -x * T * Exp(-r * T) * NNd2 End Function '********************************************************************************** 'Black & Scholes Call Rho2 Function Public Function BSRho2_C(S As Double, X As Double, D As Double, r As Double, V As Double, T As Double) Dim dt As Double, d1 As Double, d2 As Double, Nd1 As Double dt = V * Sqr(T) d1 = (Log(S / X) + (r - D + 0.5 * V ^ 2) * T) / dt Nd1 = Norm(d1) BSRho2_C = -S * Exp(-D * T) * T * Nd1 End Function '********************************************************************************** 'Black & Scholes Put Rho2 Function Public Function BSRho2_P(S As Double, X As Double, D As Double, r As Double, V As Double, T As Double) Dim dt As Double, d1 As Double, d2 As Double, Nd1 As Double dt = V * Sqr(T) d1 = (Log(S / X) + (r - D + 0.5 * V ^ 2) * T) / dt Nd1 = Norm(-d1) BSRho2_P = S * Exp(-D * T) * T * Nd1 End Function '********************************************************************************** Public Function Norm(x As Double) Norm = Application.WorksheetFunction.NormSDist(x) End Function