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(); }
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 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 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(); }
/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(ResolvedSwapLeg beanToCopy) { this.type = beanToCopy.getType(); this.payReceive = beanToCopy.getPayReceive(); this.paymentPeriods = beanToCopy.getPaymentPeriods(); this.paymentEvents = beanToCopy.getPaymentEvents(); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 3575610: // type return ((ResolvedSwapLeg) bean).getType(); case -885469925: // payReceive return ((ResolvedSwapLeg) bean).getPayReceive(); case -1674414612: // paymentPeriods return ((ResolvedSwapLeg) bean).getPaymentPeriods(); case 1031856831: // paymentEvents return ((ResolvedSwapLeg) bean).getPaymentEvents(); } return super.propertyGet(bean, propertyName, quiet); }
/** * 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(); }
double presentValuePeriodsInternal(ResolvedSwapLeg leg, RatesProvider provider) { double total = 0d; for (SwapPaymentPeriod period : leg.getPaymentPeriods()) { if (!period.getPaymentDate().isBefore(provider.getValuationDate())) { total += paymentPeriodPricer.presentValue(period, provider); } } return total; }
private double currentCashPeriodsInternal(ResolvedSwapLeg leg, RatesProvider provider) { double total = 0d; for (SwapPaymentPeriod period : leg.getPaymentPeriods()) { if (!period.getPaymentDate().isBefore(provider.getValuationDate())) { total += paymentPeriodPricer.currentCash(period, provider); } } return total; }
double forecastValuePeriodsInternal(ResolvedSwapLeg leg, RatesProvider provider) { double total = 0d; for (SwapPaymentPeriod period : leg.getPaymentPeriods()) { if (!period.getPaymentDate().isBefore(provider.getValuationDate())) { total += paymentPeriodPricer.forecastValue(period, provider); } } return total; }
public void test_currentCash_payPeriod() { ResolvedSwapLeg expSwapLeg = FIXED_SWAP_LEG_PAY_USD; LocalDate paymentDate = expSwapLeg.getPaymentPeriods().get(0).getPaymentDate(); RatesProvider prov = new MockRatesProvider(paymentDate); SwapPaymentPeriodPricer<SwapPaymentPeriod> mockPeriod = mock(SwapPaymentPeriodPricer.class); double expected = 1234d; when(mockPeriod.currentCash(expSwapLeg.getPaymentPeriods().get(0), prov)).thenReturn(expected); DiscountingSwapLegPricer pricer = new DiscountingSwapLegPricer(mockPeriod, SwapPaymentEventPricer.standard()); CurrencyAmount computed = pricer.currentCash(expSwapLeg, prov); assertEquals(computed, CurrencyAmount.of(expSwapLeg.getCurrency(), expected)); }
private MultiCurrencyAmount currencyExposurePeriodsInternal(ResolvedSwapLeg leg, RatesProvider provider) { MultiCurrencyAmount total = MultiCurrencyAmount.empty(); for (SwapPaymentPeriod period : leg.getPaymentPeriods()) { if (!period.getPaymentDate().isBefore(provider.getValuationDate())) { total = total.plus(paymentPeriodPricer.currencyExposure(period, provider)); } } return total; }
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_presentValue_inflation() { DiscountingSwapLegPricer pricerLeg = DiscountingSwapLegPricer.DEFAULT; DiscountingSwapProductPricer pricerSwap = new DiscountingSwapProductPricer(pricerLeg); LocalDate paymentDate = SWAP_INFLATION.getLegs().get(0).getPaymentPeriods().get(0).getPaymentDate(); double fixedRate = INFLATION_FIXED_SWAP_LEG_PAY_GBP_FIXED_RATE; MultiCurrencyAmount pvComputed = pricerSwap.presentValue(SWAP_INFLATION, RATES_GBP_INFLATION); double pvExpected = (-(INDEX_VALUES[0] / START_INDEX - 1.0) + Math.pow(1 + fixedRate, 5) - 1.0) * NOTIONAL * RATES_GBP_INFLATION.discountFactor(GBP, paymentDate); assertTrue(pvComputed.getCurrencies().size() == 1); assertEquals(pvComputed.getAmount(GBP).getAmount(), pvExpected, NOTIONAL * TOLERANCE_RATE); }
PointSensitivityBuilder presentValueSensitivityPeriodsInternal(ResolvedSwapLeg leg, RatesProvider provider) { PointSensitivityBuilder builder = PointSensitivityBuilder.none(); for (SwapPaymentPeriod period : leg.getPaymentPeriods()) { if (!period.getPaymentDate().isBefore(provider.getValuationDate())) { builder = builder.combinedWith(paymentPeriodPricer.presentValueSensitivity(period, provider)); } } return builder; }
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_forecastValueSensitivity() { ResolvedSwapLeg expSwapLeg = IBOR_SWAP_LEG_REC_GBP; PointSensitivityBuilder sensiPeriod = IborRateSensitivity.of(IBOR_RATE_COMP.getObservation(), 140.0); PointSensitivities expected = sensiPeriod.build(); SwapPaymentPeriodPricer<SwapPaymentPeriod> mockPeriod = mock(SwapPaymentPeriodPricer.class); SwapPaymentEventPricer<SwapPaymentEvent> mockEvent = mock(SwapPaymentEventPricer.class); when(mockPeriod.forecastValueSensitivity(expSwapLeg.getPaymentPeriods().get(0), MOCK_PROV)) .thenReturn(sensiPeriod); when(mockEvent.forecastValueSensitivity(expSwapLeg.getPaymentEvents().get(0), MOCK_PROV)) .thenReturn(PointSensitivityBuilder.none()); DiscountingSwapLegPricer test = new DiscountingSwapLegPricer(mockPeriod, mockEvent); PointSensitivities res = test.forecastValueSensitivity(expSwapLeg, MOCK_PROV).build(); assertTrue(res.equalWithTolerance(expected, TOLERANCE)); }
public void test_builder() { ResolvedSwapLeg test = ResolvedSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1) .paymentEvents(NOTIONAL_EXCHANGE) .build(); assertEquals(test.getType(), IBOR); assertEquals(test.getPayReceive(), RECEIVE); assertEquals(test.getStartDate(), DATE_2014_06_30); assertEquals(test.getEndDate(), DATE_2014_09_30); assertEquals(test.getCurrency(), GBP); assertEquals(test.getPaymentPeriods(), ImmutableList.of(RPP1)); assertEquals(test.getPaymentEvents(), ImmutableList.of(NOTIONAL_EXCHANGE)); }