 Finance - Maple Programming Help

Home : Support : Online Help : Mathematics : Finance : Financial Instruments : Finance/FixedCouponBond

Finance

 FixedCouponBond
 create new fixed-coupon bond

 Calling Sequence FixedCouponBond(redemptionvalue, term, units, coupons, opts) FixedCouponBond(redemptionvalue, maturity, coupons, opts)

Parameters

 redemptionvalue - positive constant; bond's redemption value term - positive integer; length of term units - Days, Weeks, Months, or Years; time units coupons - non-negative constant or a list of non-negative constants; coupon rate(s) maturity - a date specified in a format recognized by the ParseDate command; maturity date opts - (optional) equation(s) of the form option = value where option is one of calendar, convention, frequency, daycounter, issuedate, or settlementdays; specify options for the FixedCouponBond command

Options

 • calendar = a name representing a supported calendar (e.g. Toronto, NewYork) or a calendar data structure created using the Calendar constructor -- This option can be used to specify the underlying calendar.
 • convention = Unadjusted, Preceding, ModifiedPreceding, Following, ModifiedFollowing, or MonthEndReference -- This option can be used to specify business day conventions. The default value is Following.
 • daycounter = a name representing a supported day counter (e.g. ISDA, Simple) or a day counter data structure created using the DayCounter constructor -- This option provides a day counter that will be used to convert the period between two dates as a fraction of the year.
 • frequency = Annual, Semiannual, EveryFourthMonth, Quarterly, Bimonthly, or Monthly -- This option specifies coupon frequency. The default value is Annual.
 • issuedate = a string containing a date specification in a format recognized by ParseDate or a date data structure -- This option provides the issue date of a bond. It is set to the global evaluation date by default.
 • settlementdays = positive integer -- This option specifies the number of settlement days. The default value is 1.

Description

 • The FixedCouponBond commands creates a new fixed-coupon bond with the specified parameters. It is assumed that the face value of the bond is $100.0$.
 • The parameter term specifies the length of the term of this bond. The parameter units specifies the time units in which the term is measured.
 • The parameter coupons specifies coupon rates for the bond. The value of the parameter can be either a non-negative constant or a list. If coupons is given as a negative constant then all coupon rates are assumed to be equal. Irregular coupons can be specified as a list of rates. The first element of this list is the rate of the first coupon, the second element of this list is the rate of the second coupon, etc. If the number of coupon payments exceeds the number of elements in the coupons list, the last rate from that list will be used for all the remaining coupons.

Examples

 > with(Finance):

First set the global evaluation date.

 > SetEvaluationDate("January 05, 2007"):
 $\left[{\mathrm{settlementdays}}{=}{0}{,}{\mathrm{daycounter}}{=}{\mathrm{Historical}}{,}{\mathrm{businessdayconvention}}{=}{\mathrm{Unadjusted}}\right]$ (1)

Construct three fixed-coupon bonds.

 > bond1 := FixedCouponBond(100, 5, Years, [0.05, 0.07, 0.03, 0.04], issuedate = "December 06, 2006");
 ${\mathrm{bond1}}{:=}{\mathbf{module}}\left({}\right)\phantom{\rule[-0.0ex]{0.5em}{0.0ex}}{}\phantom{\rule[-0.0ex]{0.5em}{0.0ex}}{\mathbf{end module}}$ (2)
 > bond2 := FixedCouponBond(100, 5, Years, 0.05, issuedate = "December 06, 2006");
 ${\mathrm{bond2}}{:=}{\mathbf{module}}\left({}\right)\phantom{\rule[-0.0ex]{0.5em}{0.0ex}}{}\phantom{\rule[-0.0ex]{0.5em}{0.0ex}}{\mathbf{end module}}$ (3)
 > bond3 := FixedCouponBond(120, 5, Years, [0.05, 0.07, 0.03], issuedate = "December 06, 2006");
 ${\mathrm{bond3}}{:=}{\mathbf{module}}\left({}\right)\phantom{\rule[-0.0ex]{0.5em}{0.0ex}}{}\phantom{\rule[-0.0ex]{0.5em}{0.0ex}}{\mathbf{end module}}$ (4)

