private double forwardRate(ResolvedIborFixingDeposit product, RatesProvider provider) { IborIndexRates rates = provider.iborIndexRates(product.getFloatingRate().getIndex()); // The IborFixingDeposit are fictitious instruments to anchor the beginning of the IborIndex forward curve. // By using the 'rateIgnoringTimeSeries' method (instead of 'rate') we ensure that only the forward curve is involved. return rates.rateIgnoringFixings(product.getFloatingRate().getObservation()); }
private PointSensitivityBuilder forwardRateSensitivity(ResolvedIborFixingDeposit product, RatesProvider provider) { IborIndexRates rates = provider.iborIndexRates(product.getFloatingRate().getIndex()); return rates.rateIgnoringFixingsPointSensitivity(product.getFloatingRate().getObservation()); }
private LocalDate calculateLastFixingDate(LocalDate valuationDate, ReferenceData refData) { IborFixingDepositTrade trade = template.createTrade(valuationDate, BuySell.BUY, 0d, 0d, refData); ResolvedIborFixingDeposit deposit = trade.getProduct().resolve(refData); return deposit.getFloatingRate().getFixingDate(); }
/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(ResolvedIborFixingDeposit beanToCopy) { this.currency = beanToCopy.getCurrency(); this.notional = beanToCopy.getNotional(); this.startDate = beanToCopy.getStartDate(); this.endDate = beanToCopy.getEndDate(); this.yearFraction = beanToCopy.getYearFraction(); this.fixedRate = beanToCopy.getFixedRate(); this.floatingRate = beanToCopy.getFloatingRate(); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 575402001: // currency return ((ResolvedIborFixingDeposit) bean).getCurrency(); case 1585636160: // notional return ((ResolvedIborFixingDeposit) bean).getNotional(); case -2129778896: // startDate return ((ResolvedIborFixingDeposit) bean).getStartDate(); case -1607727319: // endDate return ((ResolvedIborFixingDeposit) bean).getEndDate(); case -1731780257: // yearFraction return ((ResolvedIborFixingDeposit) bean).getYearFraction(); case 747425396: // fixedRate return ((ResolvedIborFixingDeposit) bean).getFixedRate(); case -2130225658: // floatingRate return ((ResolvedIborFixingDeposit) bean).getFloatingRate(); } return super.propertyGet(bean, propertyName, quiet); }
public void test_presentValue_noFixing() { double discountFactor = IMM_PROV_NOFIX.discountFactor(EUR, END_DATE); double forwardRate = IMM_PROV_NOFIX.iborIndexRates(EUR_EURIBOR_6M).rate(RDEPOSIT.getFloatingRate().getObservation()); CurrencyAmount computed = PRICER.presentValue(RDEPOSIT, IMM_PROV_NOFIX); double expected = NOTIONAL * discountFactor * (RATE - forwardRate) * RDEPOSIT.getYearFraction(); assertEquals(computed.getCurrency(), EUR); assertEquals(computed.getAmount(), expected, TOLERANCE_PV); }
public void test_builder() { ResolvedIborFixingDeposit test = ResolvedIborFixingDeposit.builder() .currency(GBP) .notional(NOTIONAL) .startDate(START_DATE) .endDate(END_DATE) .yearFraction(YEAR_FRACTION) .floatingRate(RATE_COMP) .fixedRate(RATE) .build(); assertEquals(test.getCurrency(), GBP); assertEquals(test.getNotional(), NOTIONAL); assertEquals(test.getStartDate(), START_DATE); assertEquals(test.getEndDate(), END_DATE); assertEquals(test.getYearFraction(), YEAR_FRACTION); assertEquals(test.getFloatingRate(), RATE_COMP); assertEquals(test.getFixedRate(), RATE); }
public void test_metadata_last_fixing() { IborFixingDepositCurveNode node = IborFixingDepositCurveNode.of(TEMPLATE, QUOTE_ID, SPREAD).withDate(CurveNodeDate.LAST_FIXING); ImmutableMarketData marketData = ImmutableMarketData.builder(VAL_DATE).addValue(QUOTE_ID, 0.0d).build(); IborFixingDepositTrade trade = node.trade(1d, marketData, REF_DATA); ResolvedIborFixingDeposit product = trade.getProduct().resolve(REF_DATA); LocalDate fixingDate = ((IborRateComputation) product.getFloatingRate()).getFixingDate(); DatedParameterMetadata metadata = node.metadata(VAL_DATE, REF_DATA); assertEquals(((TenorDateParameterMetadata) metadata).getDate(), fixingDate); assertEquals(((TenorDateParameterMetadata) metadata).getTenor().getPeriod(), TEMPLATE.getDepositPeriod()); }
public void test_resolve() { IborFixingDeposit base = IborFixingDeposit.builder() .buySell(SELL) .notional(NOTIONAL) .startDate(START_DATE) .endDate(END_DATE) .businessDayAdjustment(BDA_MOD_FOLLOW) .index(GBP_LIBOR_6M) .fixedRate(RATE) .build(); ResolvedIborFixingDeposit test = base.resolve(REF_DATA); LocalDate expectedEndDate = BDA_MOD_FOLLOW.adjust(END_DATE, REF_DATA); double expectedYearFraction = ACT_365F.yearFraction(START_DATE, expectedEndDate); IborRateComputation expectedObservation = IborRateComputation.of( GBP_LIBOR_6M, GBP_LIBOR_6M.getFixingDateOffset().adjust(START_DATE, REF_DATA), REF_DATA); assertEquals(test.getCurrency(), GBP); assertEquals(test.getStartDate(), START_DATE); assertEquals(test.getEndDate(), expectedEndDate); assertEquals(test.getFloatingRate(), expectedObservation); assertEquals(test.getNotional(), -NOTIONAL); assertEquals(test.getFixedRate(), RATE); assertEquals(test.getYearFraction(), expectedYearFraction); }