Example #1
0
    public override void ProcessPath(ref double[] arr)
    {
        double L = 170.0;
        double rebate = 0.0;
        double P, tmp, u;

        bool crossed = false;

        for (int n = 1; n < arr.Length; n++)
        {
            // Calculate exit probability
            tmp = sde.Diffusion((double)arr[n - 1], (double)(n - 1) * dt);
            //P = 1.0;
            //  if ((arr[n] < L) && (arr[n-1] < L))
            P = Math.Exp(-2.0 * (L - arr[n - 1]) * (L - arr[n]) / (tmp * tmp * dt));

            u = rand.NextDouble();
            if (P >= u)
            {
                counter++;
                //       Console.Write("{0},* {1}, {2},{3},{4} ", P, u, tmp, arr[n-1],arr[n]);
                //    string str = Console.ReadLine();
            }
            if (arr[n] >= L || P >= u)
            //  if (arr[n] >= L)
            { // Down and out
                crossed = true;
                break;
            }
        }

        if (crossed == false)
        {
            //  sum += Math.Max(0.0, arr[arr.Length - 1] - K);
            sum += m_payoff(arr[arr.Length - 1]);
            //   Console.WriteLine(m_payoff((double)75.0));
        }
        else
        {
            sum += rebate;
        }

        NSim++;
    }