BatesEngine Class Reference

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

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

Inheritance diagram for BatesEngine:

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)
 
void calculate () const
 
Size numberOfEvaluations () const
 
- Public Member Functions inherited from GenericModelEngine< HestonModel, VanillaOption::arguments, VanillaOption::results >
 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 &)
 
Observableoperator= (const Observable &)
 
void notifyObservers ()
 
- Public Member Functions inherited from Observer
 Observer (const Observer &)
 
Observeroperator= (const Observer &)
 
std::pair< std::set
< boost::shared_ptr
< Observable > >::iterator,
bool > 
registerWith (const boost::shared_ptr< Observable > &)
 
Size unregisterWith (const boost::shared_ptr< Observable > &)
 
void unregisterWithAll ()
 

Protected Member Functions

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

Additional Inherited Members

- Public Types inherited from AnalyticHestonEngine
enum  ComplexLogFormula { Gatheral, BranchCorrection }
 
- 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)
 
- Public Attributes inherited from GenericModelEngine< HestonModel, VanillaOption::arguments, VanillaOption::results >
 __pad0__
 
- 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

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.