public static double MC(double S, double X, double t, double s, double r, EPutCall PutCall, int n) { double num1 = (r - 0.5 * s * s) * t; double num2 = s * Math.Sqrt(t); double num3 = 0.0; for (int index = 0; index < n; ++index) { num3 += FinMath.Payoff(S * Math.Exp(num1 + num2 * Random.Gaus()), X, PutCall); } return(FinMath.PV4(num3 / (double)n, r, t)); }
public static double BM(double S, double X, double t, double s, double r, EPutCall PutCall, int n) { double F = 0.0; double x1 = FinMath.u(t, s, n); double x2 = FinMath.d(t, s, n); double p = FinMath.p(t, s, n, r); for (int m = 0; m <= n; ++m) { F += FinMath.Binom(m, n, p) * FinMath.Payoff(S * Math.Pow(x1, (double)m) * Math.Pow(x2, (double)(n - m)), X, PutCall); } return(FinMath.PV4(F, r, t)); }