public DiscretizedVanillaOption(VanillaOption.Arguments args, StochasticProcess process, TimeGrid grid) {
            arguments_ = args;

            stoppingTimes_ = new InitializedList<double>(args.exercise.dates().Count);
            for (int i=0; i<stoppingTimes_.Count; ++i) {
                stoppingTimes_[i] = process.time(args.exercise.date(i));
                if (!grid.empty()) {
                    // adjust to the given grid
                    stoppingTimes_[i] = grid.closestTime(stoppingTimes_[i]);
                }
            }
        }
Beispiel #2
0
        public DiscretizedVanillaOption(VanillaOption.Arguments args, StochasticProcess process, TimeGrid grid)
        {
            arguments_ = args;

            stoppingTimes_ = new InitializedList <double>(args.exercise.dates().Count);
            for (int i = 0; i < stoppingTimes_.Count; ++i)
            {
                stoppingTimes_[i] = process.time(args.exercise.date(i));
                if (!grid.empty())
                {
                    // adjust to the given grid
                    stoppingTimes_[i] = grid.closestTime(stoppingTimes_[i]);
                }
            }
        }
        protected override double?controlVariateValue()
        {
            IPricingEngine controlPE = controlPricingEngine();

            Utils.QL_REQUIRE(controlPE != null, () => "engine does not provide control variation pricing engine");

            VanillaOption.Arguments controlArguments = controlPE.getArguments() as VanillaOption.Arguments;
            controlArguments          = arguments_;
            controlArguments.exercise = new EuropeanExercise(arguments_.exercise.lastDate());

            controlPE.calculate();

            VanillaOption.Results controlResults = controlPE.getResults() as VanillaOption.Results;

            return(controlResults.value);
        }
Beispiel #4
0
        protected override double controlVariateValue()
        {
            IPricingEngine controlPE = controlPricingEngine();

            if (controlPE == null)
            {
                throw new Exception("engine does not provide control variation pricing engine");
            }

            VanillaOption.Arguments controlArguments = controlPE.getArguments() as VanillaOption.Arguments;
            controlArguments          = arguments_;
            controlArguments.exercise = new EuropeanExercise(arguments_.exercise.lastDate());

            controlPE.calculate();

            VanillaOption.Results controlResults = controlPE.getResults() as VanillaOption.Results;

            return(controlResults.value.GetValueOrDefault());
        }
Beispiel #5
0
 public Fj_Helper(VanillaOption.Arguments arguments,
                  HestonModel model,
                  AnalyticHestonEngine engine,
                  ComplexLogFormula cpxLog,
                  double term, double ratio, int j)
 {
     j_      = j; //arg_(arguments),
     kappa_  = model.kappa();
     theta_  = model.theta();
     sigma_  = model.sigma();
     v0_     = model.v0();
     cpxLog_ = cpxLog;
     term_   = term;
     x_      = Math.Log(model.process().s0().link.value());
     sx_     = Math.Log(((StrikedTypePayoff)(arguments.payoff)).strike());
     dd_     = x_ - Math.Log(ratio);
     sigma2_ = sigma_ * sigma_;
     rsigma_ = model.rho() * sigma_;
     t0_     = kappa_ - ((j_ == 1) ? model.rho() * sigma_ : 0);
     b_      = 0;
     g_km1_  = 0;
     engine_ = engine;
 }
 public void setupArguments(VanillaOption.Arguments args)
 {
     this.arguments_ = args;
 }