Documentation

zero2pyld

Par yield curve given zero curve

Syntax

[ParRates, CurveDates] = zero2pyld(ZeroRates, CurveDates, Settle)
[ParRates, CurveDates] = zero2pyld(ZeroRates, CurveDates, Settle,
Name, Value)

In R2015b, 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.

Input Arguments

ZeroRates

A number of bonds (NUMBONDS)-by-1 vector of annualized zero rates, as decimal fractions. In aggregate, the rates constitute an implied zero curve for the investment horizon represented by CurveDates.

CurveDates

A NUMBONDS-by-1 vector of maturity dates, specified as serial date numbers, date character vectors, or datetime arrays, that correspond to the zero rates.

Settle

Date, specified as a serial date number, date character vector, or datetime array, that is the common settlement date for the zero rates.

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.

Example: [ParRates,CurveDates] = zero2pyld(ZeroRates,CurveDates, Settle,'OutputCompounding',3,'OutputBasis',5,'InputCompounding',4,'InputBasis',5)

'OutputCompounding' — Compounding frequency of output par ratesif 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 neither InputCompounding nor OutputCompounding are specified, the default is 2 (semiannual) for both. (default) | scalar

Compounding frequency of the output par rates, specified as a scalar with allowed values:

  • 1 — Annual compounding

  • 2 — Semiannual compounding (default)

  • 3 — Compounding three times per year

  • 4 — Quarterly compounding

  • 6 — Bimonthly compounding

  • 12 — Monthly compounding

Data Types: single | double

'OutputBasis' — Day count basis of output par ratesif OutputBasis is not specified, it is assigned the value specified for InputBasis. If neither InputBasis nor OutputBasis are specified, the default is 0 (actual/actual) for both. (default) | scalar

Day count basis of output zero rates, specified as a scalar with possible 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

Data Types: single | double

'InputCompounding' — Compounding frequency of input zero ratesif InputCompounding is 0 (simple), -1 (continuous), or 365 (daily), the par rate OutputCompounding must also be specified a valid value. If InputCompounding is not specified, it is assigned the value specified for OutputCompounding. If neither InputCompounding nor OutputCompounding are specified, the default is 2 (semiannual) for both. (default) | scalar

Compounding frequency of the input forward rates, specified as a scalar with allowed values:

  • 0 — Simple interest (no compounding, zero rates only)

  • 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 (zero rates only)

  • -1 — Continuous compounding (zero rates only)

Data Types: single | double

'InputBasis' — Day count basis of input zero ratesif InputBasis is not specified, it is assigned the value specified for OutputBasis. If neither InputBasis nor OutputBasis are specified, the default is 0 (actual/actual) for both. (default) | scalar

Day count basis of input zero rates, specified as a scalar with possible 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

Data Types: single | double

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. ParRates is the same for any of these input data types.

[ParRates, CurveDates] = zero2pyld(ZeroRates, CurveDates, Settle, Name, Value) returns a par yield curve given a zero curve and its maturity dates using optional name-value pair arguments for InputCompounding, InputBasis, OutputCompounding, and OutputBasis.

ParRates

A NUMBONDS-by-1 vector of annualized par yields, as decimal fractions. (Par yields = coupon rates.) In aggregate, the yield rates in ParRates constitute a par yield curve for the investment horizon represented by CurveDates.

CurveDates

A NUMBONDS-by-1 vector of maturity dates (as serial date numbers) that correspond to the par yield rates. This vector is the same as the input vector CurveDates, but is sorted by ascending maturity.

Examples

collapse all

Compute Par Yield Curve Given a Zero Curve and Maturity Dates

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 =

    0.0448
    0.0477
    0.0495
    0.0496
    0.0494
    0.0493
    0.0495
    0.0504
    0.0526
    0.0517


CurveDates =

      730796
      730831
      730866
      730887
      730914
      730943
      730971
      731027
      731098
      731167

Compute Par Yield Curve Given a Zero Curve and Maturity Dates Using datetime Inputs

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 =

   -0.0436
    0.0611
    0.0579
    0.0567
    0.0550
    0.0543
    0.0541
    0.0546
    0.0565
    0.0561


CurveDates = 

   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

Demonstrate a Roundtrip From 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 =

    0.0011
    0.0030
    0.0064
    0.0142
    0.0202
    0.0251
    0.0310
    0.0331

Using 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)

max(abs(OriginalZeroRates - ZeroRatesOut)) % Roundtrip error
ZeroRatesOut =

    0.0011
    0.0030
    0.0064
    0.0144
    0.0207
    0.0261
    0.0329
    0.0355


ans =

   1.4919e-16

Related Examples

See Also

|

Introduced before R2006a

Was this topic helpful?