@Override public double yearFraction(LocalDate firstDate, LocalDate secondDate, ScheduleInfo scheduleInfo) { assertEquals(scheduleInfo.getStartDate(), base.getUnadjustedStartDate()); assertEquals(scheduleInfo.getEndDate(), base.getUnadjustedEndDate()); assertEquals(scheduleInfo.getPeriodEndDate(firstDate), period.getUnadjustedEndDate()); assertEquals(scheduleInfo.getFrequency(), base.getFrequency()); assertEquals(scheduleInfo.isEndOfMonthConvention(), eom.get()); return 0.5; }
@Override public double yearFraction(LocalDate firstDate, LocalDate secondDate, ScheduleInfo scheduleInfo) { assertEquals(scheduleInfo.getStartDate(), base.getUnadjustedStartDate()); assertEquals(scheduleInfo.getEndDate(), base.getUnadjustedEndDate()); assertEquals(scheduleInfo.getPeriodEndDate(firstDate), period.getUnadjustedEndDate()); assertEquals(scheduleInfo.getFrequency(), base.getFrequency()); assertEquals(scheduleInfo.isEndOfMonthConvention(), eom.get()); return 0.5; }
public void test_scheduleInfo() { ScheduleInfo test = new ScheduleInfo() {}; assertEquals(test.isEndOfMonthConvention(), true); assertThrows(() -> test.getStartDate(), UnsupportedOperationException.class); assertThrows(() -> test.getEndDate(), UnsupportedOperationException.class); assertThrows(() -> test.getFrequency(), UnsupportedOperationException.class); assertThrows(() -> test.getPeriodEndDate(JAN_01), UnsupportedOperationException.class); }
@Override public double calculateYearFraction(LocalDate firstDate, LocalDate secondDate, ScheduleInfo scheduleInfo) { // avoid using ScheduleInfo in this case if (firstDate.equals(secondDate)) { return 0d; } // calculation is based on the schedule period, firstDate assumed to be the start of the period LocalDate scheduleStartDate = scheduleInfo.getStartDate(); LocalDate scheduleEndDate = scheduleInfo.getEndDate(); LocalDate nextCouponDate = scheduleInfo.getPeriodEndDate(firstDate); Frequency freq = scheduleInfo.getFrequency(); boolean eom = scheduleInfo.isEndOfMonthConvention(); // final period, also handling single period schedules if (nextCouponDate.equals(scheduleEndDate)) { return finalPeriod(firstDate, secondDate, freq, eom); } // initial period if (firstDate.equals(scheduleStartDate)) { return initPeriod(firstDate, secondDate, nextCouponDate, freq, eom); } double actualDays = daysBetween(firstDate, secondDate); double periodDays = daysBetween(firstDate, nextCouponDate); return actualDays / (freq.eventsPerYear() * periodDays); }
@Override public double calculateYearFraction(LocalDate firstDate, LocalDate secondDate, ScheduleInfo scheduleInfo) { if (scheduleInfo.isEndOfMonthConvention()) { return THIRTY_U_360_EOM.calculateYearFraction(firstDate, secondDate, scheduleInfo); } else { return THIRTY_360_ISDA.calculateYearFraction(firstDate, secondDate, scheduleInfo); } }