QuantLib: CPISwap Class Reference

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

Classes | Public Types | Public Member Functions | List of all members
CPISwap Class Reference

zero-inflation-indexed swap, More...

`#include <ql/instruments/cpiswap.hpp>`

Inheritance diagram for CPISwap:
[legend]

## Classes
class | arguments
| Arguments for swap calculation More...
class | results
| Results from swap calculation More...

## Public Types
enum | Type { Receiver = -1, Payer = 1 }
Public Types inherited from Observer
typedef std::set< boost::shared_ptr< Observable > > | set_type
typedef set_type::iterator | iterator

## Public Member Functions
| CPISwap (Type type, Real nominal, bool subtractInflationNominal, Spread spread, const DayCounter &floatDayCount, const Schedule &floatSchedule, const BusinessDayConvention &floatRoll, Natural fixingDays, const boost::shared_ptr< IborIndex > &floatIndex, Rate fixedRate, Real baseCPI, const DayCounter &fixedDayCount, const Schedule &fixedSchedule, const BusinessDayConvention &fixedRoll, const Period &observationLag, const boost::shared_ptr< ZeroInflationIndex > &fixedIndex, CPI::InterpolationType observationInterpolation=CPI::AsIndex, Real inflationNominal=Null< Real >())
virtual Real | floatLegNPV () const
virtual Spread | fairSpread () const
virtual Real | fixedLegNPV () const
virtual Rate | fairRate () const
virtual Type | type () const
virtual Real | nominal () const
virtual bool | subtractInflationNominal () const
virtual Spread | spread () const
virtual const DayCounter & | floatDayCount () const
virtual const Schedule & | floatSchedule () const
virtual const BusinessDayConvention & | floatPaymentRoll () const
virtual Natural | fixingDays () const
virtual const boost::shared_ptr< IborIndex > & | floatIndex () const
virtual Rate | fixedRate () const
virtual Real | baseCPI () const
virtual const DayCounter & | fixedDayCount () const
virtual const Schedule & | fixedSchedule () const
virtual const BusinessDayConvention & | fixedPaymentRoll () const
virtual Period | observationLag () const
virtual const boost::shared_ptr< ZeroInflationIndex > & | fixedIndex () const
virtual CPI::InterpolationType | observationInterpolation () const
virtual Real | inflationNominal () const
virtual const Leg & | cpiLeg () const
virtual const Leg & | floatLeg () const
void | setupArguments (PricingEngine::arguments *args) const
void | fetchResults (const PricingEngine::results *) const
Public Member Functions inherited from Swap
Date | startDate () const
Date | maturityDate () const
Real | legBPS (Size j) const
Real | legNPV (Size j) const
DiscountFactor | startDiscounts (Size j) const
DiscountFactor | endDiscounts (Size j) const
DiscountFactor | npvDateDiscount () const
const Leg & | leg (Size j) const
| Swap (const Leg &firstLeg, const Leg &secondLeg)
| Swap (const std::vector< Leg > &legs, const std::vector< bool > &payer)
bool | isExpired () const
| returns whether the instrument might have value greater than zero.
void | setupArguments (PricingEngine::arguments *) const
void | fetchResults (const PricingEngine::results *) const
Public Member Functions inherited from Instrument
Real | NPV () const
| returns the net present value of the instrument.
Real | errorEstimate () const
| returns the error estimate on the NPV when available.
const Date & | valuationDate () const
| returns the date the net present value refers to.
template<typename T >
T | result (const std::string &tag) const
| returns any additional result returned by the pricing engine.
const std::map< std::string, boost::any > & | additionalResults () const
| returns all additional result returned by the pricing engine.
void | setPricingEngine (const boost::shared_ptr< PricingEngine > &)
| set the pricing engine to be used. More...
Public Member Functions inherited from LazyObject
void | update ()
void | recalculate ()
void | freeze ()
void | unfreeze ()
void | alwaysForwardNotifications ()
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 ()

## Additional Inherited Members
Protected Member Functions inherited from Swap
| Swap (Size legs)
void | setupExpired () const
Protected Member Functions inherited from Instrument
void | calculate () const
virtual void | performCalculations () const
Protected Member Functions inherited from LazyObject
Protected Attributes inherited from Swap
std::vector< Leg > | legs_
std::vector< Real > | payer_
std::vector< Real > | legNPV_
std::vector< Real > | legBPS_
std::vector< DiscountFactor > | startDiscounts_
std::vector< DiscountFactor > | endDiscounts_
DiscountFactor | npvDateDiscount_
Protected Attributes inherited from Instrument
boost::shared_ptr< PricingEngine > | engine_
Real | NPV_
Real | errorEstimate_
Date | valuationDate_
std::map< std::string, boost::any > | additionalResults_
Protected Attributes inherited from LazyObject
bool | calculated_
bool | frozen_
bool | alwaysForward_

## Detailed Description

zero-inflation-indexed swap,

fixed x zero-inflation, i.e. fixed x CPI(i'th fixing)/CPI(base) versus floating + spread

Note that this does ony the inflation-vs-floating-leg. Extension to inflation-vs-fixed-leg. is simple - just replace the floating leg with a fixed leg.

Typically there are notional exchanges at the end: either inflated-notional vs notional; or just (inflated-notional - notional) vs zero. The latter is perhaphs more typical.

Warning:
  Setting subtractInflationNominal to true means that the original inflation nominal is subtracted from both nominals before they are exchanged, even if they are different.

This swap can mimic a ZCIIS where [(1+q)^n - 1] is exchanged against (cpi ratio - 1), by using differnt nominals on each leg and setting subtractInflationNominal to true. ALSO - there must be just one date in each schedule.

The two legs can have different schedules, fixing (days vs lag), settlement, and roll conventions. N.B. accrual adjustment periods are already in the schedules. Trade date and swap settlement date are outside the scope of the instrument.

## Member Function Documentation

## ◆ setupArguments()

void setupArguments | ( | PricingEngine::arguments * |  | ) | const
| virtual

When a derived argument structure is defined for an instrument, this method should be overridden to fill it. This is mandatory in case a pricing engine is used.

Reimplemented from Instrument.

## ◆ fetchResults()

void fetchResults | ( | const PricingEngine::results * | r | ) | const
| virtual

When a derived result structure is defined for an instrument, this method should be overridden to read from it. This is mandatory in case a pricing engine is used.

Reimplemented from Instrument.