# Price Multiple CDS Option Instruments Using CDS Black Model and CDS Black Pricer

This example shows the workflow to price multiple `CDSOption` instruments using a `CDSBlack` model and a `CDSBlack` pricer.

### Create `ratecurve` Object

Create a `ratecurve` object using `ratecurve`.

```Settle = datetime(2021,9,20); ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]; ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]'; ZeroDates = Settle + ZeroTimes; ZeroCurve = ratecurve("zero", Settle, ZeroDates ,ZeroRates)```
```ZeroCurve = ratecurve with properties: Type: "zero" Compounding: -1 Basis: 0 Dates: [10x1 datetime] Rates: [10x1 double] Settle: 20-Sep-2021 InterpMethod: "linear" ShortExtrapMethod: "next" LongExtrapMethod: "previous" ```

### Create `defprobcurve` Object

Create a `defprobcurve` object using `defprobcurve`.

```DefProbTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]; DefaultProbabilities = [0.005 0.007 0.01 0.015 0.026 0.04 0.077 0.093 0.15 0.20]'; ProbDates = Settle + DefProbTimes; DefaultProbCurve = defprobcurve(Settle, ProbDates, DefaultProbabilities)```
```DefaultProbCurve = defprobcurve with properties: Settle: 20-Sep-2021 Basis: 2 Dates: [10x1 datetime] DefaultProbabilities: [10x1 double] ```

### Create `CDS` Instrument Object

Use `fininstrument` to create an underlying `CDS` instrument object.

```ContractSpreadBP = 0; % Contractual spread is determined on ExerciseDate CDS = fininstrument("CDS",'Maturity',datetime(2027,9,20),'ContractSpread',ContractSpreadBP)```
```CDS = CDS with properties: ContractSpread: 0 Maturity: 20-Sep-2027 Period: 4 Basis: 2 RecoveryRate: 0.4000 BusinessDayConvention: "actual" Holidays: NaT PayAccruedPremium: 1 Notional: 10000000 Name: "" ```

### Create `CDSOption` Instrument Objects

Use `fininstrument` to create multiple `CDSOption` instrument objects.

```ExerciseDate = datetime(2021, 12, 20); Strikes = [30:2:90]'; PayerCDSOptions = fininstrument("CDSOption",'Strike',Strikes,'ExerciseDate',ExerciseDate,'OptionType',"call",'CDS',CDS)```
```PayerCDSOptions=31×1 CDSOption array with properties: OptionType Strike Knockout AdjustedForwardSpread ExerciseDate CDS Name ⋮ ```
`ReceiverCDSOptions = fininstrument("CDSOption",'Strike',Strikes,'ExerciseDate',ExerciseDate,'OptionType',"put",'CDS',CDS)`
```ReceiverCDSOptions=31×1 CDSOption array with properties: OptionType Strike Knockout AdjustedForwardSpread ExerciseDate CDS Name ⋮ ```

### Price `CDSOption` Instruments

Assuming a flat volatility structure across strikes, first use `finmodel` to create a `CDSBlack` model object. Then use `finpricer` to create a `CDSBlack` pricer object. Use `price` to compute the prices for the `CDSOption` instruments.

```SpreadVolatility = 0.3; CDSOptionModel = finmodel("CDSBlack",'SpreadVolatility',SpreadVolatility)```
```CDSOptionModel = CDSBlack with properties: SpreadVolatility: 0.3000 ```
`CDSOptionpricer = finpricer("analytic",'Model',CDSOptionModel,'DiscountCurve',ZeroCurve,'DefaultProbabilityCurve',DefaultProbCurve)`
```CDSOptionpricer = CDSBlack with properties: Model: [1x1 finmodel.CDSBlack] DiscountCurve: [1x1 ratecurve] DefaultProbabilityCurve: [1x1 defprobcurve] ```
`PayerPrices = price(CDSOptionpricer,PayerCDSOptions)`
```PayerPrices = 31×1 171.7269 160.6802 149.6346 138.5931 127.5648 116.5716 105.6576 94.8983 84.4061 74.3266 ⋮ ```
`ReceiverPrices = price(CDSOptionpricer,ReceiverCDSOptions)`
```ReceiverPrices = 31×1 0.0000 0.0003 0.0016 0.0070 0.0256 0.0794 0.2123 0.4999 1.0547 2.0221 ⋮ ```

### Plot CDS Option Prices

Plot the payer and receiver CDS option prices.

```figure; plot(Strikes, PayerPrices, '--', Strikes, ReceiverPrices) title('CDS Option Pricing') xlabel('Option Strike (Basis Points)') ylabel('Option Premium (Basis Points)') legend('Payer CDS Options','Receiver CDS Options','Location','best')```