예제 #1
0
        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));
        }
예제 #2
0
        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));
        }