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 Delta(double S, double X, double t, double s, double r, EPutCall PutCall) { switch (PutCall) { case EPutCall.Call: return(FinMath.N(FinMath.d1(S, X, t, s, r))); case EPutCall.Put: return(FinMath.N(FinMath.d1(S, X, t, s, r)) - 1.0); default: return(0.0); } }
public static double BS(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)) - 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)) + 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))); }
public static double d2(double S, double X, double t, double s, double r) { return(FinMath.d1(S, X, t, s, r) - s * Math.Sqrt(t)); }