QuantLib: a free/open-source library for quantitative finance
Reference manual - version 1.40
Loading...
Searching...
No Matches
AnalyticHestonEngine Class Reference

analytic Heston-model engine based on Fourier transform More...

#include <ql/pricingengines/vanilla/analytichestonengine.hpp>

Inheritance diagram for AnalyticHestonEngine:

Public Types

enum  ComplexLogFormula {
  Gatheral , BranchCorrection , AndersenPiterbarg , AndersenPiterbargOptCV ,
  AsymptoticChF , AngledContour , AngledContourNoCV , OptimalCV
}
Public Types inherited from Observer
typedef set_type::iterator iterator

Public Member Functions

 AnalyticHestonEngine (const ext::shared_ptr< HestonModel > &model, Real relTolerance, Size maxEvaluations)
 AnalyticHestonEngine (const ext::shared_ptr< HestonModel > &model, Size integrationOrder=144)
 AnalyticHestonEngine (const ext::shared_ptr< HestonModel > &model, ComplexLogFormula cpxLog, const Integration &itg, Real andersenPiterbargEpsilon=1e-25, Real alpha=-0.5)
void calculate () const override
std::complex< RealchF (const std::complex< Real > &z, Time t) const
std::complex< ReallnChF (const std::complex< Real > &z, Time t) const
Size numberOfEvaluations () const
Real priceVanillaPayoff (const ext::shared_ptr< PlainVanillaPayoff > &payoff, const Date &maturity) const
Real priceVanillaPayoff (const ext::shared_ptr< PlainVanillaPayoff > &payoff, Time maturity) const
Public Member Functions inherited from GenericModelEngine< HestonModel, VanillaOption::arguments, VanillaOption::results >
 GenericModelEngine (Handle< HestonModel > model=Handle< HestonModel >())
Public Member Functions inherited from GenericEngine< VanillaOption::arguments, VanillaOption::results >
PricingEngine::arguments * getArguments () const override
const PricingEngine::results * getResults () const override
void reset () override
void update () override
Public Member Functions inherited from Observable
 Observable (const Observable &)
Observableoperator= (const Observable &)
 Observable (Observable &&)=delete
Observableoperator= (Observable &&)=delete
void notifyObservers ()
Public Member Functions inherited from Observer
 Observer (const Observer &)
Observeroperator= (const Observer &)
std::pair< iterator, bool > registerWith (const ext::shared_ptr< Observable > &)
void registerWithObservables (const ext::shared_ptr< Observer > &)
Size unregisterWith (const ext::shared_ptr< Observable > &)
void unregisterWithAll ()
virtual void deepUpdate ()

Static Public Member Functions

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)
static ComplexLogFormula optimalControlVariate (Time t, Real v0, Real kappa, Real theta, Real sigma, Real rho)

Protected Member Functions

virtual std::complex< RealaddOnTerm (Real phi, Time t, Size j) const

Additional Inherited Members

Protected Attributes inherited from GenericModelEngine< HestonModel, VanillaOption::arguments, VanillaOption::results >
Handle< HestonModelmodel_
Protected Attributes inherited from GenericEngine< VanillaOption::arguments, VanillaOption::results >
VanillaOption::arguments arguments_
VanillaOption::results results_

Detailed Description

analytic Heston-model engine based on Fourier transform

Integration detail: Two algebraically equivalent formulations of the complex logarithm of the Heston model exist. Gatherals [2005] (also Duffie, Pan and Singleton [2000], and Schoutens, Simons and Tistaert[2004]) version does not cause discoutinuities whereas the original version (e.g. Heston [1993]) needs some sort of "branch correction" to work properly. Gatheral's version does also work with adaptive integration routines and should be preferred over the original Heston version.

References:

Heston, Steven L., 1993. A Closed-Form Solution for Options with Stochastic Volatility with Applications to Bond and Currency Options. The review of Financial Studies, Volume 6, Issue 2, 327-343.

A. Sepp, Pricing European-Style Options under Jump Diffusion Processes with Stochastic Volatility: Applications of Fourier Transform (http://math.ut.ee/~spartak/papers/stochjumpvols.pdf)

R. Lord and C. Kahl, Why the rotation count algorithm works, http://papers.ssrn.com/sol3/papers.cfm?abstract_id=921335

H. Albrecher, P. Mayer, W.Schoutens and J. Tistaert, The Little Heston Trap, http://www.schoutens.be/HestonTrap.pdf

J. Gatheral, The Volatility Surface: A Practitioner's Guide, Wiley Finance

F. Le Floc'h, Fourier Integration and Stochastic Volatility Calibration, https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2362968

L. Andersen, and V. Piterbarg, 2010, Interest Rate Modeling, Volume I: Foundations and Vanilla Models, Atlantic Financial Press London.

L. Andersen and M. Lake, 2018 Robust High-Precision Option Pricing by Fourier Transforms: Contour Deformations and Double-Exponential Quadrature, https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3231626

Tests
the correctness of the returned value is tested by reproducing results available in web/literature and comparison with Black pricing.

Member Function Documentation

◆ calculate()

void calculate ( ) const
overridevirtual

Implements PricingEngine.