QuantLib: a free/open-source library for quantitative finance
fully annotated source code - version 1.34
Loading...
Searching...
No Matches
Classes | Public Member Functions | Private Member Functions | Private Attributes | List of all members
CPISwap Class Reference

zero-inflation-indexed swap, More...

#include <cpiswap.hpp>

+ Inheritance diagram for CPISwap:
+ Collaboration diagram for CPISwap:

Classes

class  arguments
 Arguments for swap calculation More...
 
class  engine
 
class  results
 Results from swap calculation More...
 

Public Member Functions

 CPISwap (Type type, Real nominal, bool subtractInflationNominal, Spread spread, DayCounter floatDayCount, Schedule floatSchedule, const BusinessDayConvention &floatRoll, Natural fixingDays, ext::shared_ptr< IborIndex > floatIndex, Rate fixedRate, Real baseCPI, DayCounter fixedDayCount, Schedule fixedSchedule, const BusinessDayConvention &fixedRoll, const Period &observationLag, ext::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 DayCounterfloatDayCount () const
 
virtual const SchedulefloatSchedule () const
 
virtual const BusinessDayConventionfloatPaymentRoll () const
 
virtual Natural fixingDays () const
 
virtual const ext::shared_ptr< IborIndex > & floatIndex () const
 
virtual Rate fixedRate () const
 
virtual Real baseCPI () const
 
virtual const DayCounterfixedDayCount () const
 
virtual const SchedulefixedSchedule () const
 
virtual const BusinessDayConventionfixedPaymentRoll () const
 
virtual Period observationLag () const
 
virtual const ext::shared_ptr< ZeroInflationIndex > & fixedIndex () const
 
virtual CPI::InterpolationType observationInterpolation () const
 
virtual Real inflationNominal () const
 
virtual const LegcpiLeg () const
 
virtual const LegfloatLeg () const
 
void setupArguments (PricingEngine::arguments *args) const override
 for simple case sufficient to copy base class More...
 
void fetchResults (const PricingEngine::results *) const override
 
- Public Member Functions inherited from Swap
void deepUpdate () override
 
Size numberOfLegs () const
 
const std::vector< Leg > & legs () const
 
virtual Date startDate () const
 
virtual 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 Legleg (Size j) const
 
bool payer (Size j) const
 
bool isExpired () const override
 returns whether the instrument might have value greater than zero. More...
 
void setupArguments (PricingEngine::arguments *) const override
 
void fetchResults (const PricingEngine::results *) const override
 
 Swap (const Leg &firstLeg, const Leg &secondLeg)
 
 Swap (const std::vector< Leg > &legs, const std::vector< bool > &payer)
 
- Public Member Functions inherited from Instrument
 Instrument ()
 
Real NPV () const
 returns the net present value of the instrument. More...
 
Real errorEstimate () const
 returns the error estimate on the NPV when available. More...
 
const DatevaluationDate () const
 returns the date the net present value refers to. More...
 
template<typename T >
T result (const std::string &tag) const
 returns any additional result returned by the pricing engine. More...
 
const std::map< std::string, ext::any > & additionalResults () const
 returns all additional result returned by the pricing engine. More...
 
void setPricingEngine (const ext::shared_ptr< PricingEngine > &)
 set the pricing engine to be used. More...
 
- Public Member Functions inherited from LazyObject
 LazyObject ()
 
 ~LazyObject () override=default
 
void update () override
 
bool isCalculated () const
 
void forwardFirstNotificationOnly ()
 
void alwaysForwardNotifications ()
 
void recalculate ()
 
void freeze ()
 
void unfreeze ()
 
- Public Member Functions inherited from Observable
 Observable ()
 
 Observable (const Observable &)
 
Observableoperator= (const Observable &)
 
 Observable (Observable &&)=delete
 
Observableoperator= (Observable &&)=delete
 
virtual ~Observable ()=default
 
void notifyObservers ()
 
- Public Member Functions inherited from Observer
 Observer ()=default
 
 Observer (const Observer &)
 
Observeroperator= (const Observer &)
 
virtual ~Observer ()
 
std::pair< iterator, boolregisterWith (const ext::shared_ptr< Observable > &)
 
void registerWithObservables (const ext::shared_ptr< Observer > &)
 
Size unregisterWith (const ext::shared_ptr< Observable > &)
 
void unregisterWithAll ()
 
virtual void update ()=0
 
virtual void deepUpdate ()
 

Private Member Functions

void setupExpired () const override
 

Private Attributes

Type type_
 
Real nominal_
 
bool subtractInflationNominal_
 
Spread spread_
 
DayCounter floatDayCount_
 
Schedule floatSchedule_
 
BusinessDayConvention floatPaymentRoll_
 
Natural fixingDays_
 
ext::shared_ptr< IborIndexfloatIndex_
 
Rate fixedRate_
 
Real baseCPI_
 
DayCounter fixedDayCount_
 
Schedule fixedSchedule_
 
BusinessDayConvention fixedPaymentRoll_
 
ext::shared_ptr< ZeroInflationIndexfixedIndex_
 
Period observationLag_
 
CPI::InterpolationType observationInterpolation_
 
Real inflationNominal_
 
Spread fairSpread_
 
Rate fairRate_
 

Additional Inherited Members

- Public Types inherited from Swap
enum  Type { Receiver = -1 , Payer = 1 }
 
- Public Types inherited from Observer
typedef set_type::iterator iterator
 
- Protected Member Functions inherited from Swap
void setupExpired () const override
 
 Swap (Size legs)
 
- Protected Member Functions inherited from Instrument
void calculate () const override
 
void performCalculations () const override
 
- Protected Member Functions inherited from LazyObject
- Protected Attributes inherited from Swap
std::vector< Leglegs_
 
std::vector< Realpayer_
 
std::vector< ReallegNPV_
 
std::vector< ReallegBPS_
 
std::vector< DiscountFactorstartDiscounts_
 
std::vector< DiscountFactorendDiscounts_
 
DiscountFactor npvDateDiscount_
 
- Protected Attributes inherited from Instrument
Real NPV_
 
Real errorEstimate_
 
Date valuationDate_
 
std::map< std::string, ext::any > additionalResults_
 
ext::shared_ptr< PricingEngineengine_
 
- Protected Attributes inherited from LazyObject
bool calculated_ = false
 
bool frozen_ = false
 
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.

Definition at line 66 of file cpiswap.hpp.

Constructor & Destructor Documentation

◆ CPISwap()

CPISwap ( Type  type,
Real  nominal,
bool  subtractInflationNominal,
Spread  spread,
DayCounter  floatDayCount,
Schedule  floatSchedule,
const BusinessDayConvention floatRoll,
Natural  fixingDays,
ext::shared_ptr< IborIndex floatIndex,
Rate  fixedRate,
Real  baseCPI,
DayCounter  fixedDayCount,
Schedule  fixedSchedule,
const BusinessDayConvention fixedRoll,
const Period observationLag,
ext::shared_ptr< ZeroInflationIndex fixedIndex,
CPI::InterpolationType  observationInterpolation = CPI::AsIndex,
Real  inflationNominal = Null<Real>() 
)

In this swap, the type (Payer or Receiver) refers to the floating leg.

Definition at line 37 of file cpiswap.cpp.

+ Here is the call graph for this function:

Member Function Documentation

◆ floatLegNPV()

Real floatLegNPV ( ) const
virtual

Definition at line 164 of file cpiswap.cpp.

+ Here is the call graph for this function:

◆ fairSpread()

Spread fairSpread ( ) const
virtual

Definition at line 151 of file cpiswap.cpp.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fixedLegNPV()

Real fixedLegNPV ( ) const
virtual

Definition at line 158 of file cpiswap.cpp.

+ Here is the call graph for this function:

◆ fairRate()

Rate fairRate ( ) const
virtual

Definition at line 145 of file cpiswap.cpp.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ type()

Swap::Type type ( ) const
virtual

Definition at line 191 of file cpiswap.hpp.

◆ nominal()

Real nominal ( ) const
virtual

Definition at line 192 of file cpiswap.hpp.

◆ subtractInflationNominal()

bool subtractInflationNominal ( ) const
virtual

Definition at line 193 of file cpiswap.hpp.

+ Here is the caller graph for this function:

◆ spread()

Spread spread ( ) const
virtual

Definition at line 196 of file cpiswap.hpp.

◆ floatDayCount()

const DayCounter & floatDayCount ( ) const
virtual

Definition at line 197 of file cpiswap.hpp.

◆ floatSchedule()

const Schedule & floatSchedule ( ) const
virtual

Definition at line 198 of file cpiswap.hpp.

◆ floatPaymentRoll()

const BusinessDayConvention & floatPaymentRoll ( ) const
virtual

Definition at line 199 of file cpiswap.hpp.

◆ fixingDays()

Natural fixingDays ( ) const
virtual

Definition at line 200 of file cpiswap.hpp.

◆ floatIndex()

const ext::shared_ptr< IborIndex > & floatIndex ( ) const
virtual

Definition at line 201 of file cpiswap.hpp.

◆ fixedRate()

Rate fixedRate ( ) const
virtual

Definition at line 204 of file cpiswap.hpp.

◆ baseCPI()

Real baseCPI ( ) const
virtual

Definition at line 205 of file cpiswap.hpp.

◆ fixedDayCount()

const DayCounter & fixedDayCount ( ) const
virtual

Definition at line 206 of file cpiswap.hpp.

◆ fixedSchedule()

const Schedule & fixedSchedule ( ) const
virtual

Definition at line 207 of file cpiswap.hpp.

◆ fixedPaymentRoll()

const BusinessDayConvention & fixedPaymentRoll ( ) const
virtual

Definition at line 208 of file cpiswap.hpp.

◆ observationLag()

Period observationLag ( ) const
virtual

Definition at line 209 of file cpiswap.hpp.

◆ fixedIndex()

const ext::shared_ptr< ZeroInflationIndex > & fixedIndex ( ) const
virtual

Definition at line 210 of file cpiswap.hpp.

◆ observationInterpolation()

CPI::InterpolationType observationInterpolation ( ) const
virtual

Definition at line 211 of file cpiswap.hpp.

◆ inflationNominal()

Real inflationNominal ( ) const
virtual

Definition at line 212 of file cpiswap.hpp.

+ Here is the caller graph for this function:

◆ cpiLeg()

const Leg & cpiLeg ( ) const
virtual

Definition at line 214 of file cpiswap.hpp.

+ Here is the caller graph for this function:

◆ floatLeg()

const Leg & floatLeg ( ) const
virtual

Definition at line 218 of file cpiswap.hpp.

◆ setupArguments()

void setupArguments ( PricingEngine::arguments args) const
overridevirtual

for simple case sufficient to copy base class

Reimplemented from Instrument.

Definition at line 134 of file cpiswap.cpp.

+ Here is the call graph for this function:

◆ fetchResults()

void fetchResults ( const PricingEngine::results r) const
overridevirtual

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.

Definition at line 177 of file cpiswap.cpp.

+ Here is the call graph for this function:

◆ setupExpired()

void setupExpired ( ) const
overrideprivatevirtual

This method must leave the instrument in a consistent state when the expiration condition is met.

Reimplemented from Instrument.

Definition at line 170 of file cpiswap.cpp.

+ Here is the call graph for this function:

Member Data Documentation

◆ type_

Type type_
private

Definition at line 137 of file cpiswap.hpp.

◆ nominal_

Real nominal_
private

Definition at line 138 of file cpiswap.hpp.

◆ subtractInflationNominal_

bool subtractInflationNominal_
private

Definition at line 139 of file cpiswap.hpp.

◆ spread_

Spread spread_
private

Definition at line 142 of file cpiswap.hpp.

◆ floatDayCount_

DayCounter floatDayCount_
private

Definition at line 143 of file cpiswap.hpp.

◆ floatSchedule_

Schedule floatSchedule_
private

Definition at line 144 of file cpiswap.hpp.

◆ floatPaymentRoll_

BusinessDayConvention floatPaymentRoll_
private

Definition at line 145 of file cpiswap.hpp.

◆ fixingDays_

Natural fixingDays_
private

Definition at line 146 of file cpiswap.hpp.

◆ floatIndex_

ext::shared_ptr<IborIndex> floatIndex_
private

Definition at line 147 of file cpiswap.hpp.

◆ fixedRate_

Rate fixedRate_
private

Definition at line 150 of file cpiswap.hpp.

◆ baseCPI_

Real baseCPI_
private

Definition at line 151 of file cpiswap.hpp.

◆ fixedDayCount_

DayCounter fixedDayCount_
private

Definition at line 152 of file cpiswap.hpp.

◆ fixedSchedule_

Schedule fixedSchedule_
private

Definition at line 153 of file cpiswap.hpp.

◆ fixedPaymentRoll_

BusinessDayConvention fixedPaymentRoll_
private

Definition at line 154 of file cpiswap.hpp.

◆ fixedIndex_

ext::shared_ptr<ZeroInflationIndex> fixedIndex_
private

Definition at line 155 of file cpiswap.hpp.

◆ observationLag_

Period observationLag_
private

Definition at line 156 of file cpiswap.hpp.

◆ observationInterpolation_

CPI::InterpolationType observationInterpolation_
private

Definition at line 157 of file cpiswap.hpp.

◆ inflationNominal_

Real inflationNominal_
private

Definition at line 158 of file cpiswap.hpp.

◆ fairSpread_

Spread fairSpread_
mutableprivate

Definition at line 160 of file cpiswap.hpp.

◆ fairRate_

Rate fairRate_
mutableprivate

Definition at line 161 of file cpiswap.hpp.