public static double Theta(double S, double X, double t, double s, double r, EPutCall PutCall) { switch (PutCall) { case EPutCall.Call: return(-S *FinMath.n(FinMath.d1(S, X, t, s, r)) * s / (2.0 * Math.Sqrt(t)) - r * X * Math.Exp(-r * t) * FinMath.N(FinMath.d2(S, X, t, s, r))); case EPutCall.Put: return(-S *FinMath.n(FinMath.d1(S, X, t, s, r)) * s / (2.0 * Math.Sqrt(t)) + r * X * Math.Exp(-r * t) * FinMath.N(-FinMath.d2(S, X, t, s, r))); default: return(0.0); } }
public static double Vega(double S, double X, double t, double s, double r) { return(S * Math.Sqrt(t) * FinMath.n(FinMath.d1(S, X, t, s, r))); }
public static double Gamma(double S, double X, double t, double s, double r) { return(FinMath.n(FinMath.d1(S, X, t, s, r)) / (S * s * Math.Sqrt(t))); }