Main Content

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.

Description

[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 strings 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

example

Examples

collapse all

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 = [datetime(2000,11,6) 
              datetime(2000,12,11) 
              datetime(2001,1,15) 
              datetime(2001,2,5) 
              datetime(2001,3,4) 
              datetime(2001,4,2) 
              datetime(2001,4,30) 
              datetime(2001,6,25) 
              datetime(2001,9,4) 
              datetime(2001,11,12)];

Settle = datetime(2000,11,3);

InputCompounding = 1;
InputBasis = 2;
OutputCompounding = 1;
OutputBasis = 2; 
[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 a datetime array, string array, or date character vectors, that correspond to the ForwardRates.

To support existing code, fwd2zero also accepts serial date numbers as inputs, but they are not recommended.

Data Types: datetime | string | char

Common settlement date for ForwardRates, specified as scalar datetime, string, or date character vector.

To support existing code, fwd2zero also accepts serial date numbers as inputs, but they are not recommended.

Data Types: datetime | string | 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

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

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

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

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 strings or date character vectors, CurveDates is returned as serial date numbers. Use the function datetime to convert serial date numbers to formatted datetime arrays. 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

expand all