23#include <ql/methods/finitedifferences/operators/fdmhestonop.hpp>
24#include <ql/methods/finitedifferences/solvers/fdm2dimsolver.hpp>
25#include <ql/methods/finitedifferences/solvers/fdmhestonsolver.hpp>
26#include <ql/processes/hestonprocess.hpp>
35 ext::shared_ptr<LocalVolTermStructure> leverageFct,
36 const Real mixingFactor)
37 : process_(
std::move(process)), solverDesc_(
std::move(solverDesc)), schemeDesc_(schemeDesc),
38 quantoHelper_(
std::move(quantoHelper)), leverageFct_(
std::move(leverageFct)),
39 mixingFactor_(mixingFactor) {
46 ext::shared_ptr<FdmLinearOpComposite> op(
47 ext::make_shared<FdmHestonOp>(
50 : ext::shared_ptr<FdmQuantoHelper>(),
58 return solver_->interpolateAt(std::log(s), v);
63 return solver_->derivativeX(std::log(s), v)/s;
68 const Real x = std::log(s);
69 return (
solver_->derivativeXX(x, v)-
solver_->derivativeX(x, v))/(s*s);
82 const Real x = std::log(s);
85 +
solver_->derivativeYY(x, v)*alpha*alpha
86 +2*
solver_->derivativeXY(x, v)*alpha/s;
91 return solver_->thetaAt(std::log(s), v);
ext::shared_ptr< Fdm2DimSolver > solver_
void performCalculations() const override
Real thetaAt(Real s, Real v) const
FdmHestonSolver(Handle< HestonProcess > process, FdmSolverDesc solverDesc, const FdmSchemeDesc &schemeDesc=FdmSchemeDesc::Hundsdorfer(), Handle< FdmQuantoHelper > quantoHelper=Handle< FdmQuantoHelper >(), ext::shared_ptr< LocalVolTermStructure > leverageFct=ext::shared_ptr< LocalVolTermStructure >(), Real mixingFactor=1.0)
Real meanVarianceDeltaAt(Real s, Real v) const
const FdmSolverDesc solverDesc_
const ext::shared_ptr< LocalVolTermStructure > leverageFct_
Real gammaAt(Real s, Real v) const
const Handle< HestonProcess > process_
Real valueAt(Real s, Real v) const
Real deltaAt(Real s, Real v) const
const Handle< FdmQuantoHelper > quantoHelper_
Real meanVarianceGammaAt(Real s, Real v) const
const FdmSchemeDesc schemeDesc_
Shared handle to an observable.
virtual void calculate() const
std::pair< iterator, bool > registerWith(const ext::shared_ptr< Observable > &)
const ext::shared_ptr< FdmMesher > mesher