Analytic LGM swaption engine for european exercise. More...
#include <qle/pricingengines/analyticlgmswaptionengine.hpp>
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 () |
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
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).
enum FloatSpreadMapping |
nextCoupon is Mapping A, proRata is Mapping B in Lichters, Stamm, Gallagher (2015), 11.2.2
AnalyticLgmSwaptionEngine | ( | const boost::shared_ptr< LinearGaussMarkovModel > & | model, |
const Handle< YieldTermStructure > & | discountCurve = Handle< YieldTermStructure >() , |
||
const FloatSpreadMapping | floatSpreadMapping = proRata |
||
) |
Lgm model based constructor
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 | ( | 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