# cdsprice

Determine price for credit default swap

## Syntax

```[Price, AccPrem, PaymentDates, PaymentTimes,PaymentCF] = cdsprice(ZeroData, ProbData, Settle,Maturity, ContractSpread)[Price, AccPrem, PaymentDates, PaymentTimes,PaymentCF] = cdsprice(ZeroData, ProbData,Settle, Maturity, ContractSpread,Name,Value)```

## Description

```[Price, AccPrem, PaymentDates, PaymentTimes,PaymentCF] = cdsprice(ZeroData, ProbData, Settle,Maturity, ContractSpread)``` computes the price, or the mark-to-market value for CDS instruments.

```[Price, AccPrem, PaymentDates, PaymentTimes,PaymentCF] = cdsprice(ZeroData, ProbData,Settle, Maturity, ContractSpread,Name,Value)``` computes the price, or the mark-to-market value for CDS instruments with additional options specified by one or more `Name,Value` pair arguments.

## Input Arguments

 `ZeroData` `M`-by-`2` vector of dates and zero rates or an `IRDataCurve` object of zero rates. `ProbData` `P`-by-`2` array of dates and default probabilities. `Settle` Settlement date is a serial date number or date string. This must be earlier than or equal to the `Maturity` dates. `Maturity` `N`-by-`1` vector of serial date numbers or date strings containing the maturity dates. `ContractSpread` `N`-by-`1` vector of contract spreads, expressed in basis points.

### Name-Value Pair Arguments

Specify optional comma-separated pairs of `Name,Value` arguments. `Name` is the argument name and `Value` is the corresponding value. `Name` must appear inside single quotes (`' '`). You can specify several name and value pair arguments in any order as `Name1,Value1,...,NameN,ValueN`.

 Note:   Any optional input of size `N`-by-1 is also acceptable as an array of size `1`-by-`N`, or as a single value applicable to all contracts. Single values are internally expanded to an array of size `N`-by-1.

`'Basis'`

`N`-by-`1` vector of day-count basis of the CDS:

• 0 = actual/actual

• 1 = 30/360 (SIA)

• 2 = actual/360

• 3 = actual/365

• 4 = 30/360 (BMA)

• 5 = 30/360 (ISDA)

• 6 = 30/360 (European)

• 7 = actual/365 (Japanese)

• 8 = actual/actual (ICMA)

• 9 = actual/360 (ICMA)

• 10 = actual/365 (ICMA)

• 11 = 30/360E (ICMA)

• 12 = actual/actual (ISDA)

• 13 = BUS/252

Default: `2` (actual/360)

`'BusDayConvention'`

Business day conventions, specified by a string or `N`-by-`1` cell array of strings of business day conventions. The selection for business day convention determines how non-business days are treated. Non-business days are defined as weekends plus any other date that businesses are not open (e.g. statutory holidays). Values are:

• `actual` — Non-business days are effectively ignored. Cash flows that fall on non-business days are assumed to be distributed on the actual date.

• `follow` — Cash flows that fall on a non-business day are assumed to be distributed on the following business day.

• `modifiedfollow` — Cash flows that fall on a non-business day are assumed to be distributed on the following business day. However if the following business day is in a different month, the previous business day is adopted instead.

• `previous` — Cash flows that fall on a non-business day are assumed to be distributed on the previous business day.

• `modifiedprevious` — Cash flows that fall on a non-business day are assumed to be distributed on the previous business day. However if the previous business day is in a different month, the following business day is adopted instead.

Default: `actual`

`'Notional'`

`N`-by-`1` vector of contract notional values. Use positive values for long positions and negative values for short positions.

Default: `10MM`

`'PayAccruedPremium'`

`N`-by-`1` vector of Boolean flags. `True`, if accrued premiums are paid upon default, `False` otherwise.

Default: `True`

`'Period'`

`N`-by-`1` vector of number of premiums per year of the CDS. Allowed values are 1, 2, 3, 4, 6, and 12.

Default: `4`

`'RecoveryRate'`

`N`-by-`1` vector of recovery rates, expressed as a decimal from `0` to `1`.

Default: `0.4`

`'TimeStep'`

Positive integer indicating the number of days to take as time step for the numerical integration.

Default: `10` (days)

`'ZeroBasis'`

Basis of the zero curve, where the choices are identical to `Basis`.

Default: `0` (actual/actual)

`'ZeroCompounding'`

Compounding frequency of the zero curve. Allowed values are:

• 1 — Annual compounding

• 2 — Semiannual compounding

