@Test public void test() { final CouponFixedDefinition[] coupons = new CouponFixedDefinition[PAYMENT_DATES.length]; // First coupon uses settlement date final double sign = IS_PAYER ? -1.0 : 1.0; coupons[0] = new CouponFixedDefinition( CUR, PAYMENT_DATES[0], SETTLEMENT_DATE, PAYMENT_DATES[0], DAY_COUNT.getDayCountFraction(SETTLEMENT_DATE, PAYMENT_DATES[0]), sign * NOTIONAL, RATE); for (int loopcpn = 1; loopcpn < PAYMENT_DATES.length; loopcpn++) { coupons[loopcpn] = new CouponFixedDefinition( CUR, PAYMENT_DATES[loopcpn], PAYMENT_DATES[loopcpn - 1], PAYMENT_DATES[loopcpn], DAY_COUNT.getDayCountFraction(PAYMENT_DATES[loopcpn - 1], PAYMENT_DATES[loopcpn]), sign * NOTIONAL, RATE); } final AnnuityCouponFixedDefinition fixedAnnuity = new AnnuityCouponFixedDefinition(coupons); assertEquals(fixedAnnuity.isPayer(), IS_PAYER); for (int loopcpn = 0; loopcpn < PAYMENT_DATES.length; loopcpn++) { assertEquals(fixedAnnuity.getNthPayment(loopcpn), coupons[loopcpn]); } }
@Test public void testToDerivative() { final double sign = IS_PAYER ? -1.0 : 1.0; final CouponFixedDefinition[] coupons = new CouponFixedDefinition[PAYMENT_DATES.length]; // First coupon uses settlement date coupons[0] = new CouponFixedDefinition( CUR, PAYMENT_DATES[0], SETTLEMENT_DATE, PAYMENT_DATES[0], DAY_COUNT.getDayCountFraction(SETTLEMENT_DATE, PAYMENT_DATES[0]), sign * NOTIONAL, RATE); for (int loopcpn = 1; loopcpn < PAYMENT_DATES.length; loopcpn++) { coupons[loopcpn] = new CouponFixedDefinition( CUR, PAYMENT_DATES[loopcpn], PAYMENT_DATES[loopcpn - 1], PAYMENT_DATES[loopcpn], DAY_COUNT.getDayCountFraction(PAYMENT_DATES[loopcpn - 1], PAYMENT_DATES[loopcpn]), sign * NOTIONAL, RATE); } final AnnuityCouponFixedDefinition fixedAnnuity = new AnnuityCouponFixedDefinition(coupons); // final DayCount actAct = DayCountFactory.INSTANCE.getDayCount("Actual/Actual ISDA"); // final ZonedDateTime zonedDate = ZonedDateTime.of(LocalDateTime.ofMidnight(REFERENCE_DATE), // TimeZone.UTC); final String fundingCurve = "Funding"; final CouponFixed[] couponFixedConverted = new CouponFixed[PAYMENT_DATES.length]; for (int loopcpn = 0; loopcpn < PAYMENT_DATES.length; loopcpn++) { couponFixedConverted[loopcpn] = fixedAnnuity.getNthPayment(loopcpn).toDerivative(REFERENCE_DATE, fundingCurve); } final AnnuityCouponFixed referenceAnnuity = new AnnuityCouponFixed(couponFixedConverted); final AnnuityCouponFixed convertedDefinition = fixedAnnuity.toDerivative(REFERENCE_DATE, fundingCurve); assertEquals(referenceAnnuity, convertedDefinition); }
@Test public void testPaymentDates() { AnnuityCouponFixedDefinition fixedAnnuity; ZonedDateTime[] expectedPaymentDate; // End date is modified fixedAnnuity = AnnuityCouponFixedDefinition.from( CUR, SETTLEMENT_DATE, ANNUITY_TENOR, PAYMENT_TENOR, CALENDAR, DAY_COUNT, BUSINESS_DAY, IS_EOM, NOTIONAL, RATE, IS_PAYER); expectedPaymentDate = new ZonedDateTime[] { DateUtils.getUTCDate(2011, 9, 19), DateUtils.getUTCDate(2012, 3, 19), DateUtils.getUTCDate(2012, 9, 17), DateUtils.getUTCDate(2013, 3, 18) }; for (int loopcpn = 0; loopcpn < expectedPaymentDate.length; loopcpn++) { assertEquals( expectedPaymentDate[loopcpn], fixedAnnuity.getNthPayment(loopcpn).getPaymentDate()); } // Check modified in modified following. final ZonedDateTime settlementDateModified = DateUtils.getUTCDate(2011, 3, 31); fixedAnnuity = AnnuityCouponFixedDefinition.from( CUR, settlementDateModified, ANNUITY_TENOR, PAYMENT_TENOR, CALENDAR, DAY_COUNT, BUSINESS_DAY, IS_EOM, NOTIONAL, RATE, IS_PAYER); expectedPaymentDate = new ZonedDateTime[] { DateUtils.getUTCDate(2011, 9, 30), DateUtils.getUTCDate(2012, 3, 30), DateUtils.getUTCDate(2012, 9, 28), DateUtils.getUTCDate(2013, 3, 29) }; for (int loopcpn = 0; loopcpn < expectedPaymentDate.length; loopcpn++) { assertEquals( expectedPaymentDate[loopcpn], fixedAnnuity.getNthPayment(loopcpn).getPaymentDate()); } // End-of-month final ZonedDateTime settlementDateEOM = DateUtils.getUTCDate(2011, 2, 28); fixedAnnuity = AnnuityCouponFixedDefinition.from( CUR, settlementDateEOM, ANNUITY_TENOR, PAYMENT_TENOR, CALENDAR, DAY_COUNT, BUSINESS_DAY, IS_EOM, NOTIONAL, RATE, IS_PAYER); expectedPaymentDate = new ZonedDateTime[] { DateUtils.getUTCDate(2011, 8, 31), DateUtils.getUTCDate(2012, 2, 29), DateUtils.getUTCDate(2012, 8, 31), DateUtils.getUTCDate(2013, 2, 28) }; for (int loopcpn = 0; loopcpn < expectedPaymentDate.length; loopcpn++) { assertEquals( expectedPaymentDate[loopcpn], fixedAnnuity.getNthPayment(loopcpn).getPaymentDate()); } }