/** * Checks if there is an ex-coupon period. * * @return true if has an ex-coupon period */ public boolean hasExCouponPeriod() { return periodicPayments.get(0).hasExCouponPeriod(); }
private double dirtyPriceFromYieldStandard( ResolvedFixedCouponBond bond, LocalDate settlementDate, double yield) { int nbCoupon = bond.getPeriodicPayments().size(); double factorOnPeriod = 1 + yield / ((double) bond.getFrequency().eventsPerYear()); double fixedRate = bond.getFixedRate(); double pvAtFirstCoupon = 0; int pow = 0; for (int loopcpn = 0; loopcpn < nbCoupon; loopcpn++) { FixedCouponBondPaymentPeriod period = bond.getPeriodicPayments().get(loopcpn); if ((period.hasExCouponPeriod() && !settlementDate.isAfter(period.getDetachmentDate())) || (!period.hasExCouponPeriod() && period.getPaymentDate().isAfter(settlementDate))) { pvAtFirstCoupon += fixedRate * period.getYearFraction() / Math.pow(factorOnPeriod, pow); ++pow; } } pvAtFirstCoupon += 1d / Math.pow(factorOnPeriod, pow - 1); return pvAtFirstCoupon * Math.pow(factorOnPeriod, -factorToNextCoupon(bond, settlementDate)); }
for (int loopcpn = 0; loopcpn < nbCoupon; loopcpn++) { FixedCouponBondPaymentPeriod period = bond.getPeriodicPayments().get(loopcpn); if ((period.hasExCouponPeriod() && !settlementDate.isAfter(period.getDetachmentDate())) || (!period.hasExCouponPeriod() && period.getPaymentDate().isAfter(settlementDate))) { cvAtFirstCoupon += period.getYearFraction() / Math.pow(factorOnPeriod, pow + 2) * (pow + factorToNextCoupon) * (pow + factorToNextCoupon + 1);
for (int loopcpn = 0; loopcpn < nbCoupon; loopcpn++) { FixedCouponBondPaymentPeriod period = bond.getPeriodicPayments().get(loopcpn); if ((period.hasExCouponPeriod() && !settlementDate.isAfter(period.getDetachmentDate())) || (!period.hasExCouponPeriod() && period.getPaymentDate().isAfter(settlementDate))) { mdAtFirstCoupon += period.getYearFraction() / Math.pow(factorOnPeriod, pow + 1) * (pow + factorToNextCoupon) / couponPerYear;
assertEquals(test.getNotional(), NOTIONAL); assertEquals(test.getYearFraction(), YEAR_FRACTION); assertEquals(test.hasExCouponPeriod(), true); assertEquals(test.getNotional(), NOTIONAL); assertEquals(test.getYearFraction(), YEAR_FRACTION); assertEquals(test.hasExCouponPeriod(), true);
public void test_of_noExCoupon() { FixedCouponBondPaymentPeriod test = FixedCouponBondPaymentPeriod.builder() .currency(USD) .startDate(START_ADJUSTED) .unadjustedStartDate(START) .endDate(END_ADJUSTED) .unadjustedEndDate(END) .detachmentDate(END_ADJUSTED) .notional(NOTIONAL) .fixedRate(FIXED_RATE) .yearFraction(YEAR_FRACTION) .build(); assertEquals(test.hasExCouponPeriod(), false); }