QuantLib
A free/open-source library for quantitative finance
Reference manual - version 1.20
Public Member Functions | Protected Member Functions | Friends | List of all members
MarkovFunctional Class Reference

#include <ql/models/shortrate/onefactormodels/markovfunctional.hpp>

+ Inheritance diagram for MarkovFunctional:

Public Member Functions

 MarkovFunctional (const Handle< YieldTermStructure > &termStructure, Real reversion, const std::vector< Date > &volstepdates, const std::vector< Real > &volatilities, const Handle< SwaptionVolatilityStructure > &swaptionVol, const std::vector< Date > &swaptionExpiries, const std::vector< Period > &swaptionTenors, const ext::shared_ptr< SwapIndex > &swapIndexBase, const MarkovFunctional::ModelSettings &modelSettings=ModelSettings())
 
 MarkovFunctional (const Handle< YieldTermStructure > &termStructure, Real reversion, const std::vector< Date > &volstepdates, const std::vector< Real > &volatilities, const Handle< OptionletVolatilityStructure > &capletVol, const std::vector< Date > &capletExpiries, const ext::shared_ptr< IborIndex > &iborIndex, const MarkovFunctional::ModelSettings &modelSettings=ModelSettings())
 
const ModelSettings & modelSettings () const
 
const ModelOutputs & modelOutputs () const
 
const DatenumeraireDate () const
 
const TimenumeraireTime () const
 
const Arrayvolatility () const
 
void calibrate (const std::vector< ext::shared_ptr< CalibrationHelper > > &helpers, OptimizationMethod &method, const EndCriteria &endCriteria, const Constraint &constraint=Constraint(), const std::vector< Real > &weights=std::vector< Real >(), const std::vector< bool > &fixParameters=std::vector< bool >())
 Calibrate to a set of market instruments (usually caps/swaptions) More...
 
void calibrate (const std::vector< ext::shared_ptr< BlackCalibrationHelper > > &helpers, OptimizationMethod &method, const EndCriteria &endCriteria, const Constraint &constraint=Constraint(), const std::vector< Real > &weights=std::vector< Real >(), const std::vector< bool > &fixParameters=std::vector< bool >())
 
void update ()
 
std::vector< std::pair< Size, Size > > arbitrageIndices () const
 
void forceArbitrageIndices (const std::vector< std::pair< Size, Size > > &indices)
 
- Public Member Functions inherited from Gaussian1dModel
ext::shared_ptr< StochasticProcess1DstateProcess () const
 
Real numeraire (Time t, Real y=0.0, const Handle< YieldTermStructure > &yts=Handle< YieldTermStructure >()) const
 
Real zerobond (Time T, Time t=0.0, Real y=0.0, const Handle< YieldTermStructure > &yts=Handle< YieldTermStructure >()) const
 
Real numeraire (const Date &referenceDate, Real y=0.0, const Handle< YieldTermStructure > &yts=Handle< YieldTermStructure >()) const
 
Real zerobond (const Date &maturity, const Date &referenceDate=Null< Date >(), Real y=0.0, const Handle< YieldTermStructure > &yts=Handle< YieldTermStructure >()) const
 
Real zerobondOption (const Option::Type &type, const Date &expiry, const Date &valueDate, const Date &maturity, Rate strike, const Date &referenceDate=Null< Date >(), Real y=0.0, const Handle< YieldTermStructure > &yts=Handle< YieldTermStructure >(), Real yStdDevs=7.0, Size yGridPoints=64, bool extrapolatePayoff=true, bool flatPayoffExtrapolation=false) const
 
Real forwardRate (const Date &fixing, const Date &referenceDate=Null< Date >(), Real y=0.0, const ext::shared_ptr< IborIndex > &iborIdx=ext::shared_ptr< IborIndex >()) const
 
Real swapRate (const Date &fixing, const Period &tenor, const Date &referenceDate=Null< Date >(), Real y=0.0, const ext::shared_ptr< SwapIndex > &swapIdx=ext::shared_ptr< SwapIndex >()) const
 
Real swapAnnuity (const Date &fixing, const Period &tenor, const Date &referenceDate=Null< Date >(), Real y=0.0, const ext::shared_ptr< SwapIndex > &swapIdx=ext::shared_ptr< SwapIndex >()) const
 
Disposable< ArrayyGrid (Real yStdDevs, int gridPoints, Real T=1.0, Real t=0, Real y=0) const
 
- Public Member Functions inherited from TermStructureConsistentModel
 TermStructureConsistentModel (const Handle< YieldTermStructure > &termStructure)
 
const Handle< YieldTermStructure > & termStructure () const
 
- Public Member Functions inherited from Observable
 Observable (const Observable &)
 
Observableoperator= (const Observable &)
 
void notifyObservers ()
 
- Public Member Functions inherited from LazyObject
void update ()
 
void recalculate ()
 
void freeze ()
 
void unfreeze ()
 
void alwaysForwardNotifications ()
 
- 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 ()
 
- Public Member Functions inherited from CalibratedModel
 CalibratedModel (Size nArguments)
 
Real value (const Array &params, const std::vector< ext::shared_ptr< CalibrationHelper > > &)
 
QL_DEPRECATED Real value (const Array &params, const std::vector< ext::shared_ptr< BlackCalibrationHelper > > &)
 
const ext::shared_ptr< Constraint > & constraint () const
 
EndCriteria::Type endCriteria () const
 Returns end criteria result.
 
const ArrayproblemValues () const
 Returns the problem values.
 
Disposable< Arrayparams () const
 Returns array of arguments on which calibration is done.
 
virtual void setParams (const Array &params)
 
Integer functionEvaluation () const
 

Protected Member Functions

Real numeraireImpl (Time t, Real y, const Handle< YieldTermStructure > &yts) const
 
Real zerobondImpl (Time T, Time t, Real y, const Handle< YieldTermStructure > &yts) const
 
void generateArguments ()
 
void performCalculations () const
 
Disposable< std::vector< bool > > FixedFirstVolatility () const
 
- Protected Member Functions inherited from Gaussian1dModel
 Gaussian1dModel (const Handle< YieldTermStructure > &yieldTermStructure)
 
void generateArguments ()
 
ext::shared_ptr< VanillaSwapunderlyingSwap (const ext::shared_ptr< SwapIndex > &index, const Date &expiry, const Period &tenor) const
 
- Protected Member Functions inherited from LazyObject
virtual void calculate () const
 

Friends

class ZeroHelper
 

Additional Inherited Members

- Public Types inherited from Observer
typedef boost::unordered_set< ext::shared_ptr< Observable > > set_type
 
typedef set_type::iterator iterator
 
- Static Public Member Functions inherited from Gaussian1dModel
static Real gaussianPolynomialIntegral (Real a, Real b, Real c, Real d, Real e, Real x0, Real x1)
 
static Real gaussianShiftedPolynomialIntegral (Real a, Real b, Real c, Real d, Real e, Real h, Real x0, Real x1)
 
- Protected Attributes inherited from Gaussian1dModel
ext::shared_ptr< StochasticProcess1DstateProcess_
 
Date evaluationDate_
 
bool enforcesTodaysHistoricFixings_
 
- Protected Attributes inherited from LazyObject
bool calculated_
 
bool frozen_
 
bool alwaysForward_
 
- Protected Attributes inherited from CalibratedModel
std::vector< Parameterarguments_
 
ext::shared_ptr< Constraintconstraint_
 
EndCriteria::Type shortRateEndCriteria_
 
Array problemValues_
 
Integer functionEvaluation_
 

Detailed Description

One factor Markov Functional model class. Some documentation is available here http://ssrn.com/abstract_id=2183721 http://quantlib.org/slides/qlws13/caspers.pdf

The model requires a suitable input smile which means it should be arbitrage free, smooth (at least implying a C^1 call price function) and with a call price function not decreasing too slow in strike direction.

A method for arbitrage free extra- and interpolation due to Kahale is provided and may be used to improve an input smile. Alternatively a SABR smile with arbitrage free wings can be fitted to the input smile to provide an appropriate input smile.

If you use the Kahale or SABR method for smile pretreatment then this implies zero density for underlying rates below minus the displacement parameter. This means that in this case the market yield term structure must imply underlying atm forward rates greater than minus displacement.

If you do not use a smile pretreatment you should ensure that the input smileSection is arbitrage free and that the input smileSection covers the strikes from lowerRateBound to upperRateBound.

During calibration a monocurve setup is assumed with the given yield term structure determining the rates throughout, no matter what curves are linked to the indices in the volatility term structures. The yield term structure should therefore be the main risk curve, i.e. the forwarding curve for the respective swaption or cap underlyings.

The model uses a simplified formula for the npv of a swaps floating leg namely $P(t,T_0)-P(t,T_1)$ with $T_0$ being the start date of the leg and $T_1$ being the last payment date, which is an approximation to the true npv.

The model calibrates to slightly modified market options in the sense that the start date is set equal to the fixing date, i.e. there is no delay. The model diagnostic outputs refer to this modified instrument. In general the actual market instrument including the delay is still matched very well though the calibration is done on a slightly different instrument.

AdjustYts and AdjustDigitals are experimental options. Specifying AdjustYts may have a negative impact on the volatility smile match, so it should be used with special care. For long term calibration it seems an interesting option though.

A bad fit to the initial yield term structure may be due to a non suitable input smile or accumulating numerical errors in very long term calibrations. The former point is adressed by smile pretreatment options. The latter point may be tackled by higher values for the numerical parameters possibly together with NTL high precision computing.

When using a shifted lognormal smile input the lower rate bound is adjusted by the shift so that a lower bound of 0.0 always corresponds to the lower bound of the shifted distribution.

If a custom smile is used, this will take full responsibility of inverting digital prices to market rates, so digitalGap, marketRateAccuracy, lowerRateBound, upperRateBound are irrelavant and the smile moneyness checkpoints are only used for the debug model output in this setup.

Member Function Documentation

◆ calibrate() [1/2]

void calibrate ( const std::vector< ext::shared_ptr< CalibrationHelper > > &  ,
OptimizationMethod method,
const EndCriteria endCriteria,
const Constraint constraint = Constraint(),
const std::vector< Real > &  weights = std::vector< Real >(),
const std::vector< bool > &  fixParameters = std::vector< bool >() 
)
virtual

Calibrate to a set of market instruments (usually caps/swaptions)

An additional constraint can be passed which must be satisfied in addition to the constraints of the model.

Reimplemented from CalibratedModel.

◆ calibrate() [2/2]

void calibrate ( const std::vector< ext::shared_ptr< BlackCalibrationHelper > > &  ,
OptimizationMethod method,
const EndCriteria endCriteria,
const Constraint constraint = Constraint(),
const std::vector< Real > &  weights = std::vector< Real >(),
const std::vector< bool > &  fixParameters = std::vector< bool >() 
)
virtual
Deprecated:
Use the other overload. Deprecated in version 1.18.

Reimplemented from CalibratedModel.

◆ update()

void update ( )
virtual

This method must be implemented in derived classes. An instance of Observer does not call this method directly: instead, it will be called by the observables the instance registered with when they need to notify any changes.

Reimplemented from CalibratedModel.

◆ performCalculations()

void performCalculations ( ) const
protectedvirtual

This method must implement any calculations which must be (re)done in order to calculate the desired results.

Reimplemented from Gaussian1dModel.