Main Content

zero2pyld

Par yield curve given zero curve

Description

[ParRates,CurveDates] = zero2pyld(ZeroRates,CurveDates,Settle) returns a par yield curve given a zero curve and its maturity dates. If either input for CurveDates or Settle is a datetime array, CurveDates is returned as a datetime array. Otherwise, CurveDates is returned as a serial date number. Use the function datetime to convert serial date numbers to formatted datetime arrays. ParRates is the same for any of these input data types.

example

[ParRates,CurveDates] = zero2pyld(___,Name,Value) adds optional name-value pair arguments

example

Examples

collapse all

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 = [datetime(2000,11,6)
              datetime(2000,12,11)
              datetime(2001,1,15) 
              datetime(2001,2,5) 
              datetime(2001,3,4) 
              datetime(2001,4,2) 
              datetime(2001,4,30) 
              datetime(2001,6,25) 
              datetime(2001,9,4) 
              datetime(2001,11,12)];

Settle = datetime(2000,11,3);
InputCompounding = 12;
InputBasis = 2;
OutputCompounding = 1;
OutputBasis = 2;

[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
   06-Nov-2000
   11-Dec-2000
   15-Jan-2001
   05-Feb-2001
   04-Mar-2001
   02-Apr-2001
   30-Apr-2001
   25-Jun-2001
   04-Sep-2001
   12-Nov-2001

Given the following zero curve and its maturity dates, return the ParRates.

Settle = datetime(2013,2,1);

CurveDates = [datetime(2014,2,1) 
             datetime(2015,2,1) 
             datetime(2016,2,1) 
             datetime(2018,2,1) 
             datetime(2020,2,1) 
             datetime(2023,2,1) 
             datetime(2033,2,1) 
             datetime(2043,2,1) ];

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

Input Arguments

collapse all

Annualized 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

Maturity dates which correspond to the input ZeroRates, specified as a NUMBONDS-by-1 vector using a datetime array, string array, or date character vectors.

To support existing code, zero2pyld also accepts serial date numbers as inputs, but they are not recommended.

Data Types: datetime | string | char

Common settlement date for input ZeroRates, specified as a scalar datetime, string, or date character vector.

To support existing code, zero2pyld also accepts serial date numbers as inputs, but they are not recommended.

Data Types: datetime | string | char

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: [ParRates,CurveDates] = zero2pyld(ZeroRates,CurveDates, Settle,'OutputCompounding',3,'OutputBasis',5,'InputCompounding',4,'InputBasis',5)

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

Note

  • 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

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.

Note

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

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

Note

  • 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

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.

Note

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

Output Arguments

collapse all

Par bond coupon rates, returned as a NUMBONDS-by-1 numeric vector. ParRates are ordered by ascending maturity.

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.

Version History

Introduced before R2006a

expand all