public void test_builder() { TermDeposit test = TermDeposit.builder() .buySell(SELL) .startDate(START_DATE) .endDate(END_DATE) .businessDayAdjustment(BDA_MOD_FOLLOW) .dayCount(ACT_365F) .notional(NOTIONAL) .currency(GBP) .rate(RATE) .build(); assertEquals(test.getBuySell(), SELL); assertEquals(test.getStartDate(), START_DATE); assertEquals(test.getEndDate(), END_DATE); assertEquals(test.getBusinessDayAdjustment().get(), BDA_MOD_FOLLOW); assertEquals(test.getDayCount(), ACT_365F); assertEquals(test.getNotional(), NOTIONAL); assertEquals(test.getRate(), RATE); assertEquals(test.getCurrency(), GBP); assertEquals(test.isCrossCurrency(), false); assertEquals(test.allPaymentCurrencies(), ImmutableSet.of(GBP)); assertEquals(test.allCurrencies(), ImmutableSet.of(GBP)); }
private LocalDate calculateEnd(LocalDate valuationDate, ReferenceData refData) { TermDepositTrade trade = template.createTrade(valuationDate, BuySell.BUY, 0d, 0d, refData); ResolvedTermDeposit deposit = trade.getProduct().resolve(refData); return deposit.getEndDate(); }
/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(TermDeposit 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.dayCount = beanToCopy.getDayCount(); this.rate = beanToCopy.getRate(); }
public void test_resolve() { TermDeposit base = TermDeposit.builder() .buySell(SELL) .startDate(START_DATE) .endDate(END_DATE) .businessDayAdjustment(BDA_MOD_FOLLOW) .dayCount(ACT_365F) .notional(NOTIONAL) .currency(GBP) .rate(RATE) .build(); ResolvedTermDeposit test = base.resolve(REF_DATA); LocalDate expectedEndDate = BDA_MOD_FOLLOW.adjust(END_DATE, REF_DATA); double expectedYearFraction = ACT_365F.yearFraction(START_DATE, expectedEndDate); assertEquals(test.getStartDate(), START_DATE); assertEquals(test.getEndDate(), expectedEndDate); assertEquals(test.getNotional(), -NOTIONAL); assertEquals(test.getYearFraction(), expectedYearFraction, EPS); assertEquals(test.getInterest(), -RATE * expectedYearFraction * NOTIONAL, NOTIONAL * EPS); assertEquals(test.getRate(), RATE); assertEquals(test.getCurrency(), GBP); }
Currency currency = currencyOpt.get(); DayCount dayCount = dayCountOpt.get(); TermDeposit.Builder builder = TermDeposit.builder() .buySell(buySell) .currency(currency)
@Override public ResolvedTermDeposit 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); return ResolvedTermDeposit.builder() .startDate(start) .endDate(end) .yearFraction(yearFraction) .currency(getCurrency()) .notional(buySell.normalize(notional)) .rate(rate) .build(); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 244977400: // buySell return ((TermDeposit) bean).getBuySell(); case 575402001: // currency return ((TermDeposit) bean).getCurrency(); case 1585636160: // notional return ((TermDeposit) bean).getNotional(); case -2129778896: // startDate return ((TermDeposit) bean).getStartDate(); case -1607727319: // endDate return ((TermDeposit) bean).getEndDate(); case -1065319863: // businessDayAdjustment return ((TermDeposit) bean).businessDayAdjustment; case 1905311443: // dayCount return ((TermDeposit) bean).getDayCount(); case 3493088: // rate return ((TermDeposit) bean).getRate(); } return super.propertyGet(bean, propertyName, quiet); }
public void test_parSpread() { SimpleRatesProvider prov = provider(VAL_DATE, DF_START, DF_END); double parSpread = PRICER.parSpread(RTERM_DEPOSIT, prov); TermDeposit depositPar = TermDeposit.builder() .buySell(BuySell.BUY) .startDate(START_DATE) .endDate(END_DATE) .businessDayAdjustment(BD_ADJ) .dayCount(ACT_360) .notional(NOTIONAL) .currency(EUR) .rate(RATE + parSpread) .build(); double pvPar = PRICER.presentValue(depositPar.resolve(REF_DATA), prov).getAmount(); assertEquals(pvPar, 0.0, NOTIONAL * TOLERANCE); }
@Override public TermDepositTrade toTrade( TradeInfo tradeInfo, LocalDate startDate, LocalDate endDate, BuySell buySell, double notional, double rate) { Optional<LocalDate> tradeDate = tradeInfo.getTradeDate(); if (tradeDate.isPresent()) { ArgChecker.inOrderOrEqual(tradeDate.get(), startDate, "tradeDate", "startDate"); } return TermDepositTrade.builder() .info(tradeInfo) .product(TermDeposit.builder() .buySell(buySell) .currency(currency) .notional(notional) .startDate(startDate) .endDate(endDate) .businessDayAdjustment(businessDayAdjustment) .rate(rate) .dayCount(dayCount) .build()) .build(); }
@Override public PortfolioItemSummary summarize() { // 6M USD 2mm Deposit 0.8% : 21Jan18-21Jul18 StringBuilder buf = new StringBuilder(64); buf.append(SummarizerUtils.datePeriod(product.getStartDate(), product.getEndDate())); buf.append(' '); buf.append(SummarizerUtils.amount(product.getCurrency(), product.getNotional())); buf.append(' '); buf.append(product.getBuySell() == BuySell.BUY ? "Deposit " : "Loan "); buf.append(SummarizerUtils.percent(product.getRate())); buf.append(" : "); buf.append(SummarizerUtils.dateRange(product.getStartDate(), product.getEndDate())); return SummarizerUtils.summary(this, ProductType.TERM_DEPOSIT, buf.toString(), product.getCurrency()); }
public void test_parRate() { SimpleRatesProvider prov = provider(VAL_DATE, DF_START, DF_END); double parRate = PRICER.parRate(RTERM_DEPOSIT, prov); TermDeposit depositPar = TermDeposit.builder() .buySell(BuySell.BUY) .startDate(START_DATE) .endDate(END_DATE) .businessDayAdjustment(BD_ADJ) .dayCount(ACT_360) .notional(NOTIONAL) .currency(EUR) .rate(parRate) .build(); double pvPar = PRICER.presentValue(depositPar.resolve(REF_DATA), prov).getAmount(); assertEquals(pvPar, 0.0, NOTIONAL * TOLERANCE); }
public void test_builder_wrongDates() { assertThrowsIllegalArg(() -> TermDeposit.builder() .buySell(SELL) .startDate(START_DATE) .endDate(LocalDate.of(2014, 10, 19)) .businessDayAdjustment(BDA_MOD_FOLLOW) .dayCount(ACT_365F) .notional(NOTIONAL) .currency(EUR) .rate(RATE) .build()); }
@Override public ResolvedTermDepositTrade resolve(ReferenceData refData) { return ResolvedTermDepositTrade.builder() .info(info) .product(product.resolve(refData)) .build(); }
public void termDeposit() { String location = "classpath:com/opengamma/strata/loader/fpml/td-ex01-simple-term-deposit.xml"; ByteSource resource = ResourceLocator.of(location).getByteSource(); List<Trade> trades = FpmlDocumentParser.of(FpmlPartySelector.matching("Party1")).parseTrades(resource); assertEquals(trades.size(), 1); Trade trade = trades.get(0); assertEquals(trade.getClass(), TermDepositTrade.class); TermDepositTrade tdTrade = (TermDepositTrade) trade; assertEquals(tdTrade.getInfo().getTradeDate(), Optional.of(date(2002, 2, 14))); TermDeposit td = tdTrade.getProduct(); assertEquals(td.getBuySell(), BUY); assertEquals(td.getStartDate(), date(2002, 2, 14)); assertEquals(td.getEndDate(), date(2002, 2, 15)); assertEquals(td.getCurrency(), CHF); assertEquals(td.getNotional(), 25000000d); assertEquals(td.getRate(), 0.04); assertEquals(td.getDayCount(), ACT_360); }
public void coverage() { TermDeposit test1 = TermDeposit.builder() .buySell(SELL) .startDate(START_DATE) .endDate(END_DATE) .businessDayAdjustment(BDA_MOD_FOLLOW) .dayCount(ACT_365F) .notional(NOTIONAL) .currency(GBP) .rate(RATE) .build(); coverImmutableBean(test1); TermDeposit test2 = TermDeposit.builder() .buySell(BuySell.BUY) .startDate(LocalDate.of(2015, 1, 21)) .endDate(LocalDate.of(2015, 7, 21)) .dayCount(ACT_360) .notional(NOTIONAL) .currency(EUR) .rate(RATE) .build(); coverBeanEquals(test1, test2); }
public void test_resolve() { TermDepositTrade test = TermDepositTrade.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_serialization() { TermDeposit test = TermDeposit.builder() .buySell(SELL) .startDate(START_DATE) .endDate(END_DATE) .businessDayAdjustment(BDA_MOD_FOLLOW) .dayCount(ACT_365F) .notional(NOTIONAL) .currency(GBP) .rate(RATE) .build(); assertSerialization(test); }
public void test_trade() { TermDepositCurveNode node = TermDepositCurveNode.of(TEMPLATE, QUOTE_ID, SPREAD); double rate = 0.035; MarketData marketData = ImmutableMarketData.builder(VAL_DATE).addValue(QUOTE_ID, rate).build(); TermDepositTrade trade = node.trade(1d, marketData, REF_DATA); LocalDate startDateExpected = PLUS_TWO_DAYS.adjust(VAL_DATE, REF_DATA); LocalDate endDateExpected = startDateExpected.plus(DEPOSIT_PERIOD); TermDeposit depositExpected = TermDeposit.builder() .buySell(BuySell.BUY) .currency(EUR) .dayCount(ACT_360) .startDate(startDateExpected) .endDate(endDateExpected) .notional(1.0d) .businessDayAdjustment(BDA_MOD_FOLLOW) .rate(rate + SPREAD) .build(); TradeInfo tradeInfoExpected = TradeInfo.builder() .tradeDate(VAL_DATE) .build(); assertEquals(trade.getProduct(), depositExpected); assertEquals(trade.getInfo(), tradeInfoExpected); }
document.validateNotPresent(termEl, "features"); document.validateNotPresent(termEl, "payment"); TermDeposit.Builder termBuilder = TermDeposit.builder();