public void test_accruedInterest() { LocalDate refDate = LocalDate.of(2014, 6, 10); double computed = PRODUCT.accruedInterest(refDate); Schedule sch = SCHEDULE.createSchedule(REF_DATA).toUnadjusted(); CapitalIndexedBondPaymentPeriod period = PRODUCT.getPeriodicPayments().get(16); double factor = ACT_ACT_ICMA.relativeYearFraction(period.getUnadjustedStartDate(), refDate, sch); assertEquals(computed, factor * REAL_COUPON_VALUE * NOTIONAL * 2d, TOL * REAL_COUPON_VALUE * NOTIONAL); }
public void test_accruedInterest_exCoupon_out() { LocalDate refDate = LocalDate.of(2014, 6, 10); CapitalIndexedBondPaymentPeriod period = PRODUCT_EX_COUPON.getPeriodicPayments().get(16); double computed = PRODUCT_EX_COUPON.accruedInterest(refDate); Schedule sch = SCHEDULE.createSchedule(REF_DATA).toUnadjusted(); double factor = ACT_ACT_ICMA.relativeYearFraction(period.getUnadjustedStartDate(), refDate, sch); assertEquals(computed, factor * REAL_COUPON_VALUE * NOTIONAL * 2d, TOL * REAL_COUPON_VALUE * NOTIONAL); }
public void test_dirtyPriceFromStandardYield() { double yield = 0.0175; LocalDate standardSettle = SETTLE_OFFSET.adjust(VALUATION, REF_DATA); double computed = PRICER.dirtyPriceFromStandardYield(PRODUCT, RATES_PROVIDER, standardSettle, yield); Schedule sch = SCHEDULE.createSchedule(REF_DATA).toUnadjusted(); CapitalIndexedBondPaymentPeriod period = PRODUCT.getPeriodicPayments().get(16); double factorPeriod = ACT_ACT_ICMA.relativeYearFraction(period.getUnadjustedStartDate(), period.getUnadjustedEndDate(), sch); double factorSpot = ACT_ACT_ICMA.relativeYearFraction(period.getUnadjustedStartDate(), standardSettle, sch); double factorToNext = (factorPeriod - factorSpot) / factorPeriod; double dscFactor = 1d / (1d + 0.5 * yield); double expected = Math.pow(dscFactor, 3); for (int i = 0; i < 4; ++i) { expected += REAL_COUPON_VALUE * Math.pow(dscFactor, i); } expected *= Math.pow(dscFactor, factorToNext); assertEquals(computed, expected, TOL); }
public void test_accruedInterest_exCoupon_in() { CapitalIndexedBondPaymentPeriod period = PRODUCT_EX_COUPON.getPeriodicPayments().get(16); LocalDate refDate = period.getDetachmentDate(); double computed = PRODUCT_EX_COUPON.accruedInterest(refDate); Schedule sch = SCHEDULE.createSchedule(REF_DATA).toUnadjusted(); double factor = ACT_ACT_ICMA.relativeYearFraction(period.getUnadjustedStartDate(), refDate, sch); double factorTotal = ACT_ACT_ICMA.relativeYearFraction(period.getUnadjustedStartDate(), period.getUnadjustedEndDate(), sch); assertEquals(computed, (factor - factorTotal) * REAL_COUPON_VALUE * NOTIONAL * 2d, TOL * REAL_COUPON_VALUE * NOTIONAL); }
public void test_resolve() { FixedCouponBond base = sut(); ResolvedFixedCouponBond resolved = base.resolve(REF_DATA); assertEquals(resolved.getLegalEntityId(), LEGAL_ENTITY); assertEquals(resolved.getSettlementDateOffset(), DATE_OFFSET); assertEquals(resolved.getYieldConvention(), YIELD_CONVENTION); ImmutableList<FixedCouponBondPaymentPeriod> periodicPayments = resolved.getPeriodicPayments(); int expNum = 20; assertEquals(periodicPayments.size(), expNum); LocalDate unadjustedEnd = END_DATE; Schedule unadjusted = PERIOD_SCHEDULE.createSchedule(REF_DATA).toUnadjusted(); for (int i = 0; i < expNum; ++i) { FixedCouponBondPaymentPeriod payment = periodicPayments.get(expNum - 1 - i); assertEquals(payment.getCurrency(), EUR); assertEquals(payment.getNotional(), NOTIONAL); assertEquals(payment.getFixedRate(), FIXED_RATE); assertEquals(payment.getUnadjustedEndDate(), unadjustedEnd); assertEquals(payment.getEndDate(), BUSINESS_ADJUST.adjust(unadjustedEnd, REF_DATA)); assertEquals(payment.getPaymentDate(), payment.getEndDate()); LocalDate unadjustedStart = unadjustedEnd.minusMonths(6); assertEquals(payment.getUnadjustedStartDate(), unadjustedStart); assertEquals(payment.getStartDate(), BUSINESS_ADJUST.adjust(unadjustedStart, REF_DATA)); assertEquals(payment.getYearFraction(), unadjusted.getPeriod(expNum - 1 - i).yearFraction(DAY_COUNT, unadjusted)); assertEquals(payment.getDetachmentDate(), EX_COUPON.adjust(payment.getPaymentDate(), REF_DATA)); unadjustedEnd = unadjustedStart; } Payment expectedPayment = Payment.of(CurrencyAmount.of(EUR, NOTIONAL), BUSINESS_ADJUST.adjust(END_DATE, REF_DATA)); assertEquals(resolved.getNominalPayment(), expectedPayment); }
public void test_toUnadjusted() { SchedulePeriod a = SchedulePeriod.of(JUL_17, OCT_17, JUL_16, OCT_15); SchedulePeriod b = SchedulePeriod.of(JUL_16, OCT_15, JUL_16, OCT_15); Schedule test = Schedule.builder() .periods(ImmutableList.of(a)) .frequency(P1M) .rollConvention(DAY_17) .build() .toUnadjusted(); Schedule expected = Schedule.builder() .periods(ImmutableList.of(b)) .frequency(P1M) .rollConvention(DAY_17) .build(); assertEquals(test, expected); }
@Override public ResolvedFixedCouponBond resolve(ReferenceData refData) { Schedule adjustedSchedule = accrualSchedule.createSchedule(refData); Schedule unadjustedSchedule = adjustedSchedule.toUnadjusted(); DateAdjuster exCouponPeriodAdjuster = exCouponPeriod.resolve(refData);