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 | ![]() |