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.
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. Use
stepcpncfamounts to generate the cash
flow schedule and times.
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 = 0 1 1 1 1 2 2 2 2 2 102 CDates = 731655 731839 732021 732205 732386 732570 732751 732935 733116 733300 733482 CTimes = 0 1 2 3 4 5 6 7 8 9 10
ConvDates has one less element than
CouponRates because MATLAB® software
assumes that the first element of
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
Semiannual Coupon Payment
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 in Financial Toolbox™ shows
that the two functions operate identically.
The toolbox provides two basic analytical functions to compute price and yield for stepped-coupon bonds. Using the above bond as an example, 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 on the function.
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, consistent with our earlier assertions.
To validate that there is consistency among the stepped-coupon
functions, you can use the above price and see if indeed it implies
a 3.33% yield by using
YTM = stepcpnyield(Price, Settle, Maturity, ConvDates, ... CouponRates)
YTM = 0.0333