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
SyntheticCDO Class Reference

Synthetic Collateralized Debt Obligation. More...

#include <syntheticcdo.hpp>

+ Inheritance diagram for SyntheticCDO:
+ Collaboration diagram for SyntheticCDO:

Classes

class  arguments
 
class  engine
 CDO base engine. More...
 
class  results
 

Public Member Functions

 SyntheticCDO (const ext::shared_ptr< Basket > &basket, Protection::Side side, Schedule schedule, Rate upfrontRate, Rate runningRate, const DayCounter &dayCounter, BusinessDayConvention paymentConvention, ext::optional< Real > notional=ext::nullopt)
 
const ext::shared_ptr< Basket > & basket () const
 
bool isExpired () const override
 returns whether the instrument might have value greater than zero. More...
 
Rate fairPremium () const
 
Rate fairUpfrontPremium () const
 
Rate premiumValue () const
 
Rate protectionValue () const
 
Real premiumLegNPV () const
 
Real protectionLegNPV () const
 
Real remainingNotional () const
 
Real leverageFactor () const
 
const Datematurity () const
 Last protection date. More...
 
Real implicitCorrelation (const std::vector< Real > &recoveries, const Handle< YieldTermStructure > &discountCurve, Real targetNPV=0., Real accuracy=1.0e-3) const
 
std::vector< RealexpectedTrancheLoss () const
 
Size error () const
 
void setupArguments (PricingEngine::arguments *) const override
 
void fetchResults (const PricingEngine::results *) const override
 
- 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

ext::shared_ptr< Basketbasket_
 
Protection::Side side_
 
Leg normalizedLeg_
 
Rate upfrontRate_
 
Rate runningRate_
 
const Real leverageFactor_
 
DayCounter dayCounter_
 
BusinessDayConvention paymentConvention_
 
Real premiumValue_
 
Real protectionValue_
 
Real upfrontPremiumValue_
 
Real remainingNotional_
 
Size error_
 
std::vector< RealexpectedTrancheLoss_
 

Additional Inherited Members

- Public Types inherited from Observer
typedef set_type::iterator iterator
 
- Protected Member Functions inherited from Instrument
void calculate () const override
 
void performCalculations () const override
 
- Protected Member Functions inherited from LazyObject
- 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

Synthetic Collateralized Debt Obligation.

The instrument prices a mezzanine CDO tranche with loss given default between attachment point \( D_1\) and detachment point \( D_2 > D_1 \).

For purchased protection, the instrument value is given by the difference of the protection value \( V_1 \) and premium value \( V_2 \),

\[ V = V_1 - V_2. \]

The protection leg is priced as follows:

The premium is paid on the protected notional amount, initially \( D_2 - D_1. \) This notional amount is reduced by the expected protection payments \( E_i \) at times \( t_i, \) so that the premium value is calculated as

\[ V_2 =m \, \cdot \sum_{i=1}^N \,(D_2 - D_1 - E_i) \cdot \Delta_{i-1,i}\,d_i \]

where \( m \) is the premium rate, \( \Delta_{i-1, i}\) is the day count fraction between date/time \( t_{i-1}\) and \( t_i.\)

The construction of the portfolio loss distribution \( E_i \) is based on the probability bucketing algorithm described in

John Hull and Alan White, "Valuation of a CDO and nth to default CDS without Monte Carlo simulation", Journal of Derivatives 12, 2, 2004

The pricing algorithm allows for varying notional amounts and default termstructures of the underlyings.

Definition at line 104 of file syntheticcdo.hpp.

Constructor & Destructor Documentation

◆ SyntheticCDO()

SyntheticCDO ( const ext::shared_ptr< Basket > &  basket,
Protection::Side  side,
Schedule  schedule,
Rate  upfrontRate,
Rate  runningRate,
const DayCounter dayCounter,
BusinessDayConvention  paymentConvention,
ext::optional< Real notional = ext::nullopt 
)

If the notional exceeds the basket inception tranche notional, the cdo is leveraged by that factor.

Definition at line 36 of file syntheticcdo.cpp.

+ Here is the call graph for this function:

Member Function Documentation

◆ basket()

const ext::shared_ptr< Basket > & basket ( ) const

Definition at line 127 of file syntheticcdo.hpp.

+ Here is the caller graph for this function:

◆ isExpired()

bool isExpired ( ) const
overridevirtual

