/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(OvernightAveragedDailyRateComputation beanToCopy) { this.index = beanToCopy.getIndex(); this.fixingCalendar = beanToCopy.getFixingCalendar(); this.startDate = beanToCopy.getStartDate(); this.endDate = beanToCopy.getEndDate(); }
@Override public OvernightAveragedDailyRateComputation build() { return new OvernightAveragedDailyRateComputation( index, fixingCalendar, startDate, endDate); }
public void test_before() { LocalDate startDate = date(2018, 2, 1); LocalDate endDate = date(2018, 2, 28); OvernightAveragedDailyRateComputation cmp = OvernightAveragedDailyRateComputation.of( USD_FED_FUND, startDate, endDate, REF_DATA); ImmutableRatesProvider rates = getRatesProvider(date(2018, 1, 24)); double rate = rates.overnightIndexRates(USD_FED_FUND).rate(obs); PointSensitivityBuilder rateSensi = rates.overnightIndexRates(USD_FED_FUND).ratePointSensitivity(obs); LocalDate nextDate = cmp.getFixingCalendar().next(date); long days = DAYS.between(date, nextDate); expectedRate += rate * days;
public void test_calculate() { OvernightAveragedDailyRateComputation test = OvernightAveragedDailyRateComputation.of(USD_FED_FUND, date(2016, 2, 24), date(2016, 3, 24), REF_DATA); assertEquals( test.calculateEffectiveFromFixing(date(2016, 2, 24)), USD_FED_FUND.calculateEffectiveFromFixing(date(2016, 2, 24), REF_DATA)); assertEquals( test.calculateFixingFromEffective(date(2016, 2, 24)), USD_FED_FUND.calculateFixingFromEffective(date(2016, 2, 24), REF_DATA)); assertEquals( test.calculatePublicationFromFixing(date(2016, 2, 24)), USD_FED_FUND.calculatePublicationFromFixing(date(2016, 2, 24), REF_DATA)); assertEquals( test.calculateMaturityFromFixing(date(2016, 2, 24)), USD_FED_FUND.calculateMaturityFromFixing(date(2016, 2, 24), REF_DATA)); assertEquals( test.calculateMaturityFromEffective(date(2016, 2, 24)), USD_FED_FUND.calculateMaturityFromEffective(date(2016, 2, 24), REF_DATA)); }
return OvernightAveragedRateComputation.of(index, startDate, endDate, rateCutOffDays, referenceData); case AVERAGED_DAILY: return OvernightAveragedDailyRateComputation.of(index, startDate, endDate, referenceData); default: throw new IllegalArgumentException(Messages.format("unsupported Overnight accrual method, {}", accrualMethod));
public void test_observeOn() { OvernightAveragedDailyRateComputation test = OvernightAveragedDailyRateComputation.of(USD_FED_FUND, date(2016, 2, 24), date(2016, 3, 24), REF_DATA); assertEquals(test.observeOn(date(2016, 2, 24)), OvernightIndexObservation.of(USD_FED_FUND, date(2016, 2, 24), REF_DATA)); }
public void test_collectIndices() { OvernightAveragedDailyRateComputation test = OvernightAveragedDailyRateComputation.of(USD_FED_FUND, date(2016, 2, 24), date(2016, 3, 24), REF_DATA); ImmutableSet.Builder<Index> builder = ImmutableSet.builder(); test.collectIndices(builder); assertEquals(builder.build(), ImmutableSet.of(USD_FED_FUND)); }
public void test_between() { LocalDate startDate = date(2018, 3, 1); LocalDate endDate = date(2018, 3, 31); OvernightAveragedDailyRateComputation cmp = OvernightAveragedDailyRateComputation.of( USD_FED_FUND, startDate, endDate, REF_DATA); ImmutableRatesProvider rates = getRatesProvider(date(2018, 3, 14)); double rate = rates.overnightIndexRates(USD_FED_FUND).rate(obs); PointSensitivityBuilder rateSensi = rates.overnightIndexRates(USD_FED_FUND).ratePointSensitivity(obs); LocalDate nextDate = cmp.getFixingCalendar().next(date); long days = nextDate.getMonthValue() != 4 ? DAYS.between(date, nextDate) : DAYS.between(date, endDate.plusDays(1)); expectedRate += rate * days;
public void test_rate_OvernightAveragedDailyRateComputation() { double mockRate = 0.0123d; RateComputationFn<OvernightAveragedDailyRateComputation> mockOnAve = mock(RateComputationFn.class); OvernightAveragedDailyRateComputation ro = OvernightAveragedDailyRateComputation.of(USD_FED_FUND, ACCRUAL_START_DATE, ACCRUAL_END_DATE, REF_DATA); when(mockOnAve.rate(ro, ACCRUAL_START_DATE, ACCRUAL_END_DATE, MOCK_PROV)) .thenReturn(mockRate); DispatchingRateComputationFn test = new DispatchingRateComputationFn( MOCK_IBOR_EMPTY, MOCK_IBOR_INT_EMPTY, MOCK_IBOR_AVE_EMPTY, MOCK_ON_CPD_EMPTY, MOCK_BRL_ON_CPD_EMPTY, MOCK_ON_AVE_EMPTY, mockOnAve, MOCK_INF_MON_EMPTY, MOCK_INF_INT_EMPTY, MOCK_INF_BOND_MON_EMPTY, MOCK_INF_BOND_INT_EMPTY); assertEquals(test.rate(ro, ACCRUAL_START_DATE, ACCRUAL_END_DATE, MOCK_PROV), mockRate, TOLERANCE_RATE); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 100346066: // index return ((OvernightAveragedDailyRateComputation) bean).getIndex(); case 394230283: // fixingCalendar return ((OvernightAveragedDailyRateComputation) bean).getFixingCalendar(); case -2129778896: // startDate return ((OvernightAveragedDailyRateComputation) bean).getStartDate(); case -1607727319: // endDate return ((OvernightAveragedDailyRateComputation) bean).getEndDate(); } return super.propertyGet(bean, propertyName, quiet); }
public void test_serialization() { OvernightAveragedDailyRateComputation test = OvernightAveragedDailyRateComputation.of(USD_FED_FUND, date(2016, 2, 24), date(2016, 3, 24), REF_DATA); assertSerialization(test); }
@Override public double rate( OvernightAveragedDailyRateComputation computation, LocalDate startDate, LocalDate endDate, RatesProvider provider) { OvernightIndex index = computation.getIndex(); OvernightIndexRates rates = provider.overnightIndexRates(index); LocalDate lastFixingDate = computation.getEndDate(); double interestSum = 0d; int numberOfDays = 0; LocalDate currentFixingDate = computation.getStartDate(); while (!currentFixingDate.isAfter(lastFixingDate)) { LocalDate referenceFixingDate = computation.getFixingCalendar().previousOrSame(currentFixingDate); OvernightIndexObservation indexObs = computation.observeOn(referenceFixingDate); double forwardRate = rates.rate(indexObs); interestSum += forwardRate; numberOfDays++; currentFixingDate = currentFixingDate.plusDays(1); } return interestSum / numberOfDays; }
public void test_of_badDateOrder() { assertThrowsIllegalArg(() -> OvernightAveragedDailyRateComputation.of( USD_FED_FUND, date(2016, 2, 24), date(2016, 2, 24), REF_DATA)); assertThrowsIllegalArg(() -> OvernightAveragedDailyRateComputation.of( USD_FED_FUND, date(2016, 2, 25), date(2016, 2, 24), REF_DATA)); }
@Override public PointSensitivityBuilder rateSensitivity( OvernightAveragedDailyRateComputation computation, LocalDate startDate, LocalDate endDate, RatesProvider provider) { OvernightIndex index = computation.getIndex(); OvernightIndexRates rates = provider.overnightIndexRates(index); LocalDate lastFixingDate = computation.getEndDate(); PointSensitivityBuilder pointSensitivityBuilder = PointSensitivityBuilder.none(); int numberOfDays = 0; LocalDate currentFixingDate = computation.getStartDate(); while (!currentFixingDate.isAfter(lastFixingDate)) { LocalDate referenceFixingDate = computation.getFixingCalendar().previousOrSame(currentFixingDate); OvernightIndexObservation indexObs = computation.observeOn(referenceFixingDate); PointSensitivityBuilder forwardRateSensitivity = rates.ratePointSensitivity(indexObs); pointSensitivityBuilder = pointSensitivityBuilder.combinedWith(forwardRateSensitivity); numberOfDays++; currentFixingDate = currentFixingDate.plusDays(1); } return pointSensitivityBuilder.multipliedBy(1d / numberOfDays); }
public void coverage() { OvernightAveragedDailyRateComputation test = OvernightAveragedDailyRateComputation.of(USD_FED_FUND, date(2016, 2, 24), date(2016, 3, 24), REF_DATA); coverImmutableBean(test); OvernightAveragedDailyRateComputation test2 = OvernightAveragedDailyRateComputation.of(GBP_SONIA, date(2014, 6, 3), date(2014, 7, 3), REF_DATA); coverBeanEquals(test, test2); }
public void test_of_noRateCutoff() { OvernightAveragedDailyRateComputation test = OvernightAveragedDailyRateComputation.of( USD_FED_FUND, date(2016, 2, 24), date(2016, 3, 24), REF_DATA); assertEquals(test.getStartDate(), date(2016, 2, 24)); assertEquals(test.getEndDate(), date(2016, 3, 24)); assertEquals(test.getIndex(), USD_FED_FUND); assertEquals(test.getFixingCalendar(), USD_FED_FUND.getFixingCalendar().resolve(REF_DATA)); }
public void test_after_regression() { LocalDate startDate = date(2018, 3, 1); LocalDate endDate = date(2018, 3, 31); OvernightAveragedDailyRateComputation cmp = OvernightAveragedDailyRateComputation.of( USD_FED_FUND, startDate, endDate, REF_DATA); ImmutableRatesProvider rates = getRatesProvider(date(2018, 4, 28)); double computed = FUNCTION.rate(cmp, DUMMY_ACCRUAL_START_DATE, DUMMY_ACCRUAL_END_DATE, rates); double expected = 0.0150612903225806; assertEquals(computed, expected, TOL); assertEquals(FUNCTION.rateSensitivity(cmp, startDate, endDate, rates), PointSensitivityBuilder.none()); }
OvernightAveragedRateComputation.of(USD_FED_FUND, ACCRUAL_START_DATE, ACCRUAL_END_DATE, 0, REF_DATA); OvernightAveragedDailyRateComputation onAvgDly = OvernightAveragedDailyRateComputation.of(USD_FED_FUND, ACCRUAL_START_DATE, ACCRUAL_END_DATE, REF_DATA); InflationMonthlyRateComputation inflationMonthly = InflationMonthlyRateComputation.of(US_CPI_U, ACCRUAL_START_MONTH, ACCRUAL_END_MONTH);