Determine spread of credit default swap
collapse all in page
Syntax
[Spread,PaymentDates,PaymentTimes,]= cdsspread(ZeroData,ProbData,Settle,Maturity,)
[Spread,PaymentDates,PaymentTimes,]= cdsspread(___,Name,Value)
Description
[Spread,PaymentDates,PaymentTimes,]= cdsspread(ZeroData,ProbData,Settle,Maturity,)
computesthe spread of the CDS.
example
[Spread,PaymentDates,PaymentTimes,]= cdsspread(___,Name,Value)
addsoptional name-value pair arguments.
example
Examples
collapse all
Determine the Spread of a Credit Default Swap
Open Live Script
This example shows how to use cdsspread
to compute the spread (in basis points) for a CDS contract with the following data.
Settle = '17-Jul-2009'; % valuation date for the CDSZero_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 = datetime(2010,9,20);Spread = cdsspread(ZeroData,ProbData,Settle,Maturity)
Spread = 148.2705
Input Arguments
collapse all
ZeroData
— Zero rate data
vector | IRDataCurve
object
Zero rate data, specified as a M
-by-2
vector of dates, using a serial date number format, and zero rates or an IRDataCurve
object of zero rates.
When ZeroData
is an IRDataCurve
object, ZeroCompounding and ZeroBasis areimplicit in ZeroData
and are redundant inside thisfunction. In this case, specify these optional parameters when constructingthe IRDataCurve
object before using the cdsspread
function.
For more information on an IRDataCurve (Financial Instruments Toolbox) object,see Creating an IRDataCurve Object (Financial Instruments Toolbox).
Data Types: double
| object
ProbData
— Default probability values
matrix
Default probability values, specified as a P
-by-2
matrix with dates, using a serial date number format, and corresponding cumulative default probability values.
Data Types: double
Settle
— Settlement date
datetime scalar | string scalar | date character vector
Settlement date, specified as a scalar datetime, string, or date character vector. The Settle
date must be earlier than or equal to the dates in Maturity.
To support existing code, cdsspread
also accepts serial date numbers as inputs, but they are not recommended.
Data Types: char
| string
| datetime
Maturity
— Maturity date
datetime array | string array | date character vector
Maturity date, specified as a N
-by-1
vector using a datetime array, string array, or date character vectors.
To support existing code, cdsspread
also accepts serial date numbers as inputs, but they are not recommended.
Data Types: char
| string
| datetime
Name-Value Arguments
Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN
, where Name
is the argument name and Value
is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.
Before R2021a, use commas to separate each name and value, and enclose Name
in quotes.
Example: Spread = cdsspread(ZeroData,ProbData,Settle,Maturity,'Basis',7,'BusinessDayConvention','previous')
Note
Any optional input of size N
-by-1
isalso acceptable as an array of size 1
-by-N
,or as a single value applicable to all contracts. Single values areinternally expanded to an array of size N
-by-1
.
RecoveryRate
— Recovery rate
0.4
(default) | decimal
Recovery rate, specified as the comma-separated pair consisting of 'RecoveryRate'
and a N
-by-1
vector of recovery rates, specified as a decimal from 0
to 1
.
Data Types: double
Period
— Premium payment frequency
4
(default) | numeric with values 1
, 2
, 3
, 4
, 6
or 12
Premium payment frequency, specified as the comma-separated pair consisting of 'Period'
and a N
-by-1
vector with values of 1
, 2
, 3
, 4
, 6
, or 12
.
Data Types: double
Basis
— Day-count basis of contract
2
(actual/360) (default) | positive integers of the set [1...13]
| vector of positive integers of the set [1...13]
Day-count basis of the contract, specified as the comma-separated pair consisting of 'Basis'
and a positive integer using a NINST
-by-1
vector.
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.
Data Types: double
BusinessDayConvention
— Business day conventions
actual
(default) | character vector
Business day conventions, specified as the comma-separated pair consisting of 'BusinessDayConvention'
and 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 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.
Data Types: char
PayAccruedPremium
— Flag for accrued premiums paid upon default
true
(default) | integer with value 1
or 0
Flag for accrued premiums paid upon default, specified as the comma-separated pair consisting of 'PayAccruedPremium'
and a N
-by-1
vector of Boolean flags that is true
(default) if accrued premiums are paid upon default, false
otherwise.
Data Types: logical
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 the comma-separated pair consisting of 'TimeStep'
and a nonnegative integer.
Data Types: double
ZeroCompounding
— Compounding frequency of the zero curve
2
(semiannual) (default) | integer with value of 1
,2
,3
,4
,6
,12
,or –1
Compounding frequency of the zero curve, specified as the comma-separated pair consisting of 'ZeroCompounding'
and an integer with values:
1
— Annual compounding2
— Semiannual compounding3
— Compounding three times per year4
— Quarterly compounding6
— Bimonthly compounding12
— Monthly compounding−1
— Continuous compounding
Data Types: double
ZeroBasis
— Basis of the zero curve
0
(actual/actual) (default) | integer with value of 0
to 13
Basis of the zero curve, specified as the comma-separated pair consisting of 'ZeroBasis'
and a positive integer with values that are identical to Basis.
Data Types: double
Output Arguments
collapse all
Spread
— Spreads (in basis points)
vector
Spreads (in basis points), returned as a N
-by-1
vector.
PaymentDates
— Payment dates
matrix
Payment dates, returned as a N
-by-numCF
matrix.
PaymentTimes
— Payment times
matrix
Payment times, returned as a N
-by-numCF
matrixof accrual fractions.
More About
collapse all
CDS Spread
The market, or breakeven, spread value of aCDS.
The CDS spread can be computed by equating the value of theprotection leg with the value of the premium leg:
Market Spread * RPV01 = Value of Protection Leg
The left side corresponds to the value of the premium leg, andthis has been decomposed as the product of the market or breakevenspread times the RPV01
or 'risky present valueof a basis point' of the contract. The latter is the present valueof the premium payments, considering the default probability. The MarketSpread
can be computed as the ratio of the value of theprotection leg, to the RPV01
of the contract. cdsspread
returnsthe resulting spread in basis points.
Algorithms
The premium leg is computed as the product of a spread S andthe risky present value of a basis point (RPV01
).The RPV01
is given by:
when no accrued premiums are paid upon default, and it can beapproximated by
when accrued premiums are paid upon default. Here, t0 = 0
isthe valuation date, and t1,...,tn = T arethe premium payment dates over the life of the contract,T isthe maturity of the contract, Z(t) is the discountfactor for a payment received at time t, and Δ(tj-1,tj, B) is a day count between dates tj-1 and tj correspondingto a basis B.
The protection leg of a CDS contract is given by the followingformula:
where the integral is approximated with a finite sum over thediscretization τ0 = 0
,τ1,...,τM = T.
A breakeven spread S0 makesthe value of the premium and protection legs equal. It follows that:
References
[1] Beumee, J., D. Brigo, D. Schiemert, and G. Stoyle. “Chartinga Course Through the CDS Big Bang.” Fitch Solutions,Quantitative Research, Global Special Report. April 7, 2009.
[2] Hull, J., and A. White. “Valuing Credit Default SwapsI: No Counterparty Default Risk.” Journal of Derivatives. Vol.8, pp. 29–40.
[3] O'Kane, D. and S. Turnbull. “Valuation ofCredit Default Swaps.” Lehman Brothers, FixedIncome Quantitative Credit Research, April 2003.
Version History
Introduced in R2010b
expand all
R2022b: Serial date numbers not recommended
Although cdsspread
supports serial date numbers, datetime
values are recommended instead. The datetime
data type provides flexible date and time formats, storage out to nanosecond precision, and properties to account for time zones and daylight saving time.
To convert serial date numbers or text to datetime
values, use the datetime function. For example:
t = datetime(738427.656845093,"ConvertFrom","datenum");y = year(t)
y = 2021
There are no plans to remove support for serial date number inputs.
See Also
cdsbootstrap | cdsprice | IRDataCurve (Financial Instruments Toolbox)
Topics
- Finding Breakeven Spread for New CDS Contract
- Valuing an Existing CDS Contract
- Converting from Running to Upfront
- First-to-Default Swaps (Financial Instruments Toolbox)
- Pricing a CDS Index Option (Financial Instruments Toolbox)
- Credit Default Swap (CDS)
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- Deutsch
- English
- Français
- United Kingdom (English)
Contact your local office