25#ifndef quantlib_analytic_heston_engine_hpp
26#define quantlib_analytic_heston_engine_hpp
28#include <ql/utilities/null.hpp>
29#include <ql/math/integrals/integral.hpp>
30#include <ql/math/integrals/gaussianquadratures.hpp>
31#include <ql/pricingengines/genericmodelengine.hpp>
32#include <ql/models/equity/hestonmodel.hpp>
33#include <ql/instruments/vanillaoption.hpp>
34#include <ql/functional.hpp>
89 VanillaOption::arguments,
90 VanillaOption::results> {
115 Real relTolerance,
Size maxEvaluations);
120 Size integrationOrder = 144);
126 Real andersenPiterbargEpsilon = 1e-8);
129 std::complex<Real>
chF(
const std::complex<Real>& z,
Time t)
const;
130 std::complex<Real>
lnChF(
const std::complex<Real>& z,
Time t)
const;
136 Real dividendDiscount,
146 const Integration& integration,
205 Size maxEvaluations = 1000);
209 Size maxEvaluations = 1000);
211 Size maxEvaluations = 1000);
213 Size maxEvaluations = 1000);
222 const ext::function<
Real()>& maxBound = {})
const;
226 Real maxBound)
const;
253 return std::complex<Real>(0,0);
std::complex< Real > psi_
Real controlVariateValue() const
std::complex< Real > phi_
Real operator()(Real u) const
const ComplexLogFormula cpxLog_
const AnalyticHestonEngine *const enginePtr_
static Real andersenPiterbargIntegrationLimit(Real c_inf, Real epsilon, Real v0, Real t)
Size numberOfEvaluations() const
bool isAdaptiveIntegration() const
static Integration discreteSimpson(Size evaluation=1000)
static Integration gaussChebyshev2nd(Size integrationOrder=128)
static Integration simpson(Real absTolerance, Size maxEvaluations=1000)
const ext::shared_ptr< GaussianQuadrature > gaussianQuadrature_
static Integration gaussLegendre(Size integrationOrder=128)
static Integration gaussChebyshev(Size integrationOrder=128)
static Integration gaussLobatto(Real relTolerance, Real absTolerance, Size maxEvaluations=1000)
static Integration trapezoid(Real absTolerance, Size maxEvaluations=1000)
static Integration gaussLaguerre(Size integrationOrder=128)
static Integration gaussKronrod(Real absTolerance, Size maxEvaluations=1000)
const ext::shared_ptr< Integrator > integrator_
static Integration discreteTrapezoid(Size evaluation=1000)
analytic Heston-model engine based on Fourier transform
const Real andersenPiterbargEpsilon_
Size numberOfEvaluations() const
std::complex< Real > lnChF(const std::complex< Real > &z, Time t) const
static void doCalculation(Real riskFreeDiscount, Real dividendDiscount, Real spotPrice, Real strikePrice, Real term, Real kappa, Real theta, Real sigma, Real v0, Real rho, const TypePayoff &type, const Integration &integration, ComplexLogFormula cpxLog, const AnalyticHestonEngine *enginePtr, Real &value, Size &evaluations)
void calculate() const override
const ComplexLogFormula cpxLog_
const ext::shared_ptr< Integration > integration_
std::complex< Real > chF(const std::complex< Real > &z, Time t) const
virtual std::complex< Real > addOnTerm(Real phi, Time t, Size j) const
static ComplexLogFormula optimalControlVariate(Time t, Real v0, Real kappa, Real theta, Real sigma, Real rho)
Base class for some pricing engine on a particular model.
Intermediate class for put/call payoffs.
Real Time
continuous quantity with 1-year units
std::size_t Size
size of a container