Documentation

This is machine translation

Translated by
Mouse over text to see original. Click the button below to return to the English verison of the page.

Credit Default Swap Option

A credit default swap (CDS) option, or credit default swaption, is a contract that provides the holder with the right, but not the obligation, to enter into a credit default swap in the future. CDS options can either be payer swaptions or receiver swaptions. If a payer swaption, the option holder has the right to enter into a CDS where they pay premiums; and, if a receiver swaption, the option holder receives premiums. Financial Instruments Toolbox™ software provides `cdsoptprice` for pricing payer and receiver credit default swaptions. Also, with some additional steps, `cdsoptprice` can be used for pricing multi-name CDS index options.

Pricing a Single-Name CDS Option

This example shows how to price a single-name CDS option using `cdsoptprice`. The function `cdsoptprice` is based on the Black's model as described in O'Kane (2008). The optional `knockout` argument for `cdsoptprice` supports two variations of the mechanics of a CDS option. CDS options can be knockout or non-knockout options.

• A knockout option cancels with no payments if there is a credit event before the option expiry date.

• A non-knockout option does not cancel if there is a credit event before the option expiry date. In this case, the option holder of a non-knockout payer swaption can take delivery of the underlying long protection CDS on the option expiry date and exercise the protection, delivering a defaulted obligation in return for par. This portion of protection from option initiation to option expiry is known as the front-end protection (FEP). While this distinction does not affect the receiver swaption, the price of a non-knockout payer swaption is obtained by adding the value of the FEP to the knockout payer swaption price.

Define the CDS instrument.

```Settle = datenum('12-Jun-2012'); OptionMaturity = datenum('20-Sep-2012'); CDSMaturity = datenum('20-Sep-2017'); OptionStrike = 200; SpreadVolatility = .4; ```

Define the zero rate.

```Zero_Time = [.5 1 2 3 4 5]'; Zero_Rate = [.5 .75 1.5 1.7 1.9 2.2]'/100; Zero_Dates = daysadd(Settle,360*Zero_Time,1); ZeroData = [Zero_Dates Zero_Rate] ```
```ZeroData = 1.0e+05 * 7.3521 0.0000 7.3540 0.0000 7.3576 0.0000 7.3613 0.0000 7.3649 0.0000 7.3686 0.0000 ```

Define the market data.

```Market_Time = [1 2 3 5 7 10]'; Market_Rate = [100 120 145 220 245 270]'; Market_Dates = daysadd(Settle,360*Market_Time,1); MarketData = [Market_Dates Market_Rate]; ProbData = cdsbootstrap(ZeroData, MarketData, Settle) ```
```ProbData = 1.0e+05 * 7.3540 0.0000 7.3576 0.0000 7.3613 0.0000 7.3686 0.0000 7.3759 0.0000 7.3868 0.0000 ```

Define the CDS option.

```[Payer,Receiver] = cdsoptprice(ZeroData, ProbData, Settle, OptionMaturity, ... CDSMaturity, OptionStrike, SpreadVolatility, 'Knockout', true); fprintf(' Payer: %.0f Receiver: %.0f (Knockout)\n',Payer,Receiver); [Payer,Receiver] = cdsoptprice(ZeroData, ProbData, Settle, OptionMaturity, ... CDSMaturity, OptionStrike, SpreadVolatility, 'Knockout', false); fprintf(' Payer: %.0f Receiver: %.0f (Non-Knockout)\n',Payer,Receiver); ```
``` Payer: 196 Receiver: 23 (Knockout) Payer: 224 Receiver: 23 (Non-Knockout) ```

Pricing a CDS Index Option

