/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(IborFutureTrade beanToCopy) { this.info = beanToCopy.getInfo(); this.product = beanToCopy.getProduct(); this.quantity = beanToCopy.getQuantity(); this.price = beanToCopy.getPrice(); }
@Override public ResolvedIborFutureTrade resolvedTrade(double quantity, MarketData marketData, ReferenceData refData) { return trade(quantity, marketData, refData).resolve(refData); }
@Override public IborFutureTrade build() { return new IborFutureTrade( info, product, quantity, price); }
@Override public PortfolioItemSummary summarize() { // ID x 200 String description = getSecurityId().getStandardId().getValue() + " x " + SummarizerUtils.value(getQuantity()); return SummarizerUtils.summary(this, ProductType.IBOR_FUTURE, description, getCurrency()); }
public void test_builder() { IborFutureTrade test = sut(); assertEquals(test.getInfo(), TRADE_INFO); assertEquals(test.getProduct(), PRODUCT); assertEquals(test.getPrice(), PRICE); assertEquals(test.getQuantity(), QUANTITY); assertEquals(test.withInfo(TRADE_INFO).getInfo(), TRADE_INFO); assertEquals(test.withQuantity(0.9129).getQuantity(), 0.9129d, 1e-10); assertEquals(test.withPrice(0.9129).getPrice(), 0.9129d, 1e-10); }
public void test_toTrade() { LocalDate date = LocalDate.of(2015, 10, 20); Period start = Period.ofMonths(2); int number = 2; // Future should be 20 Dec 15 + 2 IMM = effective 15-Jun-2016, fixing 13-Jun-2016 IborFutureConvention convention = ImmutableIborFutureConvention.of(USD_LIBOR_3M, QUARTERLY_IMM); double quantity = 3; double price = 0.99; SecurityId secId = SecurityId.of("OG-Future", "GBP-LIBOR-3M-Jun16"); IborFutureTrade trade = convention.createTrade(date, secId, start, number, quantity, NOTIONAL_1M, price, REF_DATA); assertEquals(trade.getProduct().getFixingDate(), LocalDate.of(2016, 6, 13)); assertEquals(trade.getProduct().getIndex(), USD_LIBOR_3M); assertEquals(trade.getProduct().getNotional(), NOTIONAL_1M); assertEquals(trade.getProduct().getAccrualFactor(), 0.25); assertEquals(trade.getQuantity(), quantity); assertEquals(trade.getPrice(), price); }
@Override public ResolvedIborFutureTrade resolve(ReferenceData refData) { if (!info.getTradeDate().isPresent()) { throw new IllegalArgumentException("Trade date on TradeInfo must be present"); } ResolvedIborFuture resolved = getProduct().resolve(refData); TradedPrice tradedPrice = TradedPrice.of(info.getTradeDate().get(), price); return new ResolvedIborFutureTrade(info, resolved, quantity, tradedPrice); }
static IborFutureTrade sut2() { return IborFutureTrade.builder() .product(PRODUCT2) .quantity(QUANTITY2) .price(PRICE2) .build(); }
public void test_withQuantity() { IborFutureTrade base = sut(); double quantity = 65243; IborFutureTrade computed = base.withQuantity(quantity); IborFutureTrade expected = IborFutureTrade.builder() .info(TRADE_INFO) .product(PRODUCT) .quantity(quantity) .price(PRICE) .build(); assertEquals(computed, expected); }
public void test_withPrice() { IborFutureTrade base = sut(); double price = 0.95; IborFutureTrade computed = base.withPrice(price); IborFutureTrade expected = IborFutureTrade.builder() .info(TRADE_INFO) .product(PRODUCT) .quantity(QUANTITY) .price(price) .build(); assertEquals(computed, expected); }
private LocalDate calculateLastFixingDate(LocalDate valuationDate, ReferenceData refData) { SecurityId secId = SecurityId.of(rateId.getStandardId()); // quote must also be security IborFutureTrade trade = template.createTrade(valuationDate, secId, 1, 1, 1, refData); return trade.getProduct().getFixingDate(); }
static IborFutureTrade sut() { return IborFutureTrade.builder() .info(TRADE_INFO) .product(PRODUCT) .quantity(QUANTITY) .price(PRICE) .build(); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 3237038: // info return ((IborFutureTrade) bean).getInfo(); case -309474065: // product return ((IborFutureTrade) bean).getProduct(); case -1285004149: // quantity return ((IborFutureTrade) bean).getQuantity(); case 106934601: // price return ((IborFutureTrade) bean).getPrice(); } return super.propertyGet(bean, propertyName, quiet); }
public void test_metadata_last_fixing() { IborFutureCurveNode node = IborFutureCurveNode.of(TEMPLATE, QUOTE_ID, SPREAD, LABEL).withDate(CurveNodeDate.LAST_FIXING); ImmutableMarketData marketData = ImmutableMarketData.builder(VAL_DATE).addValue(QUOTE_ID, 0.0d).build(); IborFutureTrade trade = node.trade(1d, marketData, REF_DATA); LocalDate fixingDate = trade.getProduct().getFixingDate(); DatedParameterMetadata metadata = node.metadata(VAL_DATE, REF_DATA); assertEquals(metadata.getDate(), fixingDate); LocalDate referenceDate = TEMPLATE.calculateReferenceDateFromTradeDate(VAL_DATE, REF_DATA); assertEquals(((YearMonthDateParameterMetadata) metadata).getYearMonth(), YearMonth.from(referenceDate)); }
private IborFutureTrade createTrade( LocalDate tradeDate, SecurityId securityId, double quantity, double notional, double price, YearMonth yearMonth, LocalDate lastTradeDate, LocalDate referenceDate) { double accrualFactor = index.getTenor().get(ChronoUnit.MONTHS) / 12.0; IborFuture product = IborFuture.builder() .securityId(securityId) .index(index) .accrualFactor(accrualFactor) .lastTradeDate(lastTradeDate) .notional(notional) .build(); TradeInfo info = TradeInfo.of(tradeDate); return IborFutureTrade.builder() .info(info) .product(product) .quantity(quantity) .price(price) .build(); }
public void test_resolve() { IborFutureTrade test = sut(); ResolvedIborFutureTrade resolved = test.resolve(REF_DATA); assertEquals(resolved.getInfo(), TRADE_INFO); assertEquals(resolved.getProduct(), PRODUCT.resolve(REF_DATA)); assertEquals(resolved.getQuantity(), QUANTITY); assertEquals(resolved.getTradedPrice(), Optional.of(TradedPrice.of(TRADE_DATE, PRICE))); }
@Override public IborFutureTrade withInfo(TradeInfo info) { return new IborFutureTrade(info, product, quantity, price); }
public void test_createProduct() { IborFutureSecurity test = sut(); assertEquals(test.createProduct(ReferenceData.empty()), PRODUCT); TradeInfo tradeInfo = TradeInfo.of(date(2016, 6, 30)); IborFutureTrade expectedTrade = IborFutureTrade.builder() .info(tradeInfo) .product(PRODUCT) .quantity(100) .price(0.995) .build(); assertEquals(test.createTrade(tradeInfo, 100, 0.995, ReferenceData.empty()), expectedTrade); PositionInfo positionInfo = PositionInfo.empty(); IborFuturePosition expectedPosition1 = IborFuturePosition.builder() .info(positionInfo) .product(PRODUCT) .longQuantity(100) .build(); TestHelper.assertEqualsBean(test.createPosition(positionInfo, 100, ReferenceData.empty()), expectedPosition1); IborFuturePosition expectedPosition2 = IborFuturePosition.builder() .info(positionInfo) .product(PRODUCT) .longQuantity(100) .shortQuantity(50) .build(); assertEquals(test.createPosition(positionInfo, 100, 50, ReferenceData.empty()), expectedPosition2); }
@Override public IborFutureTrade withPrice(double price) { return new IborFutureTrade(info, product, quantity, price); }
@Override public IborFutureTrade withQuantity(double quantity) { return new IborFutureTrade(info, product, quantity, price); }