Get the set of cash flows for our bonds.

 > CashFlows(bond1);
 $\left[{\mathrm{5. on \text{'}December 6, 2007\text{'}}}{,}{\mathrm{7.001362377 on \text{'}December 6, 2008\text{'}}}{,}{\mathrm{2.999416124 on \text{'}December 6, 2009\text{'}}}{,}{\mathrm{4. on \text{'}December 6, 2010\text{'}}}{,}{\mathrm{4. on \text{'}December 6, 2011\text{'}}}{,}{\mathrm{100. on \text{'}December 6, 2011\text{'}}}\right]$ (5)
 > CashFlows(bond2);
 $\left[{\mathrm{5. on \text{'}December 6, 2007\text{'}}}{,}{\mathrm{5.000973127 on \text{'}December 6, 2008\text{'}}}{,}{\mathrm{4.999026873 on \text{'}December 6, 2009\text{'}}}{,}{\mathrm{5. on \text{'}December 6, 2010\text{'}}}{,}{\mathrm{5. on \text{'}December 6, 2011\text{'}}}{,}{\mathrm{100. on \text{'}December 6, 2011\text{'}}}\right]$ (6)

Note that the face value of bond3 is still $100.0$ and the coupon payments are calculated based on this value. Note also that the last specified coupon rate is used for all coupons after the third.

 > CashFlows(bond3);
 $\left[{\mathrm{5. on \text{'}December 6, 2007\text{'}}}{,}{\mathrm{7.001362377 on \text{'}December 6, 2008\text{'}}}{,}{\mathrm{2.999416124 on \text{'}December 6, 2009\text{'}}}{,}{\mathrm{3. on \text{'}December 6, 2010\text{'}}}{,}{\mathrm{3. on \text{'}December 6, 2011\text{'}}}{,}{\mathrm{120. on \text{'}December 6, 2011\text{'}}}\right]$ (7)

Calculate the clean price and the dirty price for the first two of your bonds using the fixed rate of 5% as the discount rate.

 > cleanprice1 := CleanPrice(bond1, 0.05);
 ${\mathrm{cleanprice1}}{≔}{97.93538076}$ (8)
 > dirtyprice1 := DirtyPrice(bond1, 0.05);
 ${\mathrm{dirtyprice1}}{≔}{98.34633967}$ (9)
 > cleanprice2 := CleanPrice(bond2, 0.05);
 ${\mathrm{cleanprice2}}{≔}{99.45019629}$ (10)
 > dirtyprice2 := DirtyPrice(bond2, 0.05);
 ${\mathrm{dirtyprice2}}{≔}{99.86115519}$ (11)

Calculate the bond's yield using the previous discount rate.

 > YieldFromCleanPrice(bond1, cleanprice1);
 ${0.05000000001}$ (12)
 > YieldFromDirtyPrice(bond1, dirtyprice1);
 ${0.04999999999}$ (13)
 > YieldFromCleanPrice(bond2, cleanprice2);
 ${0.05000000000}$ (14)
 > YieldFromDirtyPrice(bond2, dirtyprice2);
 ${0.05000000000}$ (15)

Here is another way to calculate the dirty price and the yield.

 > discount := ForwardCurve(0.05);
 ${\mathrm{discount}}{≔}{\mathbf{module}}\left({}\right)\phantom{\rule[-0.0ex]{0.5em}{0.0ex}}{}\phantom{\rule[-0.0ex]{0.5em}{0.0ex}}{\mathbf{end module}}$ (16)
 > npv1 := NetPresentValue(bond1, discount);
 ${\mathrm{npv1}}{≔}{98.34633967}$ (17)
 > npv2 := NetPresentValue(bond2, discount);
 ${\mathrm{npv2}}{≔}{99.86115519}$ (18)
 > InternalRateOfReturn(bond1, npv1);
 ${0.05000000000}$ (19)
 > InternalRateOfReturn(bond2, npv2);
 ${0.05000000000}$ (20)

References

 Brigo, D., Mercurio, F., Interest Rate Models: Theory and Practice. New York: Springer-Verlag, 2001.
 Glasserman, P., Monte Carlo Methods in Financial Engineering. New York: Springer-Verlag, 2004.
 Hull, J., Options, Futures, and Other Derivatives, 5th. edition. Upper Saddle River, New Jersey: Prentice Hall, 2003.

Compatibility

 • The Finance[FixedCouponBond] command was introduced in Maple 15.