protected override PathPricer <IPath> pathPricer() { Exercise exercise = arguments_.exercise; Utils.QL_REQUIRE(exercise.type() == Exercise.Type.European, () => "only european exercise is supported"); double exerciseTime = process_.time(exercise.lastDate()); return(new HestonHullWhitePathPricer(exerciseTime, this.arguments_.payoff, (HybridHestonHullWhiteProcess)process_)); }
public static FdmStepConditionComposite vanillaComposite(DividendSchedule cashFlow, Exercise exercise, FdmMesher mesher, FdmInnerValueCalculator calculator, Date refDate, DayCounter dayCounter) { List <List <double> > stoppingTimes = new List <List <double> >(); List <IStepCondition <Vector> > stepConditions = new List <IStepCondition <Vector> >(); if (!cashFlow.empty()) { FdmDividendHandler dividendCondition = new FdmDividendHandler(cashFlow, mesher, refDate, dayCounter, 0); stepConditions.Add(dividendCondition); stoppingTimes.Add(dividendCondition.dividendTimes()); } Utils.QL_REQUIRE(exercise.type() == Exercise.Type.American || exercise.type() == Exercise.Type.European || exercise.type() == Exercise.Type.Bermudan, () => "exercise type is not supported"); if (exercise.type() == Exercise.Type.American) { stepConditions.Add(new FdmAmericanStepCondition(mesher, calculator)); } else if (exercise.type() == Exercise.Type.Bermudan) { FdmBermudanStepCondition bermudanCondition = new FdmBermudanStepCondition(exercise.dates(), refDate, dayCounter, mesher, calculator); stepConditions.Add(bermudanCondition); stoppingTimes.Add(bermudanCondition.exerciseTimes()); } return(new FdmStepConditionComposite(stoppingTimes, stepConditions)); }
protected override PathPricer <IPath> controlPathPricer() { HybridHestonHullWhiteProcess process = process_ as HybridHestonHullWhiteProcess; Utils.QL_REQUIRE(process != null, () => "invalid process"); HestonProcess hestonProcess = process.hestonProcess(); Utils.QL_REQUIRE(hestonProcess != null, () => "first constituent of the joint stochastic process need to be of type HestonProcess"); Exercise exercise = this.arguments_.exercise; Utils.QL_REQUIRE(exercise.type() == Exercise.Type.European, () => "only european exercise is supported"); double exerciseTime = process.time(exercise.lastDate()); return(new HestonHullWhitePathPricer(exerciseTime, this.arguments_.payoff, process)); }