23#ifndef quantlib_qd_plus_american_engine_hpp
24#define quantlib_qd_plus_american_engine_hpp
35 class ChebyshevInterpolation;
36 class QdPlusBoundaryEvaluator;
43 ext::shared_ptr<GeneralizedBlackScholesProcess> process);
51 const ext::shared_ptr<GeneralizedBlackScholesProcess>
process_;
67 ext::shared_ptr<Interpolation> q_z);
75 const ext::shared_ptr<Interpolation>
q_z_;
97 ext::shared_ptr<GeneralizedBlackScholesProcess>,
98 Size interpolationPoints = 8,
117 template <
class Solver>
119 const QdPlusBoundaryEvaluator& eval,
Cumulative normal distribution function.
template class providing a null value for a given type.
American engine based on the QD+ approximation to the exercise boundary.
ext::shared_ptr< ChebyshevInterpolation > getPutExerciseBoundary(Real S, Real K, Rate r, Rate q, Volatility vol, Time T) const
static Real xMax(Real K, Rate r, Rate q)
const SolverType solverType_
const Size interpolationPoints_
std::pair< Size, Real > putExerciseBoundaryAtTau(Real S, Real K, Rate r, Rate q, Volatility vol, Time T, Time tau) const
Real calculatePut(Real S, Real K, Rate r, Rate q, Volatility vol, Time T) const override
Real buildInSolver(const QdPlusBoundaryEvaluator &eval, Solver solver, Real S, Real strike, Size maxIter, Real guess=Null< Real >()) const
Real operator()(Real z) const
const ext::shared_ptr< Interpolation > q_z_
const CumulativeNormalDistribution Phi_
virtual Real calculatePut(Real S, Real K, Rate r, Rate q, Volatility vol, Time T) const =0
void calculate() const override
const ext::shared_ptr< GeneralizedBlackScholesProcess > process_
Real calculatePutWithEdgeCases(Real S, Real K, Rate r, Rate q, Volatility vol, Time T) const
Real Time
continuous quantity with 1-year units
Real Volatility
volatility
std::size_t Size
size of a container
normal, cumulative and inverse cumulative distributions
ext::shared_ptr< YieldTermStructure > q
ext::shared_ptr< YieldTermStructure > r
Vanilla option on a single asset.