Main Content

zero2fwd

Forward 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, andOutputBasis.

Description

example

[ForwardRates,CurveDates] = zero2fwd(ZeroRates,CurveDates,Settle)returns an implied forward rate curve given a zero curve and its maturity dates. If either input forCurveDatesorSettleis a datetime array,CurveDatesis returned as a datetime array. Otherwise,CurveDates作为一个串行返回日期号码。ForwardRatesis the same for any of these input data types.

example

[ForwardRates,CurveDates] = zero2fwd(___,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 a compounding rate, compute the forward rate curve.

ZeroRates = [0.0458 0.0502 0.0518 0.0519 0.0524 0.0519 0.0523 0.0525 0.0541 0.0529]; 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 functionzero2fwdto return the forward rate curveForwardRatesat the maturity datesCurveDates.

[ForwardRates, CurveDates] = zero2fwd(ZeroRates, CurveDates,...Settle,“InputCompounding”,1,'InputBasis',2,'OutputCompounding',1,'OutputBasis',2)
ForwardRates =10×10.0458 0.0506 0.0535 0.0522 0.0541 0.0498 0.0544 0.0531 0.0594 0.0476
CurveDates =10×1730796 730831 730866 730887 730914 730943 730971 731027 731098 731167

Given a zero curve over a set of maturity dates, a settlement date, and a compounding rate, usedatetimecompute the forward rate curve.

ZeroRates = [0.0458 0.0502 0.0518 0.0519 0.0524 0.0519 0.0523 0.0525 0.0541 0.0529]; 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'); [ForwardRates, CurveDates] = zero2fwd(ZeroRates, CurveDates,...Settle,“InputCompounding”,1,'InputBasis',2,'OutputCompounding',1,'OutputBasis',2)
ForwardRates =10×10.0458 0.0506 0.0535 0.0522 0.0541 0.0498 0.0544 0.0531 0.0594 0.0476
CurveDates =10x1 datetime06-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 zero rates, specified as aNUMBONDS-by-1vector using decimal fractions. In aggregate, the rates constitute an implied zero curve for the investment horizon represented byCurveDates. The first element pertains to forward rates from the settlement date to the first curve date.

Data Types:double

Maturity dates, specified as aNUMBONDS-by-1vector using serial date numbers, date character vectors, or datetime arrays, that correspond to theZeroRates.

Data Types:double|datetime|char

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

Data Types:double|datetime|char

Name-Value Arguments

Specify optional pairs of arguments asName1=Value1,...,NameN=ValueN, whereNameis the argument name andValueis 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 encloseNamein quotes.

Example:[ForwardRates,CurveDates] = zero2fwd(ZeroRates,CurveDates,Settle,'InputCompounding',3,'InputBasis',5,'OutputCompounding',4,'OutputBasis',5)

Compounding frequency of input zero rates, 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

IfInputCompoundingis not specified, thenInputCompoundingis assigned the value specified forOutputCompounding. If eitherInputCompoundingorOutputCompoundingare not specified, the default is2(semiannual) for both.

Data Types:double

Day count basis of input zero rates, 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

For more information, seeBasis.

Note

IfInputBasisis not specified, thenInputBasisis assigned the value specified forOutputBasis. If eitherInputBasisorOutputbasisare not specified, the default is0(actual/actual) for both.

Data Types:double

Compounding frequency of output forward rates, specified as the comma-separated pair consisting of'OutputCompounding'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

IfOutputCompoundingis not specified, thenOutputCompoundingis assigned the value specified forInputCompounding. If eitherInputCompoundingorOutputCompoundingare not specified, the default is2(semiannual) for both.

Data Types:double

Day count basis of output forward rates, 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

For more information, seeBasis.

Note

IfOutputBasisis not specified, thenOutputBasisis assigned the value specified forInputBasis. If eitherInputBasisorOutputBasisare not specified, the default is0(actual/actual) for both.

Data Types:double

Output Arguments

collapse all

Forward curve for the investment horizon represented byCurveDates, returned as aNUMBONDS-by-1vector of decimal fractions. In aggregate, the rates inForwardRatesconstitute a forward curve over the dates inCurveDates.ForwardRatesare ordered by ascending maturity.

Maturity dates that correspond to theForwardRates, returned as aNUMBONDS-by-1vector of maturity dates that correspond to theForwardRates.

ForwardRatesare expressed as serial date numbers (default) or datetimes (ifCurveDatesorSettleare datetime arrays), representing the maturity dates for each rate inForwardRates. These dates are the same dates as those associated with the inputZeroRates, but are ordered by ascending maturity.

Version History

Introduced before R2006a