Take the 2-minute tour ×
Quantitative Finance Stack Exchange is a question and answer site for finance professionals and academics. It's 100% free, no registration required.

For some bonds I work with the last coupon date is not equal to bond's maturity date. E.g. the last coupon date is April 25th, 2020 and maturity date is April 25th, 2021. I looked at Schedule class and MakeSchedule() and I don't see a clear way to reflect this. I feel it can't be that hard, though. Would appreciate if someone gives me a hint. Thank you!

share|improve this question
    
To check that I understand: do you mean that the last coupon is paid in 2020 and only the redemption is paid upon maturity in 2021? –  Luigi Ballabio Apr 29 at 7:37

1 Answer 1

You can obtain the desired effect by tweaking the bond construction.

For instance, let's say you're creating a 4-years bond with semiannual coupons paying 3%, but missing the last. This makes for 7 coupons. Instead, you'll create the schedule as usual (so you have 8 periods), but specify a null last coupon when creating the bond. So:

Schedule schedule = ...;  // as for a "normal" bond;

std::vector<Rate> coupons(8, 0.03);  // 8 coupons...
coupons.back() = 0.0;   // but the last one pays 0%.

FixedRateBond bond(settlementDays, faceAmount,
                   schedule, coupon,
                   accrualDayCounter);

This will give you the correct price; the disadvantage is that you'll have a coupon paying 0%, which is less clean than having just the ones that actually exist. If this turns out to be a problem, you can inherit from FixedRateCouponBond and delete the coupon in the constructor. But I would guess it's way easier to just filter out null cash flows in your client code.

You can use the same trick for most kinds of bond; e.g., for floating-rate bonds you can cancel the last coupon by passing a null gearing.

share|improve this answer
    
Thank you! I did not quite get the idea about inheriting from FixedRateCouponBond, but the first method should work. By the way -- is there an easy way to calculate the number of coupon payments given the issue and maturity dates? For now I just use maturityDate.year() - issueDate.year() and then adjust depending on maturityDate.month() - issueDate.month() value. I wonder if there is more elegant way to calculate the # of coupon payments. –  user7922 Apr 30 at 20:32
    
Once you have build the schedule, you can retrieve the number of coupons as schedule.size()-1. –  Luigi Ballabio Apr 30 at 20:58

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.