Пример #1
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]);
                }
            }
        }
        public DiscretizedBarrierOption(BarrierOption.Arguments args, StochasticProcess process, TimeGrid grid = null)
        {
            arguments_ = args;
            vanilla_   = new DiscretizedVanillaOption(arguments_, process, grid);

            Utils.QL_REQUIRE(args.exercise.dates().Count > 0, () => "specify at least one stopping date");

            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 != null && !grid.empty())
                {
                    // adjust to the given grid
                    stoppingTimes_[i] = grid.closestTime(stoppingTimes_[i]);
                }
            }
        }
Пример #3
0
        // McSimulation implementation
        protected override TimeGrid timeGrid()
        {
            Date   lastExerciseDate = (arguments_ as OneAssetOption.Arguments).exercise.lastDate();
            double t = process_.time(lastExerciseDate);

            if (timeSteps_ != null)
            {
                return(new TimeGrid(t, timeSteps_.Value));
            }
            else if (timeStepsPerYear_ != null)
            {
                int steps = (int)(timeStepsPerYear_ * t);
                return(new TimeGrid(t, Math.Max(steps, 1)));
            }
            else
            {
                Utils.QL_FAIL("time steps not specified");
                return(null);
            }
        }