private LocalDate calculateEnd(LocalDate valuationDate, ReferenceData refData) { IborFixingDepositTrade trade = template.createTrade(valuationDate, BuySell.BUY, 0d, 0d, refData); ResolvedIborFixingDeposit deposit = trade.getProduct().resolve(refData); return deposit.getEndDate(); }
/** * 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); }
/** * Calculates the present value of the Ibor fixing deposit product. * <p> * The present value of the product is the value on the valuation date. * * @param deposit the product * @param provider the rates provider * @return the present value of the product */ public CurrencyAmount presentValue(ResolvedIborFixingDeposit deposit, RatesProvider provider) { Currency currency = deposit.getCurrency(); if (provider.getValuationDate().isAfter(deposit.getEndDate())) { return CurrencyAmount.of(currency, 0.0d); } double forwardRate = forwardRate(deposit, provider); double discountFactor = provider.discountFactor(currency, deposit.getEndDate()); double fv = deposit.getNotional() * deposit.getYearFraction() * (deposit.getFixedRate() - forwardRate); double pv = discountFactor * fv; return CurrencyAmount.of(currency, pv); }
/** * Calculates the present value sensitivity of the Ibor fixing product. * <p> * The present value sensitivity of the product is the sensitivity of the present value to * the underlying curves. * * @param deposit the product * @param provider the rates provider * @return the point sensitivity of the present value */ public PointSensitivities presentValueSensitivity(ResolvedIborFixingDeposit deposit, RatesProvider provider) { double forwardRate = forwardRate(deposit, provider); DiscountFactors discountFactors = provider.discountFactors(deposit.getCurrency()); double discountFactor = discountFactors.discountFactor(deposit.getEndDate()); // sensitivity PointSensitivityBuilder sensiFwd = forwardRateSensitivity(deposit, provider) .multipliedBy(-discountFactor * deposit.getNotional() * deposit.getYearFraction()); PointSensitivityBuilder sensiDsc = discountFactors.zeroRatePointSensitivity(deposit.getEndDate()) .multipliedBy(deposit.getNotional() * deposit.getYearFraction() * (deposit.getFixedRate() - forwardRate)); return sensiFwd.combinedWith(sensiDsc).build(); }
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_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); }