Main Content

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: [10×1 datetime]
                Rates: [10×1 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: [10×1 datetime]
    DefaultProbabilities: [10×1 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: [1×1 finmodel.CDSBlack]
              DiscountCurve: [1×1 ratecurve]
    DefaultProbabilityCurve: [1×1 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
   64.8253
   56.0664
   48.1898
   41.2910
   35.4107
      ⋮

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
    3.5677
    5.8557
    9.0260
   13.1742
   18.3409
      ⋮

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')

Figure contains an axes object. The axes object with title CDS Option Pricing, xlabel Option Strike (Basis Points), ylabel Option Premium (Basis Points) contains 2 objects of type line. These objects represent Payer CDS Options, Receiver CDS Options.

See Also

Functions

Topics