Documentation

This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

pyld2zero

Zero curve given par yield 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.

Syntax

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

Description

example

[ZeroRates,CurveDates] = pyld2zero(ParRates,CurveDates,Settle) returns a zero curve given a par yield 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.

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

Examples

collapse all

Define the settlement date, maturity, and zero rates.

Settle = datenum('01-Feb-2013');
CurveDates = datemnth(Settle,12*[1 2 3 5 7 10 20 30]');
ZeroRates = [.11 0.30 0.64 1.44 2.07 2.61 3.29 3.55]'/100;
InputCompounding = 2;
InputBasis = 1;
OutputCompounding = 2;
OutputBasis = 1;

Compute par yield curve from zero rates.

ParRates = zero2pyld(ZeroRates, CurveDates, Settle,'InputCompounding',2,...
'InputBasis',1,'OutputCompounding',2,'OutputBasis',1)
ParRates = 

    0.0011
    0.0030
    0.0064
    0.0142
    0.0201
    0.0251
    0.0309
    0.0330

Compute zero curve from the par yield curve.

ZeroRates = pyld2zero(ParRates, CurveDates, Settle,'InputCompounding',2,...
'InputBasis',1,'OutputCompounding',2,'OutputBasis',1)
ZeroRates = 

    0.0011
    0.0030
    0.0064
    0.0144
    0.0207
    0.0261
    0.0329
    0.0355

Use datetime inputs to compute the zero curve given the par yield curve.

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')];

OriginalParRates = [0.11 0.30 0.64 1.42 2.02 2.51 3.10 3.31]'/100;

InputCompounding = 1;
InputBasis = 0;
OutputCompounding = 1;
OutputBasis = 0;

Settle = datetime(Settle, 'ConvertFrom', 'datenum','Locale','en_US');
CurveDates = datetime(CurveDates, 'ConvertFrom', 'datenum','Locale','en_US');
[ZeroRates Dates] = pyld2zero(OriginalParRates, CurveDates, Settle, ...
'OutputCompounding', OutputCompounding, 'OutputBasis', OutputBasis, ...
'InputCompounding', InputCompounding, 'InputBasis', InputBasis)
ZeroRates = 

    0.0011
    0.0030
    0.0064
    0.0144
    0.0207
    0.0261
    0.0329
    0.0356

Dates = 8x1 datetime array
   01-Feb-2014 00:00:00
   01-Feb-2015 00:00:00
   01-Feb-2016 00:00:00
   01-Feb-2018 00:00:00
   01-Feb-2020 00:00:00
   01-Feb-2023 00:00:00
   01-Feb-2033 00:00:00
   01-Feb-2043 00:00:00

Given the following a par yield curve and its maturity dates, return the ZeroRates.

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')];

OriginalParRates = [0.11 0.30 0.64 1.42 2.02 2.51 3.10 3.31]'/100;

InputCompounding = 1;
InputBasis = 0;
OutputCompounding = 1;
OutputBasis = 0;

ZeroRates = pyld2zero(OriginalParRates, CurveDates, Settle, ...
'OutputCompounding', OutputCompounding, 'OutputBasis', OutputBasis, ...
'InputCompounding', InputCompounding, 'InputBasis', InputBasis)
ZeroRates = 

    0.0011
    0.0030
    0.0064
    0.0144
    0.0207
    0.0261
    0.0329
    0.0356

With the ZeroRates, use the zero2pyld function to return the ParRatesOut and determine the roundtrip error.

ParRatesOut = zero2pyld(ZeroRates, CurveDates, Settle, ...
'OutputCompounding', OutputCompounding, 'OutputBasis', OutputBasis, ...
'InputCompounding', InputCompounding, 'InputBasis', InputBasis)
ParRatesOut = 

    0.0011
    0.0030
    0.0064
    0.0142
    0.0202
    0.0251
    0.0310
    0.0331

max(abs(OriginalParRates - ParRatesOut)) % Roundtrip error
ans = 1.2750e-16

Input Arguments

collapse all

Annualized par yields (coupon 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 ParRates, specified as a NUMBONDS-by-1 vector using serial date numbers, date character vectors, or datetime arrays.

Data Types: double | datetime | char

Common settlement date for input ParRates, specified as serial date numbers, date character vectors, or datetime arrays.

Data Types: double | datetime | char

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

collapse all

Compounding frequency of output ZeroRates, specified using the 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 OutputCompounding is set to 0 (simple), -1 (continuous), or 365 (daily), the InputCompounding must also be specified using a valid value.

  • If OutputCompounding is not specified, then OutputCompounding is assigned the value specified for InputCompounding.

  • If either OutputCompounding or InputCompounding are not specified, the default is 2 (semiannual) for both.

Data Types: double

Day count basis of output ZeroRates, specified using 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 ParRates, specified using 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 OutputCompounding is 1, 2, 3, 4, 6, or 12 and InputCompounding is not specified, the value of OutputCompounding is used.

  • If OutputCompounding is 0 (simple), -1 (continuous), or 365 (daily), a valid InputCompounding 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 the input ParRates, specified using 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

Zero rates, returned as a NUMBONDS-by-1 numeric vector. In aggregate, the rates in ZeroRates constitute a zero curve for the investment horizon represented by CurveDates. ZeroRates are ordered by ascending maturity.

Maturity dates that correspond to the ZeroRates, returned as a NUMBONDS-by-1 vector of maturity dates that correspond to each par rate contained in ZeroRates. CurveDates are ordered by ascending maturity.

If either input for CurveDates or Settle is a datetime array, CurveDates is returned as a datetime array. Otherwise, CurveDates are returned as a serial date numbers.

Introduced before R2006a

Was this topic helpful?