Skip to content

Fix BondForward::spotIncome ex-coupon entitlement at both boundaries#2651

Open
jmboyd1 wants to merge 1 commit into
lballabio:masterfrom
jmboyd1:fix-bondforward-spotincome-excoupon
Open

Fix BondForward::spotIncome ex-coupon entitlement at both boundaries#2651
jmboyd1 wants to merge 1 commit into
lballabio:masterfrom
jmboyd1:fix-bondforward-spotincome-excoupon

Conversation

@jmboyd1

@jmboyd1 jmboyd1 commented Jul 9, 2026

Copy link
Copy Markdown

BondForward::spotIncome filtered income coupons with hasOccurred only. When the underlying bond carries an ex-coupon period (e.g. Australian ACGBs with their 7-day ex-interest window) this misattributes entitlement at both boundaries:

  • a coupon trading ex at spot settlement was counted as income although the buyer never receives it (overstating carry and distorting implied repo rates);
  • a coupon whose ex date has been reached by the delivery date was omitted although the holder receives it after delivery.

Both boundaries now consult CashFlow::tradingExCoupon, consistent with the treatment everywhere else in CashFlows. The dirty spot value and the negative accrued used by cleanForwardPrice were already ex-correct, so this only changes the income leg.

The full test suite passes unchanged. Found while validating ACGB forward pricing (negative accrual through the ex window) against exchange settlement prices; happy to add a test-suite case with an ex-coupon bond forward if that would help review.

spotIncome filtered income coupons with hasOccurred only. When bonds carry
an ex-coupon period this misattributes entitlement in two ways:

- a coupon trading ex at spot settlement was counted as income although
  the buyer never receives it (overstating carry and distorting implied
  repo rates);
- a coupon whose ex date has been reached by the delivery date was
  omitted although the holder receives it after delivery.

Both boundaries now consult CashFlow::tradingExCoupon, consistent with the
treatment everywhere else in CashFlows. The dirty spot value and the
negative accrued used by cleanForwardPrice were already ex-correct.
@boring-cyborg

boring-cyborg Bot commented Jul 9, 2026

Copy link
Copy Markdown

Thanks for opening this pull request! It might take a while before we look at it, so don't worry if there seems to be no feedback. We'll get to it.

@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@lballabio

Copy link
Copy Markdown
Owner

Thanks for contributing! May you check the CLAassistant comment above?

@coveralls

coveralls commented Jul 10, 2026

Copy link
Copy Markdown

Coverage Status

coverage: 74.885%. remained the same — jmboyd1:fix-bondforward-spotincome-excoupon into lballabio:master

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants