/** * 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 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_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)); }
@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; }
@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); }