### A free/open-source library for quantitative finance

Classes | Public Member Functions
SyntheticCDO Class Reference

Synthetic Collateralized Debt Obligation. More...

`#include <ql/experimental/credit/syntheticcdo.hpp>`

Inheritance diagram for SyntheticCDO:
[legend]

List of all members.

## Classes

class | engine
| CDO base engine. More...

## Public Member Functions

| SyntheticCDO (const boost::shared_ptr< Basket > basket, Protection::Side side, const Schedule &schedule, Rate upfrontRate, Rate runningRate, const DayCounter &dayCounter, BusinessDayConvention paymentConvention, const Handle< YieldTermStructure > &yieldTS)
boost::shared_ptr< Basket > | basket () const
bool | isExpired () const
| returns whether the instrument might have value greater than zero.
Rate | fairPremium () const
Rate | fairUpfrontPremium () const
Rate | premiumValue () const
Rate | protectionValue () const
Real | premiumLegNPV () const
Real | protectionLegNPV () const
Real | remainingNotional () const
std::vector< Real > | expectedTrancheLoss () const
Size | error () const
void | setupArguments (PricingEngine::arguments *) const
void | fetchResults (const PricingEngine::results *) const

## Detailed Description

Synthetic Collateralized Debt Obligation.

The instrument prices a mezzanine CDO tranche with loss given default between attachment point and detachment point .

For purchased protection, the instrument value is given by the difference of the protection value and premium value ,

The protection leg is priced as follows:

- Build the probability distribution for volume of defaults (before recovery) or Loss Given Default at times/dates (premium schedule times with intermediate steps)

- Determine the expected value of the protection payoff at each time where

- The protection value is then calculated as

  where is the discount factor at time/date

The premium is paid on the protected notional amount, initially This notional amount is reduced by the expected protection payments at times so that the premium value is calculated as

where is the premium rate, is the day count fraction between date/time and

The construction of the portfolio loss distribution 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.

Possible enhancements:
  Investigate and fix cases

## Member Function Documentation

Real remainingNotional | ( |  | ) | const

Total outstanding tranche notional, not wiped out

std::vector<Real> expectedTrancheLoss | ( |  | ) | const

Expected tranche loss for all payment dates

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.

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.