# zero2pyld

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`.

## Syntax

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

## Description

example

````[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. ```

example

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

## 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, 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 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 = 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 ```

## 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 serial date numbers, date character vectors, or datetime arrays.

Data Types: `double` | `datetime` | `char`

Common settlement date for input `ZeroRates`, 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 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)```

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

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

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.