Par yield curve given zero curve
In R2017b, the specification of optional input arguments has changed. While the
previous ordered inputs syntax is still supported, it may no longer be supported in
a future release. Use the new optional name-value pair inputs:
InputCompounding
, InputBasis
,
OutputCompounding
, and
OutputBasis
.
[
returns a par yield curve given a zero curve and its maturity dates. If either
input for ParRates
,CurveDates
] = zero2pyld(ZeroRates
,CurveDates
,Settle
)CurveDates
or Settle
is a
datetime array, CurveDates
is returned as a datetime array.
Otherwise, CurveDates
is returned as a serial date number.
ParRates
is the same for any of these input data types.
[
adds optional name-value pair argumentsParRates
,CurveDates
] = zero2pyld(___,Name,Value
)
Given a zero curve over a set of maturity dates, a settlement date, and annual compounding for the input zero curve and monthly compounding for the output par rates, compute a par yield curve.
ZeroRates = [0.0457 0.0487 0.0506 0.0507 0.0505 0.0504 0.0506 0.0516 0.0539 0.0530]; CurveDates = [datenum('06-Nov-2000') datenum('11-Dec-2000') datenum('15-Jan-2001') datenum('05-Feb-2001') datenum('04-Mar-2001') datenum('02-Apr-2001') datenum('30-Apr-2001') datenum('25-Jun-2001') datenum('04-Sep-2001') datenum('12-Nov-2001')]; Settle = datenum('03-Nov-2000'); InputCompounding = 12; InputBasis = 2; OutputCompounding = 1; OutputBasis = 2; [ParRates, CurveDates] = zero2pyld(ZeroRates, CurveDates,... Settle, 'InputCompounding',1,'InputBasis',1,'OutputCompounding',12,'OutputBasis',1)
ParRates = 10×1
0.0448
0.0477
0.0495
0.0496
0.0494
0.0493
0.0495
0.0504
0.0526
0.0517
CurveDates = 10×1
730796
730831
730866
730887
730914
730943
730971
731027
731098
731167
Given a zero curve over a set of maturity dates, a settlement date, and annual compounding for the input zero curve and monthly compounding for the output par rates, use datetime
inputs to compute a par yield curve.
ZeroRates = [0.0457 0.0487 0.0506 0.0507 0.0505 0.0504 0.0506 0.0516 0.0539 0.0530]; CurveDates = [datenum('06-Nov-2000') datenum('11-Dec-2000') datenum('15-Jan-2001') datenum('05-Feb-2001') datenum('04-Mar-2001') datenum('02-Apr-2001') datenum('30-Apr-2001') datenum('25-Jun-2001') datenum('04-Sep-2001') datenum('12-Nov-2001')]; Settle = datenum('03-Nov-2000'); InputCompounding = 12; InputBasis = 2; OutputCompounding = 1; OutputBasis = 2; CurveDates = datetime(CurveDates, 'ConvertFrom', 'datenum','Locale','en_US'); Settle = datetime(Settle,'ConvertFrom','datenum','Locale','en_US'); [ParRates, CurveDates] = zero2pyld(ZeroRates, CurveDates,... Settle, 'InputCompounding',12,'InputBasis',2,'OutputCompounding',1,'OutputBasis',2)
ParRates = 10×1
-0.0436
0.0611
0.0579
0.0567
0.0550
0.0543
0.0541
0.0546
0.0565
0.0561
CurveDates = 10x1 datetime array
06-Nov-2000 00:00:00
11-Dec-2000 00:00:00
15-Jan-2001 00:00:00
05-Feb-2001 00:00:00
04-Mar-2001 00:00:00
02-Apr-2001 00:00:00
30-Apr-2001 00:00:00
25-Jun-2001 00:00:00
04-Sep-2001 00:00:00
12-Nov-2001 00:00:00
zero2pyld
to pyld2zero
Given the following zero curve and its maturity dates, return the ParRates
.
Settle = datenum('01-Feb-2013'); CurveDates = [datenum('01-Feb-2014') datenum('01-Feb-2015') datenum('01-Feb-2016') datenum('01-Feb-2018') datenum('01-Feb-2020') datenum('01-Feb-2023') datenum('01-Feb-2033') datenum('01-Feb-2043')]; OriginalZeroRates = [.11 0.30 0.64 1.44 2.07 2.61 3.29 3.55]'/100; OutputCompounding = 1; OutputBasis = 0; InputCompounding = 1; InputBasis = 0; ParRates = zero2pyld(OriginalZeroRates, CurveDates, Settle, ... 'OutputCompounding', OutputCompounding, 'OutputBasis', OutputBasis, ... 'InputCompounding', InputCompounding, 'InputBasis', InputBasis)
ParRates = 8×1
0.0011
0.0030
0.0064
0.0142
0.0202
0.0251
0.0310
0.0331
For the ParRates
, use the pyld2zero
function to return the ZeroRatesOut
and determine the roundtrip error.
ZeroRatesOut = pyld2zero(ParRates, CurveDates, Settle, ... 'OutputCompounding', OutputCompounding, 'OutputBasis', OutputBasis, ... 'InputCompounding', InputCompounding, 'InputBasis', InputBasis)
ZeroRatesOut = 8×1
0.0011
0.0030
0.0064
0.0144
0.0207
0.0261
0.0329
0.0355
max(abs(OriginalZeroRates - ZeroRatesOut)) % Roundtrip error
ans = 1.4919e-16
ZeroRates
— Annualized zero ratesAnnualized zero rates, specified as a
NUMBONDS
-by-1
vector using
decimal fractions. In aggregate, the rates constitute an implied zero
curve for the investment horizon represented by
CurveDates
.
Data Types: double
CurveDates
— Maturity datesMaturity dates which correspond to the input
ZeroRates
, specified as a
NUMBONDS
-by-1
vector using
serial date numbers, date character vectors, or datetime arrays.
Data Types: double
| datetime
| char
Settle
— Common settlement date for ZeroRates
Common settlement date for input ZeroRates
,
specified as serial date numbers, date character vectors, or datetime
arrays.
Data Types: double
| datetime
| char
Specify optional
comma-separated pairs of Name,Value
arguments. Name
is
the argument name and Value
is the corresponding value.
Name
must appear inside quotes. You can specify several name and value
pair arguments in any order as
Name1,Value1,...,NameN,ValueN
.
[ParRates,CurveDates] = zero2pyld(ZeroRates,CurveDates,
Settle,'OutputCompounding',3,'OutputBasis',5,'InputCompounding',4,'InputBasis',5)
'OutputCompounding'
— Compounding frequency of output ParRates
2
(default) | numeric values: 0
,1
,
2
, 3
,
4
, 6
, 12
,
365
, -1
Compounding frequency of output ParRates
,
specified as the comma-separated pair consisting of
'OutputCompounding'
and allowed values:
1
— Annual compounding
2
— Semiannual compounding
(default)
3
— Compounding three times per
year
4
— Quarterly compounding
6
— Bimonthly compounding
12
— Monthly compounding
If InputCompounding
is
1
, 2
,
3
, 4
,
6
, or 12
and
OutputCompounding
is not
specified, the value of
InputCompounding
is
used.
If InputCompounding
is
0
(simple), -1
(continuous), or 365
(daily), a valid
OutputCompounding
value must also
be specified.
If either InputCompounding
or
OutputCompounding
are not
specified, the default is 2
(semiannual) for both.
Data Types: double
'OutputBasis'
— Day-count basis of output ParRates
0
(default) | numeric values: 0
,1
,
2
, 3
,
4
, 6
, 7
,
8
, 9
,
10
, 11
,
12
, 13
Day count basis of output ParRates
, specified
as the comma-separated pair consisting of
'OutputBasis'
and allowed values:
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.
If OutputBasis
is not specified, then
OutputBasis
is assigned the value
specified for InputBasis
. If either
InputBasis
or
OutputBasis
are not specified, the
default is 0
(actual/actual) for both.
Data Types: double
'InputCompounding'
— Compounding frequency of input ZeroRates
2
(default) | numeric values: 0
,1
,
2
, 3
,
4
, 6
, 12
,
365
, -1
Compounding frequency of input ZeroRates
,
specified as the comma-separated pair consisting of
'InputCompounding'
and allowed values:
0
— Simple interest (no
compounding)
1
— Annual compounding
2
— Semiannual compounding
(default)
3
— Compounding three times per
year
4
— Quarterly compounding
6
— Bimonthly compounding
12
— Monthly compounding
365
— Daily compounding
-1
— Continuous
compounding
If InputCompounding
is set to
0
(simple), -1
(continuous), or 365
(daily), the
OutputCompounding
must also be
specified using a valid value.
If InputCompounding
is not
specified, then InputCompounding
is
assigned the value specified for
OutputCompounding
.
If either InputCompounding
or
OutputCompounding
are not
specified, the default is 2
(semiannual) for both.
Data Types: double
'InputBasis'
— Day-count basis of input ZeroRates
0
(default) | numeric values: 0
,1
,
2
, 3
,
4
, 6
, 7
,
8
, 9
,
10
, 11
,
12
, 13
Day count basis of the input ZeroRates
,
specified as the comma-separated pair consisting of
'InputBasis'
and allowed values:
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.
If InputBasis
is not specified, then
InputBasis
is assigned the value
specified for OutputBasis
. If either
InputBasis
or
Outputbasis
are not specified, the
default is 0
(actual/actual) for both.
Data Types: double
ParRates
— Par bond coupon ratesPar bond coupon rates, returned as a
NUMBONDS
-by-1
numeric vector.
ParRates
are ordered by ascending
maturity.
CurveDates
— Maturity dates that correspond to ParRates
Maturity dates that correspond to the ParRates
,
returned as a NUMBONDS
-by-1
vector
of maturity dates that correspond to each par rate contained in
ParRates
.
ParRates
are expressed as serial date numbers
(default) or datetimes (if CurveDates
or
Settle
are datetime arrays).
CurveDates
are ordered by ascending
maturity.
datetime
| datetime
| disc2zero
| fwd2zero
| getForwardRates
| pyld2zero
| zbtprice
| zbtyield
| zero2disc
| zero2fwd
A modified version of this example exists on your system. Do you want to open this version instead? (es)
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.
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: .
Select web siteYou can also select a web site from the following list:
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.