Stepped-Coupon Bonds
Introduction
A stepped-coupon bond has a fixed schedule of changing coupon amounts. Like fixed coupon bonds, stepped-coupon bonds could have different periodic payments and accrual bases.
The functions stepcpnprice
and stepcpnyield
compute prices and yields
of such bonds. An accompanying function stepcpncfamounts
produces
the cash flow schedules pertaining to these bonds.
Cash Flows from Stepped-Coupon Bonds
This example shows how to use stepcpncfamounts
to generate the cash flow schedule and times for stepped-coupon bonds.
Consider a bond that has a schedule of two coupons. Suppose that the bond starts out with a 2% coupon that steps up to 4% in 2 years and onward to maturity. Assume that the issue and settlement dates are both March 15, 2003. The bond has a 5-year maturity.
Settle = datenum('15-Mar-2003'); Maturity = datenum('15-Mar-2008'); ConvDates = [datenum('15-Mar-2005')]; CouponRates = [0.02, 0.04]; [CFlows, CDates, CTimes] = stepcpncfamounts(Settle, Maturity, ... ConvDates, CouponRates)
CFlows = 1×11
0 1 1 1 1 2 2 2 2 2 102
CDates = 1×11
731655 731839 732021 732205 732386 732570 732751 732935 733116 733300 733482
CTimes = 1×11
0 1 2 3 4 5 6 7 8 9 10
Notably, ConvDates
has one less element than CouponRates
because MATLAB® software assumes that the first element of CouponRates
indicates the coupon schedule between Settle
(March 15, 2003) and the first element of ConvDates
(March 15, 2005), shown diagrammatically below.
Pay 2% from March 15, 2003 |
| Pay 4% from March 15, 2003 | |
Effective 2% on March 15, 2003 |
| Effective 4% on March 15, 2005 |
|
Coupon Dates | Semiannual Coupon Payment |
---|---|
15-Mar-03 | 0 |
15-Sep-03 | 1 |
15-Mar-04 | 1 |
15-Sep-04 | 1 |
15-Mar-05 | 1 |
15-Sep-05 | 2 |
15-Mar-06 | 2 |
15-Sep-06 | 2 |
15-Mar-07 | 2 |
15-Sep-07 | 2 |
15-Mar-08 | 102 |
The payment on March 15, 2005 is still a 2% coupon. Payment of the 4% coupon starts with the next payment, September 15, 2005. March 15, 2005 is the end of first coupon schedule, not to be confused with the beginning of the second.
In summary, MATLAB® takes user input as the end dates of coupon schedules and computes the next coupon dates automatically.
The payment due on settlement (zero in this case) represents the accrued interest due on that day. It is negative if such amount is nonzero. Comparison with cfamounts
shows that the two functions operate identically.
Price and Yield of Stepped-Coupon Bonds
This example shows how to compute the price and yield for a stepped-coupon bond using stepcpnprice
and stepcpnyield
.
Consider a bond that has a schedule of two coupons. Suppose that the bond starts out with a 2% coupon that steps up to 4% in 2 years and onward to maturity. Assume that the issue and settlement dates are both March 15, 2003. The bond has a 5-year maturity.
Settle = datenum('15-Mar-2003'); Maturity = datenum('15-Mar-2008'); ConvDates = [datenum('15-Mar-2005')]; CouponRates = [0.02, 0.04];
You can compute the price when the yield is known. You can estimate the yield to maturity as a number-of-year weighted average of coupon rates. For this bond, the estimated yield is:
or 3.33%. While definitely not exact (due to nonlinear relation of price and yield), this estimate suggests close to par valuation and serves as a quick first check using stepcpnprice
.
Yield = 0.0333; [Price, AccruedInterest] = stepcpnprice(Yield, Settle, ... Maturity, ConvDates, CouponRates)
Price = 99.2237
AccruedInterest = 0
The price returned is 99.2237 (per $100 notional), and the accrued interest is zero.
To validate that there is consistency among the stepped-coupon functions, you can use this computed price and see if indeed it implies a 3.33% yield by using stepcpnyield
.
YTM = stepcpnyield(Price, Settle, Maturity, ConvDates, ... CouponRates)
YTM = 0.0333
See Also
stepcpnprice
| stepcpnyield
| stepcpncfamounts