# 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 = 8×1 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 = 8×1 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 = 8×1 0.0011 0.0030 0.0064 0.0144 0.0207 0.0261 0.0329 0.0356 ```
```Dates = 8x1 datetime 01-Feb-2014 01-Feb-2015 01-Feb-2016 01-Feb-2018 01-Feb-2020 01-Feb-2023 01-Feb-2033 01-Feb-2043 ```

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

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

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

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.

## Version History

Introduced before R2006a