Determine price for credit default swap
[Price,AccPrem,PaymentDates,PaymentTimes,PaymentCF] = cdsprice(ZeroData,ProbData,Settle,Maturity,ContractSpread)
[Price,AccPrem,PaymentDates,PaymentTimes,PaymentCF] = cdsprice(___,Name,Value)
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
ZeroData— Zero rate data
Zero rate data, specified as a
of dates and zero rates or an
of zero rates.
ZeroData is an
ZeroData and are redundant inside this
function. In this case, specify these optional parameters when constructing
IRDataCurve object before using the
ProbData— Default probability values
Default probability values, specified as a
with dates and corresponding cumulative default probability values.
Settle— Settlement date
Settlement date, specified as a
of serial date numbers or date character vectors. The
must be earlier than or equal to the dates in
Maturity— Maturity date
Maturity date, specified as a
of serial date numbers or date character vectors.
ContractSpread— Contract spreads
Contract spreads, specified as a
of spreads, expressed in basis points.
Specify optional comma-separated pairs of
Name is the argument
Value is the corresponding
Name must appear
inside single quotes (
You can specify several name and value pair
arguments in any order as
[Price,AccPrem] = cdsprice(ZeroData,ProbData,Settle,Maturity,ContractSpread,'Basis',7,'BusDayConvention','previous')
Any optional input of size
'RecoveryRate'— Recovery rate
0.4(default) | decimal
Recovery rate, specified as a
of recovery rates, specified as a decimal from
'Period'— Premium payment frequency
4(default) | numeric with values
Premium payment frequency, specified as a
with values of
'Basis'— Day-count basis of contract
2(actual/360) (default) | positive integers of the set
[1...13]| vector of positive integers of the set
Day-count basis of the contract, specified as a positive integer
0 = actual/actual
1 = 30/360 (SIA)
2 = actual/360
3 = actual/365
4 = 30/360 (PSA)
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/365 (ISDA)
13 = BUS/252
For more information, see basis.
'BusDayConvention'— Business day conventions
actual(default) | character vector
Business day conventions, specified by a character vector. 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 (for example, 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
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
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.
'PayAccruedPremium'— Flag for accrued premiums paid upon default
true(default) | integer with value
Flag for accrued premiums paid upon default, specified as a
of Boolean flags that is
true (default) if accrued
premiums are paid upon default,
'Notional'— Contract notional values
10MM(default) | positive or negative integer
Contract notional values, specified as a
of integers. Use positive integer values for long positions and negative
integer values for short positions.
'TimeStep'— Number of days as time step for numerical integration
10(days) (default) | nonnegative integer
Number of days to take as time step for the numerical integration, specified as a nonnegative integer.
'ZeroCompounding'— Compounding frequency of the zero curve
2(semiannual) (default) | integer with value of
Compounding frequency of the zero curve, specified using values:
1 — Annual compounding
2 — Semiannual compounding
3 — Compounding three times
4 — Quarterly compounding
6 — Bimonthly compounding
12 — Monthly compounding
−1 — Continuous compounding
'ZeroBasis'— Basis of the zero curve
0(actual/actual) (default) | integer with value of
Basis of the zero curve, where the choices are identical to
Price— CDS clean prices
CDS clean prices, returned as a
AccPrem— Acrued premiums
Acrued premiums, returned as a
PaymentDates— Payment dates
Payment dates, returned as a
PaymentTimes— Payment times
Payment times, returned as a
of accrual fractions.
Payments, returned as a
The price or mark-to-market (MtM) value of an existing CDS contract.
The CDS price is computed using the following formula:
CDS price = Notional * (Current Spread - Contract Spread)
Current Spread is the current breakeven spread
for a similar contract, according to current market conditions.
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
The premium leg is computed as the product of a spread S and
the risky present value of a basis point (
RPV01 is given by:
when no accrued premiums are paid upon default, and it can be approximated by
when accrued premiums are paid upon default. Here, t0 =
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:
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:
Notional (S0 –SC)
This assumes a long position from the protection standpoint (protection was bought). For short positions, the sign is reversed.
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. Vol. 8, pp. 29–40.
O'Kane, D. and S. Turnbull. "Valuation of Credit Default Swaps." Lehman Brothers, Fixed Income Quantitative Credit Research, April 2003.