private Optional<FixedOvernightCompoundedAnnualRateComputation> findAnnualRateComputation(ResolvedSwapLeg fixedLeg) { SwapPaymentPeriod firstPeriod = fixedLeg.getPaymentPeriods().get(0); if (firstPeriod instanceof RatePaymentPeriod) { RatePaymentPeriod payment = (RatePaymentPeriod) firstPeriod; RateAccrualPeriod firstAccrualPeriod = payment.getAccrualPeriods().get(0); if (firstAccrualPeriod.getRateComputation() instanceof FixedOvernightCompoundedAnnualRateComputation) { return Optional.of((FixedOvernightCompoundedAnnualRateComputation) firstAccrualPeriod.getRateComputation()); } } return Optional.empty(); }
@Override public void collectIndices(ImmutableSet.Builder<Index> builder) { accrualPeriods.stream().forEach(accrual -> accrual.getRateComputation().collectIndices(builder)); getFxReset().ifPresent(fxReset -> builder.add(fxReset.getIndex())); }
private LocalDate calculateLastFixingDate(LocalDate valuationDate, ReferenceData refData) { SwapTrade trade = template.createTrade(valuationDate, BuySell.BUY, 1, 1, 0, refData); SwapLeg iborLeg = trade.getProduct().getLegs(SwapLegType.IBOR).get(1); // Select the 'second' Ibor leg, i.e. the flat leg ResolvedSwapLeg iborLegExpanded = iborLeg.resolve(refData); List<SwapPaymentPeriod> periods = iborLegExpanded.getPaymentPeriods(); int nbPeriods = periods.size(); RatePaymentPeriod lastPeriod = (RatePaymentPeriod) periods.get(nbPeriods - 1); List<RateAccrualPeriod> accruals = lastPeriod.getAccrualPeriods(); int nbAccruals = accruals.size(); IborRateComputation ibor = (IborRateComputation) accruals.get(nbAccruals - 1).getRateComputation(); return ibor.getFixingDate(); }
private double rawRate(RateAccrualPeriod accrualPeriod, RatesProvider provider) { return rateComputationFn.rate( accrualPeriod.getRateComputation(), accrualPeriod.getStartDate(), accrualPeriod.getEndDate(), provider); }
private LocalDate calculateLastFixingDate(LocalDate valuationDate, ReferenceData refData) { SwapTrade trade = template.createTrade(valuationDate, BuySell.BUY, 1, 1, refData); SwapLeg iborLeg = trade.getProduct().getLegs(SwapLegType.IBOR).get(0); ResolvedSwapLeg iborLegExpanded = iborLeg.resolve(refData); List<SwapPaymentPeriod> periods = iborLegExpanded.getPaymentPeriods(); int nbPeriods = periods.size(); RatePaymentPeriod lastPeriod = (RatePaymentPeriod) periods.get(nbPeriods - 1); List<RateAccrualPeriod> accruals = lastPeriod.getAccrualPeriods(); int nbAccruals = accruals.size(); IborRateComputation ibor = (IborRateComputation) accruals.get(nbAccruals - 1).getRateComputation(); return ibor.getFixingDate(); }
private LocalDate calculateLastFixingDate(LocalDate valuationDate, ReferenceData refData) { SwapTrade trade = template.createTrade(valuationDate, BuySell.BUY, 1, 1, refData); SwapLeg iborLeg = trade.getProduct().getLegs(SwapLegType.IBOR).get(0); ResolvedSwapLeg iborLegExpanded = iborLeg.resolve(refData); List<SwapPaymentPeriod> periods = iborLegExpanded.getPaymentPeriods(); int nbPeriods = periods.size(); RatePaymentPeriod lastPeriod = (RatePaymentPeriod) periods.get(nbPeriods - 1); List<RateAccrualPeriod> accruals = lastPeriod.getAccrualPeriods(); int nbAccruals = accruals.size(); IborRateComputation ibor = (IborRateComputation) accruals.get(nbAccruals - 1).getRateComputation(); return ibor.getFixingDate(); }
private LocalDate calculateLastFixingDate(LocalDate valuationDate, ReferenceData refData) { SwapTrade trade = template.createTrade(valuationDate, BuySell.BUY, 1, 1, refData); SwapLeg iborLeg = trade.getProduct().getLegs(SwapLegType.IBOR).get(1); // Select the 'second' leg, i.e. the flat leg ResolvedSwapLeg iborLegExpanded = iborLeg.resolve(refData); List<SwapPaymentPeriod> periods = iborLegExpanded.getPaymentPeriods(); int nbPeriods = periods.size(); RatePaymentPeriod lastPeriod = (RatePaymentPeriod) periods.get(nbPeriods - 1); List<RateAccrualPeriod> accruals = lastPeriod.getAccrualPeriods(); int nbAccruals = accruals.size(); IborRateComputation ibor = (IborRateComputation) accruals.get(nbAccruals - 1).getRateComputation(); return ibor.getFixingDate(); }
private LocalDate calculateLastFixingDate(LocalDate valuationDate, ReferenceData refData) { SwapTrade trade = template.createTrade(valuationDate, BuySell.BUY, 1, 1, refData); SwapLeg inflationLeg = trade.getProduct().getLegs(SwapLegType.INFLATION).get(0); ResolvedSwapLeg inflationLegExpanded = inflationLeg.resolve(refData); List<SwapPaymentPeriod> periods = inflationLegExpanded.getPaymentPeriods(); int nbPeriods = periods.size(); RatePaymentPeriod lastPeriod = (RatePaymentPeriod) periods.get(nbPeriods - 1); List<RateAccrualPeriod> accruals = lastPeriod.getAccrualPeriods(); int nbAccruals = accruals.size(); RateAccrualPeriod lastAccrual = accruals.get(nbAccruals - 1); if (lastAccrual.getRateComputation() instanceof InflationMonthlyRateComputation) { return ((InflationMonthlyRateComputation) lastAccrual.getRateComputation()) .getEndObservation().getFixingMonth().atEndOfMonth(); } if (lastAccrual.getRateComputation() instanceof InflationInterpolatedRateComputation) { return ((InflationInterpolatedRateComputation) lastAccrual.getRateComputation()) .getEndSecondObservation().getFixingMonth().atEndOfMonth(); } if (lastAccrual.getRateComputation() instanceof InflationEndMonthRateComputation) { return ((InflationEndMonthRateComputation) lastAccrual.getRateComputation()) .getEndObservation().getFixingMonth().atEndOfMonth(); } if (lastAccrual.getRateComputation() instanceof InflationEndInterpolatedRateComputation) { return ((InflationEndInterpolatedRateComputation) lastAccrual.getRateComputation()) .getEndSecondObservation().getFixingMonth().atEndOfMonth(); } throw new IllegalArgumentException("Rate computation type not supported for last fixing date of an inflation swap."); }
private LocalDate calculateLastFixingDate(LocalDate valuationDate, ReferenceData refData) { SwapTrade trade = template.createTrade(valuationDate, BuySell.BUY, 1, 1, refData); SwapLeg iborLeg = trade.getProduct().getLegs(SwapLegType.IBOR).get(1); // Select the 'second' Ibor leg, i.e. the flat floating leg ResolvedSwapLeg iborLegExpanded = iborLeg.resolve(refData); List<SwapPaymentPeriod> periods = iborLegExpanded.getPaymentPeriods(); int nbPeriods = periods.size(); RatePaymentPeriod lastPeriod = (RatePaymentPeriod) periods.get(nbPeriods - 1); List<RateAccrualPeriod> accruals = lastPeriod.getAccrualPeriods(); int nbAccruals = accruals.size(); IborRateComputation ibor = (IborRateComputation) accruals.get(nbAccruals - 1).getRateComputation(); return ibor.getFixingDate(); }
/** * Calculates the strike. * * @param fixedLeg the fixed leg * @return the strike */ protected double calculateStrike(ResolvedSwapLeg fixedLeg) { SwapPaymentPeriod paymentPeriod = fixedLeg.getPaymentPeriods().get(0); ArgChecker.isTrue(paymentPeriod instanceof RatePaymentPeriod, "Payment period must be RatePaymentPeriod"); RatePaymentPeriod ratePaymentPeriod = (RatePaymentPeriod) paymentPeriod; // compounding is caught when par rate is computed RateComputation rateComputation = ratePaymentPeriod.getAccrualPeriods().get(0).getRateComputation(); ArgChecker.isTrue(rateComputation instanceof FixedRateComputation, "Swap leg must be fixed leg"); return ((FixedRateComputation) rateComputation).getRate(); }
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()); }
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(); } }
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(); } }
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(); } }
@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); }
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); }
@Test(dataProvider = "compoundingRatePaymentPeriod") public void test_forecastValueSensitivity_ibor_compounding(RatePaymentPeriod period) { RatesProvider mockProv = mock(RatesProvider.class); RateComputationFn<RateComputation> obsFunc = mock(RateComputationFn.class); when(mockProv.getValuationDate()).thenReturn(VAL_DATE); DiscountingRatePaymentPeriodPricer pricer = new DiscountingRatePaymentPeriodPricer(obsFunc); LocalDate[] dates = new LocalDate[] {CPN_DATE_1, CPN_DATE_2, CPN_DATE_3, CPN_DATE_4}; double[] rates = new double[] {RATE_1, RATE_2, RATE_3}; for (int i = 0; i < 3; ++i) { IborRateComputation rateObs = (IborRateComputation) period.getAccrualPeriods().get(i).getRateComputation(); IborRateSensitivity iborSense = IborRateSensitivity.of(rateObs.getObservation(), 1.0d); when(obsFunc.rateSensitivity(rateObs, dates[i], dates[i + 1], mockProv)).thenReturn(iborSense); when(obsFunc.rate(rateObs, dates[i], dates[i + 1], mockProv)).thenReturn(rates[i]); } PointSensitivities senseComputed = pricer.forecastValueSensitivity(period, mockProv).build(); List<IborRateSensitivity> senseExpectedList = futureFwdSensitivityFD(mockProv, period, obsFunc, EPS_FD); PointSensitivities senseExpected = PointSensitivities.of(senseExpectedList); assertTrue(senseComputed.equalWithTolerance(senseExpected, EPS_FD * period.getNotional())); }
/** * 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); }
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); }