25#include <ql/exercise.hpp>
26#include <ql/experimental/finitedifferences/fdextoujumpvanillaengine.hpp>
27#include <ql/experimental/finitedifferences/fdmextoujumpmodelinnervalue.hpp>
28#include <ql/experimental/finitedifferences/fdmextoujumpsolver.hpp>
29#include <ql/experimental/processes/extendedornsteinuhlenbeckprocess.hpp>
30#include <ql/experimental/processes/extouwithjumpsprocess.hpp>
31#include <ql/methods/finitedifferences/meshers/exponentialjump1dmesher.hpp>
32#include <ql/methods/finitedifferences/meshers/fdmmeshercomposite.hpp>
33#include <ql/methods/finitedifferences/meshers/fdmsimpleprocess1dmesher.hpp>
34#include <ql/methods/finitedifferences/operators/fdmlinearoplayout.hpp>
35#include <ql/methods/finitedifferences/stepconditions/fdmamericanstepcondition.hpp>
36#include <ql/methods/finitedifferences/stepconditions/fdmbermudanstepcondition.hpp>
37#include <ql/methods/finitedifferences/stepconditions/fdmstepconditioncomposite.hpp>
38#include <ql/termstructures/yieldtermstructure.hpp>
44 ext::shared_ptr<ExtOUWithJumpsProcess> process,
45 ext::shared_ptr<YieldTermStructure> rTS,
49 ext::shared_ptr<Shape> shape,
51 : process_(
std::move(process)), rTS_(
std::move(rTS)), shape_(
std::move(shape)), tGrid_(tGrid),
52 xGrid_(xGrid), yGrid_(yGrid), schemeDesc_(schemeDesc) {}
57 =
rTS_->dayCounter().yearFraction(
rTS_->referenceDate(),
59 const ext::shared_ptr<StochasticProcess1D> ouProcess(
60 process_->getExtendedOrnsteinUhlenbeckProcess());
61 const ext::shared_ptr<Fdm1dMesher> xMesher(
64 const ext::shared_ptr<Fdm1dMesher> yMesher(
70 const ext::shared_ptr<FdmMesher> mesher(
74 const ext::shared_ptr<FdmInnerValueCalculator> calculator(
78 const ext::shared_ptr<FdmStepConditionComposite> conditions =
82 rTS_->referenceDate(),
rTS_->dayCounter());
89 calculator, maturity,
tGrid_, 0 };
91 const ext::shared_ptr<FdmExtOUJumpSolver> solver(
FdExtOUJumpVanillaEngine(ext::shared_ptr< ExtOUWithJumpsProcess > p, ext::shared_ptr< YieldTermStructure > rTS, Size tGrid=50, Size xGrid=200, Size yGrid=50, ext::shared_ptr< Shape > shape=ext::shared_ptr< Shape >(), const FdmSchemeDesc &schemeDesc=FdmSchemeDesc::Hundsdorfer())
void calculate() const override
const ext::shared_ptr< ExtOUWithJumpsProcess > process_
const ext::shared_ptr< Shape > shape_
const ext::shared_ptr< YieldTermStructure > rTS_
const FdmSchemeDesc schemeDesc_
static ext::shared_ptr< FdmStepConditionComposite > vanillaComposite(const DividendSchedule &schedule, const ext::shared_ptr< Exercise > &exercise, const ext::shared_ptr< FdmMesher > &mesher, const ext::shared_ptr< FdmInnerValueCalculator > &calculator, const Date &refDate, const DayCounter &dayCounter)
VanillaOption::results results_
VanillaOption::arguments arguments_
Shared handle to an observable.
ext::shared_ptr< Exercise > exercise
ext::shared_ptr< Payoff > payoff
Real Time
continuous quantity with 1-year units
std::size_t Size
size of a container
std::vector< ext::shared_ptr< Dividend > > DividendSchedule
OperatorTraits< FdmLinearOp >::bc_set FdmBoundaryConditionSet