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(); }
public void test_builder_minimum() { IborFixingDeposit test = IborFixingDeposit.builder() .buySell(SELL) .notional(NOTIONAL) .startDate(START_DATE) .endDate(END_DATE) .businessDayAdjustment(BDA_MOD_FOLLOW) .index(GBP_LIBOR_6M) .fixedRate(RATE) .build(); assertEquals(test.getBusinessDayAdjustment().get(), BDA_MOD_FOLLOW); assertEquals(test.getBuySell(), SELL); assertEquals(test.getFixingDateOffset(), GBP_LIBOR_6M.getFixingDateOffset()); assertEquals(test.getNotional(), NOTIONAL); assertEquals(test.getCurrency(), GBP); assertEquals(test.getDayCount(), ACT_365F); assertEquals(test.getStartDate(), START_DATE); assertEquals(test.getEndDate(), END_DATE); assertEquals(test.getIndex(), GBP_LIBOR_6M); assertEquals(test.getFixedRate(), RATE); }
/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(IborFixingDeposit beanToCopy) { this.buySell = beanToCopy.getBuySell(); this.currency = beanToCopy.getCurrency(); this.notional = beanToCopy.getNotional(); this.startDate = beanToCopy.getStartDate(); this.endDate = beanToCopy.getEndDate(); this.businessDayAdjustment = beanToCopy.businessDayAdjustment; this.index = beanToCopy.getIndex(); this.fixingDateOffset = beanToCopy.getFixingDateOffset(); this.dayCount = beanToCopy.getDayCount(); this.fixedRate = beanToCopy.getFixedRate(); }
public void test_builder_full() { IborFixingDeposit test = IborFixingDeposit.builder() .buySell(SELL) .notional(NOTIONAL) .currency(GBP) .startDate(START_DATE) .endDate(END_DATE) .businessDayAdjustment(BDA_MOD_FOLLOW) .fixingDateOffset(DAY_ADJ) .dayCount(ACT_365F) .index(GBP_LIBOR_6M) .fixedRate(RATE) .build(); assertEquals(test.getBusinessDayAdjustment().get(), BDA_MOD_FOLLOW); assertEquals(test.getBuySell(), SELL); assertEquals(test.getFixingDateOffset(), DAY_ADJ); assertEquals(test.getNotional(), NOTIONAL); assertEquals(test.getCurrency(), GBP); assertEquals(test.getDayCount(), ACT_365F); assertEquals(test.getStartDate(), START_DATE); assertEquals(test.getEndDate(), END_DATE); assertEquals(test.getIndex(), GBP_LIBOR_6M); assertEquals(test.getFixedRate(), RATE); assertEquals(test.isCrossCurrency(), false); assertEquals(test.allPaymentCurrencies(), ImmutableSet.of(GBP)); assertEquals(test.allCurrencies(), ImmutableSet.of(GBP)); }
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); }
public void test_parSpread_noFixing() { double parSpread = PRICER.parSpread(RDEPOSIT, IMM_PROV_NOFIX); IborFixingDeposit deposit0 = DEPOSIT.toBuilder().fixedRate(RATE + parSpread).build(); CurrencyAmount pv0 = PRICER.presentValue(deposit0.resolve(REF_DATA), IMM_PROV_NOFIX); assertEquals(pv0.getAmount(), 0, TOLERANCE_RATE); double parSpread2 = PRICER.parSpread(RDEPOSIT, IMM_PROV_NOFIX); assertEquals(parSpread, parSpread2, TOLERANCE_RATE); }
public void test_builder_wrongDates() { assertThrowsIllegalArg(() -> IborFixingDeposit.builder() .buySell(SELL) .notional(NOTIONAL) .startDate(LocalDate.of(2015, 9, 19)) .endDate(END_DATE) .businessDayAdjustment(BDA_MOD_FOLLOW) .index(GBP_LIBOR_6M) .fixedRate(RATE) .build()); }
@Override public ResolvedIborFixingDeposit resolve(ReferenceData refData) { DateAdjuster bda = getBusinessDayAdjustment().orElse(BusinessDayAdjustment.NONE).resolve(refData); LocalDate start = bda.adjust(startDate); LocalDate end = bda.adjust(endDate); double yearFraction = dayCount.yearFraction(start, end); LocalDate fixingDate = fixingDateOffset.adjust(startDate, refData); return ResolvedIborFixingDeposit.builder() .startDate(start) .endDate(end) .yearFraction(yearFraction) .currency(getCurrency()) .notional(buySell.normalize(notional)) .floatingRate(IborRateComputation.of(index, fixingDate, refData)) .fixedRate(fixedRate) .build(); }
@Override public PortfolioItemSummary summarize() { String description = "Ibor calibration trade"; return SummarizerUtils.summary(this, ProductType.CALIBRATION, description, product.getCurrency()); }
public void test_parRate() { double parRate = PRICER.parRate(RDEPOSIT, IMM_PROV_NOFIX); IborFixingDeposit deposit0 = DEPOSIT.toBuilder().fixedRate(parRate).build(); CurrencyAmount pv0 = PRICER.presentValue(deposit0.resolve(REF_DATA), IMM_PROV_NOFIX); assertEquals(pv0.getAmount(), 0, TOLERANCE_RATE); double parRate2 = PRICER.parRate(RDEPOSIT, IMM_PROV_NOFIX); assertEquals(parRate, parRate2, TOLERANCE_RATE); }
@Override public IborFixingDepositTrade toTrade( TradeInfo tradeInfo, LocalDate startDate, LocalDate endDate, BuySell buySell, double notional, double fixedRate) { Optional<LocalDate> tradeDate = tradeInfo.getTradeDate(); if (tradeDate.isPresent()) { ArgChecker.inOrderOrEqual(tradeDate.get(), startDate, "tradeDate", "startDate"); } return IborFixingDepositTrade.builder() .info(tradeInfo) .product(IborFixingDeposit.builder() .buySell(buySell) .currency(getCurrency()) .notional(notional) .startDate(startDate) .endDate(endDate) .businessDayAdjustment(getBusinessDayAdjustment()) .fixedRate(fixedRate) .index(index) .fixingDateOffset(getFixingDateOffset()) .dayCount(getDayCount()) .build()) .build(); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 244977400: // buySell return ((IborFixingDeposit) bean).getBuySell(); case 575402001: // currency return ((IborFixingDeposit) bean).getCurrency(); case 1585636160: // notional return ((IborFixingDeposit) bean).getNotional(); case -2129778896: // startDate return ((IborFixingDeposit) bean).getStartDate(); case -1607727319: // endDate return ((IborFixingDeposit) bean).getEndDate(); case -1065319863: // businessDayAdjustment return ((IborFixingDeposit) bean).businessDayAdjustment; case 100346066: // index return ((IborFixingDeposit) bean).getIndex(); case 873743726: // fixingDateOffset return ((IborFixingDeposit) bean).getFixingDateOffset(); case 1905311443: // dayCount return ((IborFixingDeposit) bean).getDayCount(); case 747425396: // fixedRate return ((IborFixingDeposit) bean).getFixedRate(); } return super.propertyGet(bean, propertyName, quiet); }
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(); }
public void coverage() { IborFixingDeposit test1 = IborFixingDeposit.builder() .buySell(SELL) .notional(NOTIONAL) .startDate(START_DATE) .endDate(END_DATE) .businessDayAdjustment(BDA_MOD_FOLLOW) .index(GBP_LIBOR_6M) .fixedRate(RATE) .build(); coverImmutableBean(test1); IborFixingDeposit test2 = IborFixingDeposit.builder() .buySell(BuySell.BUY) .notional(NOTIONAL) .startDate(LocalDate.of(2015, 1, 19)) .endDate(LocalDate.of(2015, 4, 19)) .businessDayAdjustment(BDA_MOD_FOLLOW) .index(GBP_LIBOR_3M) .fixedRate(0.015) .build(); coverBeanEquals(test1, test2); }
@Override public ResolvedIborFixingDepositTrade resolve(ReferenceData refData) { return ResolvedIborFixingDepositTrade.builder() .info(info) .product(product.resolve(refData)) .build(); }
public void test_serialization() { IborFixingDeposit test = IborFixingDeposit.builder() .buySell(SELL) .notional(NOTIONAL) .startDate(START_DATE) .endDate(END_DATE) .businessDayAdjustment(BDA_MOD_FOLLOW) .index(GBP_LIBOR_6M) .fixedRate(RATE) .build(); assertSerialization(test); }
public void test_resolve() { IborFixingDepositTrade test = IborFixingDepositTrade.of(TRADE_INFO, DEPOSIT); assertEquals(test.resolve(REF_DATA).getInfo(), TRADE_INFO); assertEquals(test.resolve(REF_DATA).getProduct(), DEPOSIT.resolve(REF_DATA)); }
public void test_createTrade() { IborFixingDepositTemplate template = IborFixingDepositTemplate.of(EUR_LIBOR_3M); double notional = 1d; double fixedRate = 0.045; LocalDate tradeDate = LocalDate.of(2015, 1, 22); IborFixingDepositTrade trade = template.createTrade(tradeDate, BUY, notional, fixedRate, REF_DATA); ImmutableIborFixingDepositConvention conv = (ImmutableIborFixingDepositConvention) template.getConvention(); LocalDate startExpected = conv.getSpotDateOffset().adjust(tradeDate, REF_DATA); LocalDate endExpected = startExpected.plus(template.getDepositPeriod()); IborFixingDeposit productExpected = IborFixingDeposit.builder() .businessDayAdjustment(conv.getBusinessDayAdjustment()) .buySell(BUY) .startDate(startExpected) .endDate(endExpected) .fixedRate(fixedRate) .index(EUR_LIBOR_3M) .notional(notional) .build(); TradeInfo tradeInfoExpected = TradeInfo.builder() .tradeDate(tradeDate) .build(); assertEquals(trade.getInfo(), tradeInfoExpected); assertEquals(trade.getProduct(), productExpected); }
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_trade() { IborFixingDepositCurveNode node = IborFixingDepositCurveNode.of(TEMPLATE, QUOTE_ID, SPREAD); LocalDate valuationDate = LocalDate.of(2015, 1, 22); double rate = 0.035; MarketData marketData = ImmutableMarketData.builder(valuationDate).addValue(QUOTE_ID, rate).build(); IborFixingDepositTrade trade = node.trade(1d, marketData, REF_DATA); ImmutableIborFixingDepositConvention conv = (ImmutableIborFixingDepositConvention) TEMPLATE.getConvention(); LocalDate startDateExpected = conv.getSpotDateOffset().adjust(valuationDate, REF_DATA); LocalDate endDateExpected = startDateExpected.plus(TEMPLATE.getDepositPeriod()); IborFixingDeposit depositExpected = IborFixingDeposit.builder() .buySell(BuySell.BUY) .index(EUR_LIBOR_3M) .startDate(startDateExpected) .endDate(endDateExpected) .businessDayAdjustment(BusinessDayAdjustment.of(MODIFIED_FOLLOWING, EUR_LIBOR_3M.getFixingCalendar())) .notional(1.0d) .fixedRate(rate + SPREAD) .build(); TradeInfo tradeInfoExpected = TradeInfo.builder() .tradeDate(valuationDate) .build(); assertEquals(trade.getProduct(), depositExpected); assertEquals(trade.getInfo(), tradeInfoExpected); }