/** * Gets the accrual end date of the period. * <p> * This is the last accrual date in the period. * This date has typically been adjusted to be a valid business day. * * @return the end date of the period */ @Override public LocalDate getEndDate() { return accrualPeriods.get(accrualPeriods.size() - 1).getEndDate(); }
private double rawRate(RateAccrualPeriod accrualPeriod, RatesProvider provider) { return rateComputationFn.rate( accrualPeriod.getRateComputation(), accrualPeriod.getStartDate(), accrualPeriod.getEndDate(), provider); }
private PointSensitivityBuilder unitNotionalSensitivityAccrual( RateAccrualPeriod period, Currency ccy, RatesProvider provider) { PointSensitivityBuilder sensi = rateComputationFn.rateSensitivity( period.getRateComputation(), period.getStartDate(), period.getEndDate(), provider); return sensi.multipliedBy(period.getGearing() * period.getYearFraction()); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case -2129778896: // startDate return ((RateAccrualPeriod) bean).getStartDate(); case -1607727319: // endDate return ((RateAccrualPeriod) bean).getEndDate(); case 1457691881: // unadjustedStartDate return ((RateAccrualPeriod) bean).getUnadjustedStartDate(); case 31758114: // unadjustedEndDate return ((RateAccrualPeriod) bean).getUnadjustedEndDate(); case -1731780257: // yearFraction return ((RateAccrualPeriod) bean).getYearFraction(); case 625350855: // rateComputation return ((RateAccrualPeriod) bean).getRateComputation(); case -91774989: // gearing return ((RateAccrualPeriod) bean).getGearing(); case -895684237: // spread return ((RateAccrualPeriod) bean).getSpread(); case 1969081334: // negativeRateMethod return ((RateAccrualPeriod) bean).getNegativeRateMethod(); } return super.propertyGet(bean, propertyName, quiet); }
private void assertFixedPaymentPeriod( ResolvedSwapLeg expandedPayLeg, int index, String paymentDateStr, String startDateStr, String endDateStr, double notional, double rate) { RatePaymentPeriod pp = (RatePaymentPeriod) expandedPayLeg.getPaymentPeriods().get(index); assertEquals(pp.getPaymentDate().toString(), paymentDateStr); assertEquals(Math.abs(pp.getNotional()), notional); assertEquals(pp.getAccrualPeriods().size(), 1); RateAccrualPeriod ap = pp.getAccrualPeriods().get(0); assertEquals(ap.getStartDate().toString(), startDateStr); assertEquals(ap.getEndDate().toString(), endDateStr); if (ap.getRateComputation() instanceof FixedRateComputation) { assertEquals(((FixedRateComputation) ap.getRateComputation()).getRate(), rate); } else { fail(); } }
public void test_builder_schedulePeriod() { SchedulePeriod schedulePeriod = SchedulePeriod.of(DATE_2014_03_31, DATE_2014_07_01, DATE_2014_03_30, DATE_2014_06_30); RateAccrualPeriod test = RateAccrualPeriod.builder(schedulePeriod) .yearFraction(0.25d) .rateComputation(GBP_LIBOR_3M_2014_03_28) .build(); assertEquals(test.getStartDate(), DATE_2014_03_31); assertEquals(test.getEndDate(), DATE_2014_07_01); assertEquals(test.getUnadjustedStartDate(), DATE_2014_03_30); assertEquals(test.getUnadjustedEndDate(), DATE_2014_06_30); assertEquals(test.getYearFraction(), 0.25d, 0d); assertEquals(test.getRateComputation(), GBP_LIBOR_3M_2014_03_28); assertEquals(test.getGearing(), 1d, 0d); assertEquals(test.getSpread(), 0d, 0d); assertEquals(test.getNegativeRateMethod(), ALLOW_NEGATIVE); }
/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(RateAccrualPeriod beanToCopy) { this.startDate = beanToCopy.getStartDate(); this.endDate = beanToCopy.getEndDate(); this.unadjustedStartDate = beanToCopy.getUnadjustedStartDate(); this.unadjustedEndDate = beanToCopy.getUnadjustedEndDate(); this.yearFraction = beanToCopy.getYearFraction(); this.rateComputation = beanToCopy.getRateComputation(); this.gearing = beanToCopy.getGearing(); this.spread = beanToCopy.getSpread(); this.negativeRateMethod = beanToCopy.getNegativeRateMethod(); }
public void test_builder_defaultDates() { RateAccrualPeriod test = RateAccrualPeriod.builder() .startDate(DATE_2014_03_31) .endDate(DATE_2014_07_01) .yearFraction(0.25d) .rateComputation(GBP_LIBOR_3M_2014_03_28) .build(); assertEquals(test.getStartDate(), DATE_2014_03_31); assertEquals(test.getEndDate(), DATE_2014_07_01); assertEquals(test.getUnadjustedStartDate(), DATE_2014_03_31); assertEquals(test.getUnadjustedEndDate(), DATE_2014_07_01); assertEquals(test.getYearFraction(), 0.25d, 0d); assertEquals(test.getRateComputation(), GBP_LIBOR_3M_2014_03_28); assertEquals(test.getGearing(), 1d, 0d); assertEquals(test.getSpread(), 0d, 0d); assertEquals(test.getNegativeRateMethod(), ALLOW_NEGATIVE); }
RateAccrualPeriod period = periods.get(i); IborRateComputation observation = (IborRateComputation) period.getRateComputation(); double rate = obsFunc.rate(observation, period.getStartDate(), period.getEndDate(), provider); if (i == j) { fixingDate = observation.getFixingDate(); index = observation.getIndex(); when(obsFuncUp.rate(observation, period.getStartDate(), period.getEndDate(), provNew)).thenReturn(rate + eps); when(obsFuncDown.rate(observation, period.getStartDate(), period.getEndDate(), provNew)) .thenReturn(rate - eps); } else { when(obsFuncUp.rate(observation, period.getStartDate(), period.getEndDate(), provNew)).thenReturn(rate); when(obsFuncDown.rate(observation, period.getStartDate(), period.getEndDate(), provNew)).thenReturn(rate);
RateComputation observation = periods.get(i).getRateComputation(); LocalDate startDate = periods.get(i).getStartDate(); LocalDate endDate = periods.get(i).getEndDate(); double rate = obsFunc.rate(observation, startDate, endDate, provider); when(obsFuncNewUp.rate(observation, startDate, endDate, provUp)).thenReturn(rate);
private void assertIborPaymentPeriod( ResolvedSwapLeg expandedPayLeg, int index, String paymentDateStr, String startDateStr, String endDateStr, double notional, String fixingDateStr) { RatePaymentPeriod pp = (RatePaymentPeriod) expandedPayLeg.getPaymentPeriods().get(index); assertEquals(pp.getPaymentDate().toString(), paymentDateStr); assertEquals(Math.abs(pp.getNotional()), notional); assertEquals(pp.getAccrualPeriods().size(), 1); RateAccrualPeriod ap = pp.getAccrualPeriods().get(0); assertEquals(ap.getStartDate().toString(), startDateStr); assertEquals(ap.getEndDate().toString(), endDateStr); if (ap.getRateComputation() instanceof IborInterpolatedRateComputation) { assertEquals(((IborInterpolatedRateComputation) ap.getRateComputation()).getFixingDate().toString(), fixingDateStr); } else if (ap.getRateComputation() instanceof IborRateComputation) { assertEquals(((IborRateComputation) ap.getRateComputation()).getFixingDate().toString(), fixingDateStr); } else { fail(); } }
ExplainMap explainAccrual = explain.get(ExplainKey.ACCRUAL_PERIODS).get().get(0); RateAccrualPeriod ap = PAYMENT_PERIOD_1.getAccrualPeriods().get(0); int daysBetween = (int) DAYS.between(ap.getStartDate(), ap.getEndDate()); assertEquals(explainAccrual.get(ExplainKey.ENTRY_TYPE).get(), "AccrualPeriod"); assertEquals(explainAccrual.get(ExplainKey.START_DATE).get(), ap.getStartDate()); assertEquals(explainAccrual.get(ExplainKey.UNADJUSTED_START_DATE).get(), ap.getUnadjustedStartDate()); assertEquals(explainAccrual.get(ExplainKey.END_DATE).get(), ap.getEndDate()); assertEquals(explainAccrual.get(ExplainKey.UNADJUSTED_END_DATE).get(), ap.getUnadjustedEndDate()); assertEquals(explainAccrual.get(ExplainKey.ACCRUAL_YEAR_FRACTION).get(), ap.getYearFraction());
ExplainMap explainAccrual = explain.get(ExplainKey.ACCRUAL_PERIODS).get().get(0); RateAccrualPeriod ap = PAYMENT_PERIOD_1_GS.getAccrualPeriods().get(0); int daysBetween = (int) DAYS.between(ap.getStartDate(), ap.getEndDate()); assertEquals(explainAccrual.get(ExplainKey.ENTRY_TYPE).get(), "AccrualPeriod"); assertEquals(explainAccrual.get(ExplainKey.START_DATE).get(), ap.getStartDate()); assertEquals(explainAccrual.get(ExplainKey.UNADJUSTED_START_DATE).get(), ap.getUnadjustedStartDate()); assertEquals(explainAccrual.get(ExplainKey.END_DATE).get(), ap.getEndDate()); assertEquals(explainAccrual.get(ExplainKey.UNADJUSTED_END_DATE).get(), ap.getUnadjustedEndDate()); assertEquals(explainAccrual.get(ExplainKey.ACCRUAL_YEAR_FRACTION).get(), ap.getYearFraction());
private void assertIborPaymentPeriodCpd( ResolvedSwapLeg expandedPayLeg, int paymentIndex, int accrualIndex, String paymentDateStr, String startDateStr, String endDateStr, double notional, String fixingDateStr) { RatePaymentPeriod pp = (RatePaymentPeriod) expandedPayLeg.getPaymentPeriods().get(paymentIndex); assertEquals(pp.getPaymentDate().toString(), paymentDateStr); assertEquals(Math.abs(pp.getNotional()), notional); assertEquals(pp.getAccrualPeriods().size(), 2); RateAccrualPeriod ap = pp.getAccrualPeriods().get(accrualIndex); assertEquals(ap.getStartDate().toString(), startDateStr); assertEquals(ap.getEndDate().toString(), endDateStr); if (ap.getRateComputation() instanceof IborInterpolatedRateComputation) { assertEquals(((IborInterpolatedRateComputation) ap.getRateComputation()).getFixingDate().toString(), fixingDateStr); } else if (ap.getRateComputation() instanceof IborRateComputation) { assertEquals(((IborRateComputation) ap.getRateComputation()).getFixingDate().toString(), fixingDateStr); } else { fail(); } }
public void test_builder() { RateAccrualPeriod test = RateAccrualPeriod.builder() .startDate(DATE_2014_03_31) .endDate(DATE_2014_07_01) .unadjustedStartDate(DATE_2014_03_30) .unadjustedEndDate(DATE_2014_06_30) .yearFraction(0.25d) .rateComputation(GBP_LIBOR_3M_2014_03_28) .build(); assertEquals(test.getStartDate(), DATE_2014_03_31); assertEquals(test.getEndDate(), DATE_2014_07_01); assertEquals(test.getUnadjustedStartDate(), DATE_2014_03_30); assertEquals(test.getUnadjustedEndDate(), DATE_2014_06_30); assertEquals(test.getYearFraction(), 0.25d, 0d); assertEquals(test.getRateComputation(), GBP_LIBOR_3M_2014_03_28); assertEquals(test.getGearing(), 1d, 0d); assertEquals(test.getSpread(), 0d, 0d); assertEquals(test.getNegativeRateMethod(), ALLOW_NEGATIVE); }
@Override public double accruedInterest(RatePaymentPeriod period, RatesProvider provider) { LocalDate valDate = provider.getValuationDate(); if (valDate.compareTo(period.getStartDate()) <= 0 || valDate.compareTo(period.getEndDate()) > 0) { return 0d; } ImmutableList.Builder<RateAccrualPeriod> truncated = ImmutableList.builder(); for (RateAccrualPeriod rap : period.getAccrualPeriods()) { if (valDate.compareTo(rap.getEndDate()) > 0) { truncated.add(rap); } else { truncated.add(rap.toBuilder() .endDate(provider.getValuationDate()) .unadjustedEndDate(provider.getValuationDate()) .yearFraction(period.getDayCount().yearFraction(rap.getStartDate(), provider.getValuationDate())) .build()); break; } } RatePaymentPeriod adjustedPaymentPeriod = period.toBuilder().accrualPeriods(truncated.build()).build(); return forecastValue(adjustedPaymentPeriod, provider); }
private void explainPresentValue( RateAccrualPeriod accrualPeriod, DayCount dayCount, Currency currency, double notional, RatesProvider provider, ExplainMapBuilder builder) { double rawRate = rateComputationFn.explainRate( accrualPeriod.getRateComputation(), accrualPeriod.getStartDate(), accrualPeriod.getEndDate(), provider, builder); double payOffRate = rawRate * accrualPeriod.getGearing() + accrualPeriod.getSpread(); double ua = unitNotionalAccrual(accrualPeriod, accrualPeriod.getSpread(), provider); // Note that the forecast value is not published since this is potentially misleading when // compounding is being applied, and when it isn't then it's the same as the forecast // value of the payment period. builder.put(ExplainKey.ENTRY_TYPE, "AccrualPeriod"); builder.put(ExplainKey.START_DATE, accrualPeriod.getStartDate()); builder.put(ExplainKey.UNADJUSTED_START_DATE, accrualPeriod.getUnadjustedStartDate()); builder.put(ExplainKey.END_DATE, accrualPeriod.getEndDate()); builder.put(ExplainKey.UNADJUSTED_END_DATE, accrualPeriod.getUnadjustedEndDate()); builder.put(ExplainKey.ACCRUAL_YEAR_FRACTION, accrualPeriod.getYearFraction()); builder.put(ExplainKey.ACCRUAL_DAYS, dayCount.days(accrualPeriod.getStartDate(), accrualPeriod.getEndDate())); builder.put(ExplainKey.DAYS, (int) DAYS.between(accrualPeriod.getStartDate(), accrualPeriod.getEndDate())); builder.put(ExplainKey.GEARING, accrualPeriod.getGearing()); builder.put(ExplainKey.SPREAD, accrualPeriod.getSpread()); builder.put(ExplainKey.PAY_OFF_RATE, accrualPeriod.getNegativeRateMethod().adjust(payOffRate)); builder.put(ExplainKey.UNIT_AMOUNT, ua); }
ExplainMap explainAccrual = explain.get(ExplainKey.ACCRUAL_PERIODS).get().get(0); RateAccrualPeriod ap = PAYMENT_PERIOD_1_FX.getAccrualPeriods().get(0); int daysBetween = (int) DAYS.between(ap.getStartDate(), ap.getEndDate()); assertEquals(explainAccrual.get(ExplainKey.ENTRY_TYPE).get(), "AccrualPeriod"); assertEquals(explainAccrual.get(ExplainKey.START_DATE).get(), ap.getStartDate()); assertEquals(explainAccrual.get(ExplainKey.UNADJUSTED_START_DATE).get(), ap.getUnadjustedStartDate()); assertEquals(explainAccrual.get(ExplainKey.END_DATE).get(), ap.getEndDate()); assertEquals(explainAccrual.get(ExplainKey.UNADJUSTED_END_DATE).get(), ap.getUnadjustedEndDate()); assertEquals(explainAccrual.get(ExplainKey.ACCRUAL_YEAR_FRACTION).get(), ap.getYearFraction());
RateAccrualPeriod accrualPeriod = paymentPeriod.getAccrualPeriods().get(j); pvbpdr = pvbpdr.combinedWith(rateComputationFn.rateSensitivity(accrualPeriod.getRateComputation(), accrualPeriod.getStartDate(), accrualPeriod.getEndDate(), provider).multipliedBy(rateB2[j]));