Fix SimpleThenCompounded NPV for long first coupon period#2473
Open
zippyg wants to merge 1 commit intolballabio:masterfrom
Open
Fix SimpleThenCompounded NPV for long first coupon period#2473zippyg wants to merge 1 commit intolballabio:masterfrom
zippyg wants to merge 1 commit intolballabio:masterfrom
Conversation
For bonds with a long irregular first coupon period, CashFlows::npv() and the related duration and convexity functions incorrectly applied compound discounting to the first period when the yield convention is SimpleThenCompounded. The ICMA specification requires simple discounting for the first period unconditionally; the time-magnitude threshold in InterestRate::compoundFactor() only diverges from this when the first stub exceeds one frequency period. The fix moves the period-position logic into the affected functions using a firstCoupon flag and, for modifiedDuration and convexity, running alpha/beta accumulators that correctly represent the mixed simple-then-compound derivative. Normal bonds (all periods equal to exactly 1/frequency) are numerically unaffected. Fixes lballabio#2172.
Owner
|
@pcaspers, you had done some analysis and had some test cases, if I recall correctly. May you have a look? Thanks! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
For bonds with a long irregular first coupon period, CashFlows::npv() and the related duration and convexity functions incorrectly applied compound discounting to the first period when the yield convention is SimpleThenCompounded. The ICMA specification requires simple discounting for the first period unconditionally; the time-magnitude threshold in InterestRate::compoundFactor() only diverges from this when the first stub exceeds one frequency period. This patch moves the period-position logic into the affected functions using a firstCoupon flag and, for modifiedDuration and convexity, running alpha/beta accumulators that correctly represent the mixed simple-then-compound derivative. Fixes #2172.