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, and OutputBasis.

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 for CurveDates or Settle is a datetime array, CurveDates is returned as a datetime array. Otherwise, CurveDates is returned as a serial date number. ForwardRates is 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 function zero2fwd to return the forward rate curve ForwardRates at the maturity dates CurveDates.

[ForwardRates, CurveDates] = zero2fwd(ZeroRates, CurveDates,...
Settle, 'InputCompounding',1,'InputBasis',2,'OutputCompounding',1,'OutputBasis',2)
ForwardRates = 10×1

0.0458
0.0506
0.0535
0.0522
0.0541
0.0498
0.0544
0.0531
0.0594
0.0476

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 a compounding rate, use datetime 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;

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×1

0.0458
0.0506
0.0535
0.0522
0.0541
0.0498
0.0544
0.0531
0.0594
0.0476

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

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

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

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

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

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

Forward curve for the investment horizon represented by CurveDates, returned as a NUMBONDS-by-1 vector of decimal fractions. In aggregate, the rates in ForwardRates constitute a forward curve over the dates in CurveDates. ForwardRates are ordered by ascending maturity.

Maturity dates that correspond to the ForwardRates, returned as a NUMBONDS-by-1 vector of maturity dates that correspond to the ForwardRates.

ForwardRates are expressed as serial date numbers (default) or datetimes (if CurveDates or Settle are datetime arrays), representing the maturity dates for each rate in ForwardRates. These dates are the same dates as those associated with the input ZeroRates, but are ordered by ascending maturity.