| Financial Toolbox | ![]() |
Syntax
[ZeroRates, CurveDates] = zbtprice(Bonds, Prices, Settle, OutputCompounding, OutputBasis, MaxIterations)
Bonds |
Coupon bond information used to generate the zero curve. An n-by-2 to n-by-6 matrix where each row describes a bond. The first two columns are required; the rest are optional but must be added in order. All rows in Bonds must have the same number of columns. Columns are [Maturity CouponRate Face Period Basis where | ||
|
Maturity | Maturity date of the bond, as a serial date number. Use datenum to convert date strings to serial date numbers. |
|
|
CouponRate | Coupon rate of the bond, as a decimal fraction. |
|
|
Face | (Optional) Redemption or face value of the bond. Default = 100. |
|
|
Period | (Optional) Coupons per year of the bond, as an integer. Allowed values are 0, 1, 2, 3, 4, 6, and 12. Default = 2. |
|
|
Basis | (Optional) Day-count basis of the bond: 0 = actual/actual (default), 1 = 30/360, 2 = actual/360, 3 = actual/365. |
|
|
EndMonthRule | (Optional) End-of-month flag. This flag applies only when Maturity is an end-of-month date for a month having 30 or fewer days. 0 = ignore flag, meaning that a bond's coupon payment date is always the same day of the month. 1 = set flag (default), meaning that a bond's coupon payment date is always the last day of the month. |
|
Prices |
A column vector containing the clean price (price without accrued interest) of each bond in Bonds, respectively. The number of rows (n) must match the number of rows in Bonds. | ||
Settle |
Settlement date, as a scalar serial date number. This represents time zero for deriving the zero curve, and it is normally the common settlement date for all the bonds. | ||
OutputCompounding |
(Optional) A scalar that sets the compounding frequency per year for the output zero rates in ZeroRates. Allowed values are: | ||
1 |
annual compounding | ||
| 2 |
semi-annual compounding (default) | ||
| 3 |
compounding three times per year | ||
| 4 |
quarterly compounding | ||
| 6 |
bimonthly compounding | ||
| 12 |
monthly compounding | ||
OutputBasis |
(Optional) Output day-count basis for mapping cash-flow dates to years, in generating the output zero rates in ZeroRates. A scalar. 0 = actual/actual (default), 1 = 30/360, 2 = actual/360, 3 = actual/365. | ||
MaxIterations |
(Optional) Maximum number of iterations for deriving the zero rates in ZeroRates. A scalar. Default = 50. A value greater than 50 may slow processing. | ||
Description
[ZeroRates, CurveDates] = zbtprice(Bonds, Prices, Settle,
OutputCompounding, OutputBasis, MaxIterations)
uses the bootstrap method to return a zero curve given a portfolio of coupon bonds and their prices. A zero curve consists of the yields to maturity for a portfolio of theoretical zero-coupon bonds that are derived from the input Bonds portfolio. The bootstrap method that this function uses does not require alignment among the cash-flow dates of the bonds in the input portfolio. It uses theoretical par bond arbitrage and yield interpolation to derive all zero rates. For best results, use a portfolio of at least 30 bonds evenly spaced across the investment horizon.
Examples
Given data and prices for 12 coupon bonds, two with the same maturity date; and given the common settlement date
Bonds = [datenum('6/1/1998') 0.0475 100 2 0 0;
datenum('7/1/2000') 0.06 100 2 0 0;
datenum('7/1/2000') 0.09375 100 6 1 0;
datenum('6/30/2001') 0.05125 100 1 3 1;
datenum('4/15/2002') 0.07125 100 4 1 0;
datenum('1/15/2000') 0.065 100 2 0 0;
datenum('9/1/1999') 0.08 100 3 3 0;
datenum('4/30/2001') 0.05875 100 2 0 0;
datenum('11/15/1999') 0.07125 100 2 0 0;
datenum('6/30/2000') 0.07 100 2 3 1;
datenum('7/1/2001') 0.0525 100 2 3 0;
datenum('4/30/2002') 0.07 100 2 0 0];
Prices = [99.375;
99.875;
105.75 ;
96.875;
103.625;
101.125;
103.125;
99.375;
101.0 ;
101.25 ;
96.375;
102.75 ];
Settle = datenum('12/18/1997');
Set semi-annual compounding for the zero curve, on an actual/365 basis. Derive the zero curve within 50 iterations.
OutputCompounding = 2; OutputBasis = 3; MaxIterations = 50;Execute the function
[ZeroRates, CurveDates] = zbtprice(Bonds, Prices, Settle,... OutputCompounding, OutputBasis, MaxIterations)which returns the zero curve at the maturity dates. Note the mean zero rate for the two bonds with the same maturity date*.
ZeroRates =
0.0616
0.0609
0.0658
0.0590
0.0648
0.0655*
0.0606
0.0601
0.0642
0.0621
0.0627
CurveDates =
729907 (serial date number for 01-Jun-1998)
730364 (01-Sep-1999)
730439 (15-Nov-1999)
730500 (15-Jan-2000)
730667 (30-Jun-2000)
730668 (01-Jul-2000)*
730971 (30-Apr-2001)
731032 (30-Jun-2001)
731033 (01-Jul-2001)
731321 (15-Apr-2002)
731336 (30-Apr-2002)
See Also
zbtyield and other functions for Term Structure of Interest Rates
References
Fabozzi, Frank J. "The Structure of Interest Rates." Ch. 6 in Fabozzi, Frank J. and T. Dessa Fabozzi, eds. The Handbook of Fixed Income Securities. 4th ed. New York: Irwin Professional Publishing. 1995.
| yldtbill | zbtyield | ![]() |