returns whether the instrument might have value greater than zero.

Implements Instrument.

Definition at line 131 of file syntheticcdo.cpp.

+ Here is the call graph for this function:

◆ fairPremium()

Rate fairPremium ( ) const

Definition at line 109 of file syntheticcdo.cpp.

+ Here is the call graph for this function:

◆ fairUpfrontPremium()

Rate fairUpfrontPremium ( ) const

Definition at line 116 of file syntheticcdo.cpp.

+ Here is the call graph for this function:

◆ premiumValue()

Rate premiumValue ( ) const

Definition at line 87 of file syntheticcdo.cpp.

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

◆ protectionValue()

Rate protectionValue ( ) const

Definition at line 92 of file syntheticcdo.cpp.

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

◆ premiumLegNPV()

Real premiumLegNPV ( ) const

Definition at line 97 of file syntheticcdo.cpp.

+ Here is the call graph for this function:

◆ protectionLegNPV()

Real protectionLegNPV ( ) const

Definition at line 103 of file syntheticcdo.cpp.

+ Here is the call graph for this function:

◆ remainingNotional()

Real remainingNotional ( ) const

Total outstanding tranche notional, not wiped out

Definition at line 138 of file syntheticcdo.cpp.

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

◆ leverageFactor()

Real leverageFactor ( ) const

The number of times the contract contains the portfolio tranched notional.

Definition at line 143 of file syntheticcdo.hpp.

◆ maturity()

const Date & maturity ( ) const

Last protection date.

Definition at line 147 of file syntheticcdo.hpp.

◆ implicitCorrelation()

Real implicitCorrelation ( const std::vector< Real > &  recoveries,
const Handle< YieldTermStructure > &  discountCurve,
Real  targetNPV = 0.,
Real  accuracy = 1.0e-3 
) const

The Gaussian Copula LHP implied correlation that makes the contract zero value. This is for a flat correlation along time and portfolio loss level.

Definition at line 229 of file syntheticcdo.cpp.

+ Here is the call graph for this function:

◆ expectedTrancheLoss()

std::vector< Real > expectedTrancheLoss ( ) const

Expected tranche loss for all payment dates

Definition at line 121 of file syntheticcdo.cpp.

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

◆ error()

Size error ( ) const

Definition at line 126 of file syntheticcdo.cpp.

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

◆ setupArguments()

void setupArguments ( PricingEngine::arguments ) const
overridevirtual

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.

Definition at line 143 of file syntheticcdo.cpp.

+ Here is the caller 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 157 of file syntheticcdo.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 171 of file syntheticcdo.cpp.

+ Here is the call graph for this function:

Member Data Documentation

◆ basket_

ext::shared_ptr<Basket> basket_
private

Definition at line 172 of file syntheticcdo.hpp.

◆ side_

Protection::Side side_
private

Definition at line 173 of file syntheticcdo.hpp.

◆ normalizedLeg_

Leg normalizedLeg_
private

Definition at line 174 of file syntheticcdo.hpp.

◆ upfrontRate_

Rate upfrontRate_
private

Definition at line 176 of file syntheticcdo.hpp.

◆ runningRate_

Rate runningRate_
private

Definition at line 177 of file syntheticcdo.hpp.

◆ leverageFactor_

const Real leverageFactor_
private

Definition at line 178 of file syntheticcdo.hpp.

◆ dayCounter_

DayCounter dayCounter_
private

Definition at line 179 of file syntheticcdo.hpp.

◆ paymentConvention_

BusinessDayConvention paymentConvention_
private

Definition at line 180 of file syntheticcdo.hpp.

◆ premiumValue_

Real premiumValue_
mutableprivate

Definition at line 182 of file syntheticcdo.hpp.

◆ protectionValue_

Real protectionValue_
mutableprivate

Definition at line 183 of file syntheticcdo.hpp.

◆ upfrontPremiumValue_

Real upfrontPremiumValue_
mutableprivate

Definition at line 184 of file syntheticcdo.hpp.

◆ remainingNotional_

Real remainingNotional_
mutableprivate

Definition at line 185 of file syntheticcdo.hpp.

◆ error_

Size error_
mutableprivate

Definition at line 186 of file syntheticcdo.hpp.

◆ expectedTrancheLoss_

std::vector<Real> expectedTrancheLoss_
mutableprivate

Definition at line 187 of file syntheticcdo.hpp.