# fwd2zero

Zero curve given forward 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] = fwd2zero(ForwardRates,CurveDates,Settle)``
``[ZeroRates,CurveDates] = fwd2zero(___,Name,Value)``

## Description

example

````[ZeroRates,CurveDates] = fwd2zero(ForwardRates,CurveDates,Settle)` returns a zero curve given an implied forward rate curve and its maturity dates. If both inputs for `CurveDates` and `Settle` are serial date numbers or date character vectors, `CurveDates` is returned as serial date numbers. However, if either of the inputs for `CurveDates` and `Settle` are a datetime array, `CurveDates` is returned as a datetime array.```

example

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

## Examples

collapse all

This example shows how to compute the zero curve, given an implied forward rate curve over a set of maturity dates, a settlement date, and a compounding rate.

```ForwardRates = [0.0469 0.0519 0.0549 0.0535 0.0558 0.0508 0.0560 0.0545 0.0615 0.0486]; 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 = 1; InputBasis = 2; OutputCompounding = 1; OutputBasis = 2;```

Execute the function `fwd2zero` to return the zero-rate curve `ZeroRates` at the maturity dates `CurveDates`.

```[ZeroRates, CurveDates] = fwd2zero(ForwardRates, CurveDates,... Settle,'InputCompounding',1,'InputBasis',2,'OutputCompounding',1,'OutputBasis',2)```
```ZeroRates = 10×1 0.0469 0.0515 0.0531 0.0532 0.0538 0.0532 0.0536 0.0539 0.0556 0.0543 ```
```CurveDates = 10×1 730796 730831 730866 730887 730914 730943 730971 731027 731098 731167 ```

This example shows how to use `datetime` inputs compute the zero curve, given an implied forward rate curve over a set of maturity dates, a settlement date, and a compounding rate.

```ForwardRates = [0.0469 0.0519 0.0549 0.0535 0.0558 0.0508 0.0560 0.0545 0.0615 0.0486]; 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 = 1; InputBasis = 2; OutputCompounding = 1; OutputBasis = 2;CurveDates = datetime(CurveDates,'ConvertFrom','datenum','Locale','en_US'); Settle = datetime(Settle,'ConvertFrom','datenum','Locale','en_US'); [ZeroRates, CurveDates] = fwd2zero(ForwardRates, CurveDates,... Settle,'InputCompounding',1,'InputBasis',2,'OutputCompounding',1,'OutputBasis',2)```
```ZeroRates = 10×1 0.0469 0.0515 0.0531 0.0532 0.0538 0.0532 0.0536 0.0539 0.0556 0.0543 ```
```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 ```

## Input Arguments

collapse all

Annualized implied forward rates, specified as a (`NUMBONDS`)-by-`1` vector using decimal fractions. In aggregate, the rates in `ForwardRates` constitute an implied forward curve for the investment horizon represented by `CurveDates`. The first element pertains to forward rates from the settlement date to the first curve date.

Data Types: `double`

Maturity dates, specified as a `NUMBONDS`-by-`1` vector using serial date numbers, date character vectors, or datetime arrays, that correspond to the `ForwardRates`.

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

Common settlement date for `ForwardRates`, 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] = fwd2zero(ForwardRates,CurveDates,Settle,'InputCompounding',3,'InputBasis',5,'OutputCompounding',4,'OutputBasis',5)```

Compounding frequency of input forward rates, specified with 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 not specified, then `InputCompounding` is assigned the value specified for `OutputCompounding`. If either `InputCompounding` or `OutputCompounding` are not specified, the default is `2`

Data Types: `double`

Day count basis of input forward rates, specified as a numeric value. Allowed values are:

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

Compounding frequency of output zero rates, specified with 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 not specified, then `OutputCompounding` is assigned the value specified for `InputCompounding`. If either `InputCompounding` or `OutputCompounding` are not specified, the default is `2` (semiannual) for both.

Data Types: `double`

Day count basis of output zero rates, specified as a numeric value. Allowed values are:

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

## Output Arguments

collapse all

Zero curve for the investment horizon represented by `CurveDates`, returned as a `NUMBONDS`-by-`1` vector of decimal fractions. In aggregate, the rates in `ZeroRates` constitute a zero curve for the investment horizon represented by `CurveDates`.

Maturity dates that correspond to the `ZeroRates`, returned as a `NUMBONDS`-by-`1` vector of maturity dates that correspond to the zero rates in `ZeroRates`. This vector is the same as the input vector `CurveDates`, but is sorted by ascending maturity.

If both inputs for `CurveDates` and `Settle` are serial date numbers or date character vectors, `CurveDates` is returned as serial date numbers. However, if either of the inputs for `CurveDates` and `Settle` are a datetime array, `CurveDates` is returned as a datetime array.

## Version History

Introduced before R2006a