Cash flow amounts and times for bonds and stepped coupons
[CFlows,CDates,CTimes] = stepcpncfamounts(Settle,Maturity,ConvDates,CouponRates,Period,Basis,EndMonthRule,Face)
Settlement date. A scalar or vector of serial date numbers.
Maturity date. A scalar or vector of serial date numbers.
Matrix of serial date numbers representing conversion
Matrix indicating the coupon rates for each bond in decimal form. Size = number of instruments
by maximum number of conversions + 1. First column of this matrix contains rates
Settle---------ConvDate1-----------ConvDate2------------Maturity Rate1 Rate2 Rate3
(Optional) Coupons per year of the bond. A vector of
integers. Allowed values are
(Optional) Day-count basis of the instrument. A vector of integers.
For more information, see Basis.
(Optional) End-of-month rule. A vector. This rule applies only when
(Optional) Face value of each bond in the portfolio.
All arguments must be scalars or number of bonds
1 vectors, except for
[CFlows,CDates,CTimes] = stepcpncfamounts(Settle,Maturity,ConvDates,CouponRates,Period,Basis,EndMonthRule,Face) returns
matrices of cash flow amounts, cash flow dates, and time factors for
a portfolio of
NUMBONDS stepped-coupon bonds.
CFlows is a matrix of cash flow amounts. The first entry in each row vector
is a negative number indicating the accrued interest due at settlement. If no accrued
interest is due, the first column is 0.
CDates is a matrix of cash flow dates in
serial date number form. At least two columns are always present,
one for settlement and one for maturity.
CTimes is a matrix of time factors for the
SIA semiannual price/yield conversion.
DiscountFactor = (1 + Yield/2).^(-TFactor)
Time factors are in units of semiannual coupon periods. In computing time factors, use SIA actual/actual conventions for all time factor calculations.
For bonds with fixed coupons, use
If you use a fixed-coupon bond with
stepcpncfamounts, MATLAB® software
generates an error.
This example generates stepped cash flows for three different bonds, all paying interest semiannually. Their life span is about 18–19 years each:
Bond A has two conversions, but the first one occurs on the settlement date and immediately expires.
Bond B has three conversions, with conversion dates exactly on the coupon dates.
Bond C has three conversions, with some conversion dates not on the coupon dates. It has the longest maturity. This case illustrates that only cash flows for full periods after conversion dates are affected, as illustrated below.
The following table illustrates the interest rate characteristics of this bond portfolio.
Bond A Dates
Bond A Rates
Bond B Dates
Bond B Rates
Bond C Dates
Bond C Rates
First Conversion (02-Aug-92)
First Conversion (15-Jun-97))
First Conversion (14-Jun-97))
Second Conversion (15-Jun-03)
Second Conversion (15-Jun-01)
Second Conversion (14-Jun-01)
Third Conversion (15-Jun-05)
Third Conversion (14-Jun-05)
Settle = datenum('02-Aug-1992'); ConvDates = [datenum('02-Aug-1992'), datenum('15-Jun-2003'),... nan; datenum('15-Jun-1997'), datenum('15-Jun-2001'),... datenum('15-Jun-2005'); datenum('14-Jun-1997'), datenum('14-Jun-2001'),... datenum('14-Jun-2005')]; Maturity = [datenum('15-Jun-2010'); datenum('15-Jun-2010'); datenum('15-Jun-2011')]; CouponRates = [0.075 0.08875 0.0925 nan; 0.075 0.08875 0.0925 0.1; 0.025 0.05 0.0750 0.1]; Basis = 1; Period = 2; EndMonthRule = 1; Face = 100;
stepcpncfamounts to compute cash flows
[CFlows, CDates, CTimes] = stepcpncfamounts(Settle, Maturity, ... ConvDates, CouponRates);
Visualize the third bond cash flows (2.5 - 5 - 7.5 - 10) using the
cfplot(CDates(3,:),CFlows(3,:)); xlabel('Dates in Serial Number Format') ylabel('Relative Amounts of Cash Flows') title('CashFlow of 2.5 - 5 - 7.5 - 10 Stepped Coupon Bond')