zero2disc

Discount 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 optional name-value pair inputs: Compounding and Basis.

Description

example

[DiscRates,CurveDates] = zero2disc(ZeroRates,CurveDates,Settle) returns a discount curve given a zero curve and its maturity dates. If either inputs for or areCurveDatesSettle a datetime array, CurveDates is returned as a datetime array. Otherwise, CurveDates is returned as a serial date number. The DiscRates output is the same for any of these input data types.

example

[DiscRates,CurveDates] = zero2disc(___,Name,Value) adds optional name-value pair arguments

Examples

collapse all

Given a zero curve over a set of maturity dates and a settlement date.

ZeroRates = [0.0464
0.0509
0.0524
0.0525
0.0531
0.0525
0.0530
0.0531
0.0549
0.0536];

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');

The zero curve is compounded daily on an actual/365 basis.

Compounding = 365;
Basis = 3;

Execute the function zero2disc which returns the discount curve DiscRates at the maturity dates CurveDates.

[DiscRates, CurveDates] = zero2disc(ZeroRates, CurveDates,...
Settle, Compounding, Basis)
DiscRates = 10×1

0.9996
0.9947
0.9896
0.9866
0.9826
0.9787
0.9745
0.9665
0.9552
0.9466

CurveDates = 10×1

730796
730831
730866
730887
730914
730943
730971
731027
731098
731167

For readability, ZeroRates and DiscRates are shown here only to the basis point. However, MATLAB® software computed them at full precision. If you enter ZeroRates as shown, DiscRates may differ due to rounding.

Given a zero curve over a set of maturity dates and a settlement date, compute a discount curve using datetime inputs.

ZeroRates = [0.0464
0.0509
0.0524
0.0525
0.0531
0.0525
0.0530
0.0531
0.0549
0.0536];

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');
Compounding = 365;
Basis = 3;

CurveDates = datetime(CurveDates, 'ConvertFrom', 'datenum','Locale','en_US');
Settle = datetime(Settle,'ConvertFrom','datenum','Locale','en_US');
[DiscRates, CurveDates] = zero2disc(ZeroRates, CurveDates,...
Settle, Compounding, Basis)
DiscRates = 10×1

0.9996
0.9947
0.9896
0.9866
0.9826
0.9787
0.9745
0.9665
0.9552
0.9466

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 zero rates constitute an implied zero curve for the investment horizon represented by CurveDates.

Data Types: double

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

Data Types: double | datetime | char

Common settlement date for ZeroRates, specified as serial date numbers, date character vectors, or datetime arrays. Settle is the settlement date for the bonds from which the zero curve was bootstrapped.

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: [DiscRates,CurveDates] = zero2disc(ZeroRates,CurveDates,Settle,'Compounding',4,'Basis',6)

Rate at which the input ZeroRates are compounded when annualized, specified as the comma-separated pair consisting of 'Compounding' and allowed numeric 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

Data Types: double

Day-count basis used for annualizing the input ZeroRates, specified as the comma-separated pair consisting of 'Basis' and allowed numeric 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

Data Types: double

Output Arguments

collapse all

Discount factors, returned as a NUMBONDS-by-1 vector of decimal fractions. In aggregate, the discount factors constitute a discount curve for the investment horizon represented by CurveDates.

Maturity dates that correspond to the DiscRates, returned as a NUMBONDS-by-1 vector of maturity dates that correspond to the discount factors. This vector is the same as the input vector CurveDates, but is sorted by ascending maturity.

If either inputs for CurveDates or Settle are a datetime array, CurveDates is returned as a datetime array. Otherwise, CurveDates is returned as a serial date number.