Logo
Reference manual - version qle_version
Public Types | Public Member Functions | List of all members
AnalyticLgmSwaptionEngine Class Reference

Analytic LGM swaption engine for european exercise. More...

#include <qle/pricingengines/analyticlgmswaptionengine.hpp>

+ Inheritance diagram for AnalyticLgmSwaptionEngine:

Public Types

enum  FloatSpreadMapping { nextCoupon , proRata }
 

Public Member Functions

 AnalyticLgmSwaptionEngine (const boost::shared_ptr< LinearGaussMarkovModel > &model, const Handle< YieldTermStructure > &discountCurve=Handle< YieldTermStructure >(), const FloatSpreadMapping floatSpreadMapping=proRata)
 
 AnalyticLgmSwaptionEngine (const boost::shared_ptr< CrossAssetModel > &model, const Size ccy, const Handle< YieldTermStructure > &discountCurve=Handle< YieldTermStructure >(), const FloatSpreadMapping floatSpreadMapping=proRata)
 
 AnalyticLgmSwaptionEngine (const boost::shared_ptr< IrLgm1fParametrization > irlgm1f, const Handle< YieldTermStructure > &discountCurve=Handle< YieldTermStructure >(), const FloatSpreadMapping floatSpreadMapping=proRata)
 
void calculate () const override
 
void enableCache (const bool lgm_H_constant=true, const bool lgm_alpha_constant=false)
 
void clearCache ()
 

Detailed Description

Analytic LGM swaption engine for european exercise.

All fixed coupons with start date greater or equal to the respective option expiry are considered to be part of the exercise into right.

References:

Hagan, Evaluating and hedging exotic swap instruments via LGM

Lichters, Stamm, Gallagher: Modern Derivatives Pricing and Credit Exposure Analysis, Palgrave Macmillan, 2015, 11.2.2

Warning:
Cash settled swaptions are not supported

The basis between the given discounting curve (or - if not given - the model curve) and the forwarding curve attached to the underlying swap's ibor index is taken into account by a static correction spread for the underlying's fixed leg. Likewise a spread on the floating leg is taken into account.

Note that we assume H' does not change its sign, but this is a general requirement of the LGM parametrization anyway (see the base parametrization class).

Member Enumeration Documentation

◆ FloatSpreadMapping

nextCoupon is Mapping A, proRata is Mapping B in Lichters, Stamm, Gallagher (2015), 11.2.2

Constructor & Destructor Documentation

◆ AnalyticLgmSwaptionEngine() [1/3]

AnalyticLgmSwaptionEngine ( const boost::shared_ptr< LinearGaussMarkovModel > &  model,
const Handle< YieldTermStructure > &  discountCurve = Handle< YieldTermStructure >(),
const FloatSpreadMapping  floatSpreadMapping = proRata 
)

Lgm model based constructor

◆ AnalyticLgmSwaptionEngine() [2/3]

AnalyticLgmSwaptionEngine ( const boost::shared_ptr< CrossAssetModel > &  model,
const Size  ccy,
const Handle< YieldTermStructure > &  discountCurve = Handle< YieldTermStructure >(),
const FloatSpreadMapping  floatSpreadMapping = proRata 
)

CrossAsset model based constructor

◆ AnalyticLgmSwaptionEngine() [3/3]

AnalyticLgmSwaptionEngine ( const boost::shared_ptr< IrLgm1fParametrization irlgm1f,
const Handle< YieldTermStructure > &  discountCurve = Handle< YieldTermStructure >(),
const FloatSpreadMapping  floatSpreadMapping = proRata 
)

parametrization based constructor, note that updates in the parametrization are not observed by the engine, you would have to call update() on the engine explicitly