public void test_accruedInterest() { // settle before start LocalDate settleDate1 = START_DATE.minusDays(5); double accruedInterest1 = PRICER.accruedInterest(PRODUCT, settleDate1); assertEquals(accruedInterest1, 0d); // settle between endDate and endDate -lag LocalDate settleDate2 = date(2015, 10, 8); double accruedInterest2 = PRICER.accruedInterest(PRODUCT, settleDate2); assertEquals(accruedInterest2, -4.0 / 365.0 * FIXED_RATE * NOTIONAL, EPS); // normal LocalDate settleDate3 = date(2015, 4, 18); // not adjusted ResolvedFixedCouponBond product = FixedCouponBond.builder() .securityId(SECURITY_ID) .dayCount(DAY_COUNT) .fixedRate(FIXED_RATE) .legalEntityId(ISSUER_ID) .currency(EUR) .notional(NOTIONAL) .accrualSchedule(PERIOD_SCHEDULE) .settlementDateOffset(DATE_OFFSET) .yieldConvention(YIELD_CONVENTION) .exCouponPeriod(DaysAdjustment.NONE) .build() .resolve(REF_DATA); double accruedInterest3 = PRICER.accruedInterest(product, settleDate3); assertEquals(accruedInterest3, 6.0 / 365.0 * FIXED_RATE * NOTIONAL, EPS); }
FixedCouponBond bond1 = bond0.toBuilder().notional(100).build(); FixedCouponBond bond2 = bond0.toBuilder().currency(Currency.CAD).build(); assertThrowsIllegalArg(() -> BondFuture.builder()
public void test_builder_fail() { assertThrowsIllegalArg(() -> FixedCouponBond.builder() .securityId(SECURITY_ID) .dayCount(DAY_COUNT) .fixedRate(FIXED_RATE) .legalEntityId(LEGAL_ENTITY) .currency(EUR) .notional(NOTIONAL) .accrualSchedule(PERIOD_SCHEDULE) .settlementDateOffset(DATE_OFFSET) .yieldConvention(YIELD_CONVENTION) .exCouponPeriod(DaysAdjustment.ofBusinessDays(EX_COUPON_DAYS, EUTA, BUSINESS_ADJUST)) .build()); assertThrowsIllegalArg(() -> FixedCouponBond.builder() .securityId(SECURITY_ID) .dayCount(DAY_COUNT) .fixedRate(FIXED_RATE) .legalEntityId(LEGAL_ENTITY) .currency(EUR) .notional(NOTIONAL) .accrualSchedule(PERIOD_SCHEDULE) .settlementDateOffset(DaysAdjustment.ofBusinessDays(-3, EUTA)) .yieldConvention(YIELD_CONVENTION) .build()); }
static FixedCouponBond sut2() { BusinessDayAdjustment adj = BusinessDayAdjustment.of(MODIFIED_FOLLOWING, SAT_SUN); PeriodicSchedule sche = PeriodicSchedule.of( START_DATE, END_DATE, Frequency.P12M, adj, StubConvention.SHORT_INITIAL, true); return FixedCouponBond.builder() .securityId(SECURITY_ID2) .dayCount(DayCounts.ACT_360) .fixedRate(0.005) .legalEntityId(LegalEntityId.of("OG-Ticker", "BUN EUR 2")) .currency(GBP) .notional(1.0e6) .accrualSchedule(sche) .settlementDateOffset(DaysAdjustment.ofBusinessDays(2, SAT_SUN)) .yieldConvention(FixedCouponBondYieldConvention.GB_BUMP_DMO) .build(); }
static FixedCouponBond sut() { return FixedCouponBond.builder() .securityId(SECURITY_ID) .dayCount(DAY_COUNT) .fixedRate(FIXED_RATE) .legalEntityId(LEGAL_ENTITY) .currency(EUR) .notional(NOTIONAL) .accrualSchedule(PERIOD_SCHEDULE) .settlementDateOffset(DATE_OFFSET) .yieldConvention(YIELD_CONVENTION) .exCouponPeriod(EX_COUPON) .build(); }