• 3 — Compounding three times per year

• 4 — Quarterly compounding

• 6 — Bimonthly compounding

• 12 — Monthly compounding

• -1 — Continuous compounding

 Note:   When `ZeroData` is an `IRDataCurve` object, the arguments `ZeroCompounding` and `ZeroBasis` are implicit in `ZeroData` and are redundant inside this function. In that case, specify these optional arguments when constructing the `IRDataCurve` object before calling this function.

Default: `2` (Semiannual compounding)

## Output Arguments

 `Price` `N`-by-`1` vector of CDS clean prices. `AccPrem` `N`-by-`1` vector of accrued premiums. `PaymentDates` `N`-by-`numCF` matrix of payment dates. `PaymentTimes` `N`-by-`numCF` matrix of accrual fractions. `PaymentCF` `N`-by-`numCF` matrix of payments.

## Examples

collapse all

### Determine the Price For a Credit Default Swap

This example shows how to use `cdsprice` to compute the clean price for a CDS contract using the following data.

```Settle = '17-Jul-2009'; % valuation date for the CDS Zero_Time = [.5 1 2 3 4 5]'; Zero_Rate = [1.35 1.43 1.9 2.47 2.936 3.311]'/100; Zero_Dates = daysadd(Settle,360*Zero_Time,1); ZeroData = [Zero_Dates Zero_Rate]; ProbData = [daysadd(datenum(Settle),360,1), 0.0247]; Maturity = '20-Sep-2010'; ContractSpread = 135; [Price,AccPrem] = cdsprice(ZeroData,ProbData,Settle,Maturity,ContractSpread) ```
```Price = 1.5461e+04 AccPrem = 10500 ```

collapse all

### CDS Price

The price or mark-to-market (MtM) value of an existing CDS contract is computed using the following formula:

```CDS price = Notional * (Current Spread - Contract Spread) * RPV01```

`Current Spread` is the current breakeven spread for a similar contract, according to current market conditions. `RPV01` is the 'risky present value of a basis point,' the present value of the premium payments, considering the default probability. This formula assumes a long position, and the right side is multiplied by -1 for short positions.

### Algorithms

The premium leg is computed as the product of a spread S and the risky present value of a basis point (`RPV01`). The `RPV01` is given by:

$RPV01=\sum _{j=1}^{N}Z\left(tj\right)\Delta \left(tj-1,tj,B\right)Q\left(tj\right)$

when no accrued premiums are paid upon default, and it can be approximated by

$RPV01\approx \frac{1}{2}\sum _{j=1}^{N}Z\left(tj\right)\Delta \left(tj-1,tj,B\right)\left(Q\left(tj-1\right)+Q\left(tj\right)\right)$

when accrued premiums are paid upon default. Here, t0 = `0` is the valuation date, and t1,...,tn = T are the premium payment dates over the life of the contract,T is the maturity of the contract, Z(t) is the discount factor for a payment received at time t, and Δ(tj-1, tj, B) is a day count between dates tj-1 and tj corresponding to a basis B.

The protection leg of a CDS contract is given by the following formula:

$ProtectionLeg={\int }_{0}^{T}Z\left(\tau \right)\left(1-R\right)dPD\left(\tau \right)$

$\approx \left(1-R\right)\sum _{i=1}^{M}Z\left(\tau i\right)\left(PD\left(\tau i\right)-PD\left(\tau i-1\right)\right)$

$=\left(1-R\right)\sum _{i=1}^{M}Z\left(\tau i\right)\left(Q\left(\tau i-1\right)-Q\left(\tau i\right)\right)$

where the integral is approximated with a finite sum over the discretization τ0 = `0`,τ1,...,τM = T.

If the spread of an existing CDS contract is SC, and the current breakeven spread for a comparable contract is S0, the current price, or mark-to-market value of the contract is given by:

`MtM` = `Notional` (S0SC )`RPV01`

This assumes a long position from the protection standpoint (protection was bought). For short positions, the sign is reversed.

## References

Beumee, J., D. Brigo, D. Schiemert, and G. Stoyle. "Charting a Course Through the CDS Big Bang," Fitch Solutions, Quantitative Research, Global Special Report. April 7, 2009.

Hull, J., and A. White, "Valuing Credit Default Swaps I: No Counterparty Default Risk," Journal of Derivatives 8, 29–40.

O'Kane, D. and S. Turnbull, "Valuation of Credit Default Swaps." Lehman Brothers, Fixed Income Quantitative Credit Research, April 2003.