This example shows how to price CDS index options by using `cdsoptprice` with the forward spread adjustment. Unlike a single-name CDS, a CDS portfolio index contains multiple credits. When one or more of the credits default, the corresponding contingent payments are made to the protection buyer but the contract still continues with reduced coupon payments. Considering the fact that the CDS index option does not cancel when some of the underlying credits default before expiry, one might attempt to price CDS index options using the Black's model for non-knockout single-name CDS option. However, Black's model in this form is not appropriate for pricing CDS index options because it does not capture the exercise decision correctly when the strike spread (K) is very high, nor does it ensure put-call parity when (K) is not equal to the contractual spread (O'Kane, 2008).

However, with the appropriate modifications, Black's model for single-name CDS options used in `cdsoptprice` can provide a good approximation for CDS index options. While there are some variations in the way the Black's model is modified for CDS index options, they usually involve adjusting the forward spread F, the strike spread K, or both. Here we describe the approach of adjusting the forward spread only. In the Black's model for single-name CDS options, the forward spread F is defined as:

`$F=S\left(t,{t}_{E},T\right)=\frac{S\left(t,T\right)RPV01\left(t,T\right)-S\left(t,{t}_{E}\right)RPV01\left(t,{t}_{E}\right)}{RPV01\left(t,{t}_{E},T\right)}$`

where

RPV01 is the risky present value of a basis point (see `cdsrpv01`).

t is the valuation date.

tE is the option expiry date.

T is the CDS maturity date.

To capture the exercise decision correctly for CDS index options, we use the knockout form of the Black's model and adjust the forward spread to incorporate the FEP as follows:

`${F}_{Adj}=F+\frac{FEP}{RPV01\left(t,{t}_{E},T\right)}$`

with FEP defined as

`$FEP=\left(1-R\right)Z\left(t,{t}_{E}\right)\left(1-Q\left(t,{t}_{E}\right)\right)$`

where

R is the recovery rate.

Z is the discount factor.

Q is the survival probability.

In `cdsoptprice`, forward spread adjustment can be made with the `AdjustedForwardSpread` parameter. When computing the adjusted forward spread, we can compute the spreads using `cdsspread` and the RPV01s using `cdsrpv01`.

Set up the data for the CDS index, its option, and zero curve. The underlying is a 5-year CDS index maturing on 20-Jun-2017 and the option expires on 20-Jun-2012. Note that a flat index spread is assumed when bootstrapping the default probability curve.

```% CDS index and option data Recovery = .4; Basis = 2; Period = 4; CDSMaturity = datenum('20-Jun-2017'); ContractSpread = 100; IndexSpread = 140; BusDayConvention = 'follow'; Settle = datenum('13-Apr-2012'); OptionMaturity = datenum('20-Jun-2012'); OptionStrike = 140; SpreadVolatility = .69; % Zero curve data MM_Time = [1 2 3 6]'; MM_Rate = [0.004111 0.00563 0.00757 0.01053]'; MM_Dates = daysadd(Settle,30*MM_Time,1); Swap_Time = [1 2 3 4 5 6 7 8 9 10 12 15 20 30]'; Swap_Rate = [0.01387 0.01035 0.01145 0.01318 0.01508 0.01700 0.01868 ... 0.02012 0.02132 0.02237 0.02408 0.02564 0.02612 0.02524]'; Swap_Dates = daysadd(Settle,360*Swap_Time,1); InstTypes = [repmat({'deposit'},size(MM_Time));repmat({'swap'},size(Swap_Time))]; Instruments = [repmat(Settle,size(InstTypes)) [MM_Dates;Swap_Dates] [MM_Rate;Swap_Rate]]; ZeroCurve = IRDataCurve.bootstrap('zero',Settle,InstTypes,Instruments); % Bootstrap the default probability curve assuming a flat index spread. MarketData = [CDSMaturity IndexSpread]; ProbDates = datemnth(OptionMaturity,(0:5*12)'); ProbData = cdsbootstrap(ZeroCurve, MarketData, Settle, 'ProbDates', ProbDates); ```

Compute the spot and forward RPV01s, which will be used later in the computation of the adjusted forward spread. For this purpose, we can use `cdsrpv01`.

```% RPV01(t,T) RPV01_CDSMaturity = cdsrpv01(ZeroCurve,ProbData,Settle,CDSMaturity) % RPV01(t,t_E,T) RPV01_OptionExpiryForward = cdsrpv01(ZeroCurve,ProbData,Settle,CDSMaturity,... 'StartDate',OptionMaturity) % RPV01(t,t_E) = RPV01(t,T) - RPV01(t,t_E,T) RPV01_OptionExpiry = RPV01_CDSMaturity - RPV01_OptionExpiryForward ```
```RPV01_CDSMaturity = 4.7853 RPV01_OptionExpiryForward = 4.5971 RPV01_OptionExpiry = 0.1882```

Compute the spot spreads using `cdsspread`.

```% S(t,t_E) Spread_OptionExpiry = cdsspread(ZeroCurve,ProbData,Settle,OptionMaturity,... 'Period',Period,'Basis',Basis,'BusDayConvention',BusDayConvention,... 'PayAccruedPremium',true,'recoveryrate',Recovery) % S(t,T) Spread_CDSMaturity = cdsspread(ZeroCurve,ProbData,Settle,CDSMaturity,... 'Period',Period,'Basis',Basis,'BusDayConvention',BusDayConvention,... 'PayAccruedPremium',true,'recoveryrate',Recovery) ```
```Spread_OptionExpiry = 139.9006 Spread_CDSMaturity = 140.0000 ```

The spot spreads and RPV01s are then used to compute the forward spread.

```% F = S(t,t_E,T) ForwardSpread = (Spread_CDSMaturity.*RPV01_CDSMaturity - ... Spread_OptionExpiry.*RPV01_OptionExpiry)./RPV01_OptionExpiryForward ```
```ForwardSpread = 140.0040 ```

Compute the front-end protection (FEP).

```FEP = 10000*(1-Recovery)*ZeroCurve.getDiscountFactors(OptionMaturity)*ProbData(1,2) ```
```FEP = 26.3108```

`AdjustedForwardSpread = ForwardSpread + FEP./RPV01_OptionExpiryForward`
```AdjustedForwardSpread = 145.7273```

Compute the option prices using `cdsoptprice` with the adjusted forward spread. Note again that the `Knockout` parameter should be set to be `true` because the FEP was already incorporated into the adjusted forward spread.

```[Payer,Receiver] = cdsoptprice(ZeroCurve, ProbData, Settle, OptionMaturity, ... CDSMaturity, OptionStrike, SpreadVolatility,'Knockout',true,... 'AdjustedForwardSpread', AdjustedForwardSpread,'PayAccruedPremium',true); fprintf(' Payer: %.0f Receiver: %.0f \n',Payer,Receiver); ```
`Payer: 92 Receiver: 66 `

References

O'Kane, D., Modelling Single-name and Multi-name Credit Derivatives, Wiley, 2008.