# 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 = 6×2 105 × 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 = 6×2 105 × 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: 196 Receiver: 23 (Knockout) ```
```[Payer,Receiver] = cdsoptprice(ZeroData, ProbData, Settle, OptionMaturity, ... CDSMaturity, OptionStrike, SpreadVolatility, 'Knockout', false); fprintf(' Payer: %.0f Receiver: %.0f (Non-Knockout)\n',Payer,Receiver);```
``` Payer: 224 Receiver: 23 (Non-Knockout) ```