@Test(dataProvider = "yearFraction") public void test_yearFraction(DayCount dayCount, int y1, int m1, int d1, int y2, int m2, int d2, Double value) { double expected = (value == SIMPLE_30_360 ? calc360(y1, m1, d1, y2, m2, d2) : value); LocalDate date1 = LocalDate.of(y1, m1, d1); LocalDate date2 = LocalDate.of(y2, m2, d2); assertEquals(dayCount.yearFraction(date1, date2), expected, TOLERANCE_ZERO); }
public void test_actActIcma_singlePeriod() { LocalDate start = LocalDate.of(2003, 11, 1); LocalDate end = LocalDate.of(2004, 5, 1); ScheduleInfo info = new Info(start, end, end, true, P6M); assertEquals(ACT_ACT_ICMA.yearFraction(start, end.minusDays(1), info), (181d / (182d * 2d)), TOLERANCE_ZERO); assertEquals(ACT_ACT_ICMA.yearFraction(start, end, info), (182d / (182d * 2d)), TOLERANCE_ZERO); }
@Test(dataProvider = "types") public void test_same(DayCount type) { if (type != ONE_ONE) { assertEquals(type.yearFraction(JAN_02, JAN_02), 0d, TOLERANCE_ZERO); assertEquals(type.days(JAN_02, JAN_02), 0); } }
public void test_actActIcma_longInitialStub_eomFlagEom_long() { // nominals, 2011-08-31 (P91D) 2011-11-30 (P91D) 2012-02-29 LocalDate start = LocalDate.of(2011, 10, 1); LocalDate periodEnd = LocalDate.of(2012, 2, 29); LocalDate end = LocalDate.of(2012, 1, 12); // after first nominal ScheduleInfo info = new Info(start, periodEnd.plus(P3M), periodEnd, true, P3M); assertEquals(ACT_ACT_ICMA.yearFraction(start, end, info), (60d / (91d * 4d)) + (43d / (91d * 4d)), TOLERANCE_ZERO); }
public void test_actActIcma_longInitialStub_eomFlagEom_short() { // nominals, 2011-08-31 (P91D) 2011-11-30 (P91D) 2012-02-29 LocalDate start = LocalDate.of(2011, 10, 1); LocalDate periodEnd = LocalDate.of(2012, 2, 29); LocalDate end = LocalDate.of(2011, 11, 12); // before first nominal ScheduleInfo info = new Info(start, periodEnd.plus(P3M), periodEnd, true, P3M); assertEquals(ACT_ACT_ICMA.yearFraction(start, end, info), (42d / (91d * 4d)), TOLERANCE_ZERO); }
public void test_actActIcma_longInitialStub_notEomFlagEom_short() { // nominals, 2011-08-29 (P92D) 2011-11-29 (P92D) 2012-02-29 LocalDate start = LocalDate.of(2011, 10, 1); LocalDate periodEnd = LocalDate.of(2012, 2, 29); LocalDate end = LocalDate.of(2011, 11, 12); // before first nominal ScheduleInfo info = new Info(start, periodEnd.plus(P3M), periodEnd, false, P3M); assertEquals(ACT_ACT_ICMA.yearFraction(start, end, info), (42d / (92d * 4d)), TOLERANCE_ZERO); }
@Test(dataProvider = "30U360") public void test_yearFraction_30360ISDA( int y1, int m1, int d1, int y2, int m2, int d2, Double valueNotEOM, Double valueEOM) { double expected = (valueNotEOM == SIMPLE_30_360 ? calc360(y1, m1, d1, y2, m2, d2) : valueNotEOM); LocalDate date1 = LocalDate.of(y1, m1, d1); LocalDate date2 = LocalDate.of(y2, m2, d2); ScheduleInfo info = new Info(true); assertEquals(THIRTY_360_ISDA.yearFraction(date1, date2, info), expected, TOLERANCE_ZERO); }
@Test(dataProvider = "30E360ISDA") public void test_yearFraction_30E360ISDA_notMaturity( int y1, int m1, int d1, int y2, int m2, int d2, Double valueNotMaturity, Double valueMaturity) { double expected = (valueNotMaturity == SIMPLE_30_360 ? calc360(y1, m1, d1, y2, m2, d2) : valueNotMaturity); LocalDate date1 = LocalDate.of(y1, m1, d1); LocalDate date2 = LocalDate.of(y2, m2, d2); ScheduleInfo info = new Info(false); assertEquals(THIRTY_E_360_ISDA.yearFraction(date1, date2, info), expected, TOLERANCE_ZERO); }
@Test(dataProvider = "types") public void test_halfYear(DayCount type) { // sanity check to ensure that half year has fraction close to half if (type != ONE_ONE) { ScheduleInfo info = new Info(JAN_01, JAN_01_NEXT, JAN_01_NEXT, false, P12M); assertEquals(type.yearFraction(JAN_01, JUL_01, info), 0.5d, 0.01d); assertEquals(type.days(JAN_01, JUL_01), 182, 2); } }
private IborIndexObservation create( LocalDate fixingDate, HolidayCalendar fixingCal, DateAdjuster effectiveAdjuster, DateAdjuster maturityAdjuster) { LocalDate fixingBusinessDay = fixingCal.nextOrSame(fixingDate); LocalDate effectiveDate = effectiveAdjuster.adjust(fixingBusinessDay); LocalDate maturityDate = maturityAdjuster.adjust(effectiveDate); double yearFraction = dayCount.yearFraction(effectiveDate, maturityDate); return new IborIndexObservation(this, fixingDate, effectiveDate, maturityDate, yearFraction); }
@Override public double periodRate(OvernightIndexObservation startDateObservation, LocalDate endDate) { LocalDate effectiveDate = startDateObservation.getEffectiveDate(); ArgChecker.inOrderNotEqual(effectiveDate, endDate, "startDate", "endDate"); double accrualFactor = startDateObservation.getIndex().getDayCount().yearFraction(effectiveDate, endDate); return simplyCompoundForwardRate(effectiveDate, endDate, accrualFactor); }
@Test(dataProvider = "types") public void test_wrongOrder(DayCount type) { assertThrowsIllegalArg(() -> type.yearFraction(JAN_02, JAN_01)); assertThrowsIllegalArg(() -> type.days(JAN_02, JAN_01)); }
@Test(dataProvider = "types") public void test_null(DayCount type) { assertThrowsRuntime(() -> type.yearFraction(null, JAN_01)); assertThrowsRuntime(() -> type.yearFraction(JAN_01, null)); assertThrowsRuntime(() -> type.yearFraction(null, null)); assertThrowsRuntime(() -> type.days(null, JAN_01)); assertThrowsRuntime(() -> type.days(JAN_01, null)); assertThrowsRuntime(() -> type.days(null, null)); }
public void test_forecastValue_brl_swap() { DiscountingSwapLegPricer pricerLeg = DiscountingSwapLegPricer.DEFAULT; DiscountingSwapProductPricer pricerSwap = new DiscountingSwapProductPricer(pricerLeg); LocalDate paymentDate = BRL_SWAP.getLegs().get(0).getPaymentPeriods().get(0).getPaymentDate(); LocalDate startDate = BRL_SWAP.getLegs().get(0).getPaymentPeriods().get(0).getStartDate(); double af = BUS_252.yearFraction(startDate, paymentDate); MultiCurrencyAmount forecastComputed = pricerSwap.forecastValue(BRL_SWAP, BRL_DSCON); double forecastExpected = (-Math.pow((1 + COUPON), af) + BRL_DSCON.discountFactor(BRL, startDate) / BRL_DSCON.discountFactor(BRL, paymentDate)) * NOTIONAL; assertTrue(forecastComputed.getCurrencies().size() == 1); assertEquals(forecastComputed.getAmount(BRL).getAmount(), forecastExpected, NOTIONAL * TOLERANCE_RATE); }
public void test_presentValue_brl_swap() { DiscountingSwapLegPricer pricerLeg = DiscountingSwapLegPricer.DEFAULT; DiscountingSwapProductPricer pricerSwap = new DiscountingSwapProductPricer(pricerLeg); LocalDate paymentDate = BRL_SWAP.getLegs().get(0).getPaymentPeriods().get(0).getPaymentDate(); LocalDate startDate = BRL_SWAP.getLegs().get(0).getPaymentPeriods().get(0).getStartDate(); double af = BUS_252.yearFraction(startDate, paymentDate); MultiCurrencyAmount pvComputed = pricerSwap.presentValue(BRL_SWAP, BRL_DSCON); double pvExpected = (-Math.pow((1 + COUPON), af)*BRL_DSCON.discountFactor(BRL, paymentDate) + BRL_DSCON.discountFactor(BRL, startDate)) * NOTIONAL; assertTrue(pvComputed.getCurrencies().size() == 1); assertEquals(pvComputed.getAmount(BRL).getAmount(), pvExpected, NOTIONAL * TOLERANCE_RATE); }
public void test_periodRate_publication_1() { DiscountOvernightIndexRates test = DiscountOvernightIndexRates.of(USD_FED_FUND, DFCURVE, SERIES); double accrualFactor = USD_FED_FUND.getDayCount().yearFraction(DATE_BEFORE, DATE_VAL); double expected = (DFCURVE.discountFactor(DATE_BEFORE) / DFCURVE.discountFactor(DATE_VAL) - 1) / accrualFactor; assertEquals(test.periodRate(USD_FEDFUND_BEFORE, DATE_VAL), expected, 1e-8); }
public void test_yearFraction_badOrder() { DayCount test = DayCount.of("Bus/252 EUTA"); LocalDate date1 = date(2014, 12, 2); LocalDate date2 = date(2014, 12, 1); assertThrowsIllegalArg(() -> test.yearFraction(date1, date2)); }
public void test_rate_onPublication_noFixing() { DiscountOvernightIndexRates test = DiscountOvernightIndexRates.of(GBP_SONIA, DFCURVE, SERIES_EMPTY); LocalDate startDate = GBP_SONIA_VAL.getEffectiveDate(); LocalDate endDate = GBP_SONIA_VAL.getMaturityDate(); double accrualFactor = GBP_SONIA.getDayCount().yearFraction(startDate, endDate); double expected = (DFCURVE.discountFactor(startDate) / DFCURVE.discountFactor(endDate) - 1) / accrualFactor; assertEquals(test.rate(GBP_SONIA_VAL), expected, 1e-4); }
public void test_rate_afterPublication() { DiscountOvernightIndexRates test = DiscountOvernightIndexRates.of(GBP_SONIA, DFCURVE, SERIES); LocalDate startDate = GBP_SONIA_AFTER.getEffectiveDate(); LocalDate endDate = GBP_SONIA_AFTER.getMaturityDate(); double accrualFactor = GBP_SONIA.getDayCount().yearFraction(startDate, endDate); double expected = (DFCURVE.discountFactor(startDate) / DFCURVE.discountFactor(endDate) - 1) / accrualFactor; assertEquals(test.rate(GBP_SONIA_AFTER), expected, 1e-8); }
public void test_of() { IborIndexObservation test = IborIndexObservation.of(USD_LIBOR_3M, date(2016, 2, 18), REF_DATA); double yearFraction = USD_LIBOR_3M.getDayCount().yearFraction(date(2016, 2, 22), date(2016, 5, 23)); IborIndexObservation expected = new IborIndexObservation( USD_LIBOR_3M, date(2016, 2, 18), date(2016, 2, 22), date(2016, 5, 23), yearFraction); assertEquals(test, expected); assertEquals(test.getCurrency(), USD); }