QuantLib: BatesEngine Class Reference

A free/open-source library for quantitative finance Reference manual - version 1.12

Public Member Functions | Protected Member Functions | List of all members
BatesEngine Class Reference
Pricing engines » Vanilla option engines

Bates model engines based on Fourier transform. More...

`#include <ql/pricingengines/vanilla/batesengine.hpp>`

Inheritance diagram for BatesEngine:
[legend]

## Public Member Functions
| BatesEngine (const boost::shared_ptr< BatesModel > &model, Size integrationOrder=144)
| BatesEngine (const boost::shared_ptr< BatesModel > &model, Real relTolerance, Size maxEvaluations)
Public Member Functions inherited from AnalyticHestonEngine
| AnalyticHestonEngine (const boost::shared_ptr< HestonModel > &model, Real relTolerance, Size maxEvaluations)
| AnalyticHestonEngine (const boost::shared_ptr< HestonModel > &model, Size integrationOrder=144)
| AnalyticHestonEngine (const boost::shared_ptr< HestonModel > &model, ComplexLogFormula cpxLog, const Integration &itg, Real andersenPiterbargEpsilon=1e-8)
std::complex< Real > | chF (const std::complex< Real > &z, Time t) const
std::complex< Real > | lnChF (const std::complex< Real > &z, Time t) const
void | calculate () const
Size | numberOfEvaluations () const
Public Member Functions inherited from GenericModelEngine< HestonModel, VanillaOption::arguments, VanillaOption::results >
| GenericModelEngine (const Handle< HestonModel > &model=Handle< HestonModel >())
| GenericModelEngine (const boost::shared_ptr< HestonModel > &model)
Public Member Functions inherited from GenericEngine< VanillaOption::arguments, VanillaOption::results >
PricingEngine::arguments * | getArguments () const
const PricingEngine::results * | getResults () const
void | reset ()
void | update ()
Public Member Functions inherited from Observable
| Observable (const Observable &)
Observable & | operator= (const Observable &)
void | notifyObservers ()
Public Member Functions inherited from Observer
| Observer (const Observer &)
Observer & | operator= (const Observer &)
std::pair< iterator, bool > | registerWith (const boost::shared_ptr< Observable > &)
void | registerWithObservables (const boost::shared_ptr< Observer > &)
Size | unregisterWith (const boost::shared_ptr< Observable > &)
void | unregisterWithAll ()
virtual void | deepUpdate ()

## Protected Member Functions
std::complex< Real > | addOnTerm (Real phi, Time t, Size j) const

## Additional Inherited Members
Public Types inherited from AnalyticHestonEngine
enum | ComplexLogFormula { Gatheral, BranchCorrection, AndersenPiterbarg }
Public Types inherited from Observer
typedef std::set< boost::shared_ptr< Observable > > | set_type
typedef set_type::iterator | iterator
Static Public Member Functions inherited from AnalyticHestonEngine
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, const ComplexLogFormula cpxLog, const AnalyticHestonEngine *const enginePtr, Real &value, Size &evaluations)
Protected Attributes inherited from GenericModelEngine< HestonModel, VanillaOption::arguments, VanillaOption::results >
Handle< HestonModel > | model_
Protected Attributes inherited from GenericEngine< VanillaOption::arguments, VanillaOption::results >
VanillaOption::arguments | arguments_
VanillaOption::results | results_

## Detailed Description

Bates model engines based on Fourier transform.

this classes price european options under the following processes

1. Jump-Diffusion with Stochastic Volatility

   \[ \begin{array}{rcl} dS(t, S) &=& (r-d-\lambda m) S dt +\sqrt{v} S dW_1 + (e^J - 1) S dN \\ dv(t, S) &=& \kappa (\theta - v) dt + \sigma \sqrt{v} dW_2 \\ dW_1 dW_2 &=& \rho dt \end{array} \]

N is a Poisson process with the intensity \( \lambda \). When a jump occurs the magnitude J has the probability density function \( \omega(J) \).

1.1 Log-Normal Jump Diffusion: BatesEngine

Logarithm of the jump size J is normally distributed

\[ \omega(J) = \frac{1}{\sqrt{2\pi \delta^2}} \exp\left[-\frac{(J-\nu)^2}{2\delta^2}\right] \]

1.2 Double-Exponential Jump Diffusion: BatesDoubleExpEngine

The jump size has an asymmetric double exponential distribution

\[ \begin{array}{rcl} \omega(J)&=& p\frac{1}{\eta_u}e^{-\frac{1}{\eta_u}J} 1_{J>0} + q\frac{1}{\eta_d}e^{\frac{1}{\eta_d}J} 1_{J<0} \\ p + q &=& 1 \end{array} \]

1. Stochastic Volatility with Jump Diffusion and Deterministic Jump Intensity

   \[ \begin{array}{rcl} dS(t, S) &=& (r-d-\lambda m) S dt +\sqrt{v} S dW_1 + (e^J - 1) S dN \\ dv(t, S) &=& \kappa (\theta - v) dt + \sigma \sqrt{v} dW_2 \\ d\lambda(t) &=& \kappa_\lambda(\theta_\lambda-\lambda) dt \\ dW_1 dW_2 &=& \rho dt \end{array} \]

2.1 Log-Normal Jump Diffusion with Deterministic Jump Intensity BatesDetJumpEngine

2.2 Double-Exponential Jump Diffusion with Deterministic Jump Intensity BatesDoubleExpDetJumpEngine

References:

D. Bates, Jumps and stochastic volatility: exchange rate processes implicit in Deutsche mark options, Review of Financial Sudies 9, 69-107.

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)

Tests:
  the correctness of the returned value is tested by reproducing results available in web/literature, testing against QuantLib's jump diffusion engine and comparison with Black pricing.

Examples:
  EquityOption.cpp.