private TradeInfo parseTradeInfo(CsvRow row) { TradeInfoBuilder infoBuilder = TradeInfo.builder(); String scheme = row.findField(ID_SCHEME_FIELD).orElse(DEFAULT_TRADE_SCHEME); row.findValue(ID_FIELD).ifPresent(id -> infoBuilder.id(StandardId.of(scheme, id))); String schemeCpty = row.findValue(CPTY_SCHEME_FIELD).orElse(DEFAULT_CPTY_SCHEME); row.findValue(CPTY_FIELD).ifPresent(cpty -> infoBuilder.counterparty(StandardId.of(schemeCpty, cpty))); row.findValue(TRADE_DATE_FIELD).ifPresent(dateStr -> infoBuilder.tradeDate(LoaderUtils.parseDate(dateStr))); row.findValue(TRADE_TIME_FIELD).ifPresent(timeStr -> infoBuilder.tradeTime(LoaderUtils.parseTime(timeStr))); row.findValue(TRADE_ZONE_FIELD).ifPresent(zoneStr -> infoBuilder.zone(ZoneId.of(zoneStr))); row.findValue(SETTLEMENT_DATE_FIELD).ifPresent(dateStr -> infoBuilder.settlementDate(LoaderUtils.parseDate(dateStr))); resolver.parseTradeInfo(row, infoBuilder); return infoBuilder.build(); }
@Override public TradeInfo getInfo() { return TradeInfo.builder().id(id).build(); }
@Override public Trade parseTrade(FpmlDocument document, XmlElement tradeEl) { TradeInfoBuilder tradeInfoBuilder = document.parseTradeInfo(tradeEl); Swap swap = parseSwap(document, tradeEl, tradeInfoBuilder); return SwapTrade.builder() .info(tradeInfoBuilder.build()) .product(swap) .build(); }
public void test_builder() { TradeInfo test = TradeInfo.builder() .counterparty(COUNTERPARTY) .build(); assertEquals(test.getId(), Optional.empty()); assertEquals(test.getCounterparty(), Optional.of(COUNTERPARTY)); assertEquals(test.getTradeDate(), Optional.empty()); assertEquals(test.getTradeTime(), Optional.empty()); assertEquals(test.getZone(), Optional.empty()); assertEquals(test.getSettlementDate(), Optional.empty()); assertEquals(test.getAttributeTypes(), ImmutableSet.of()); assertEquals(test.getAttributes(), ImmutableMap.of()); assertThrowsIllegalArg(() -> test.getAttribute(AttributeType.DESCRIPTION)); assertEquals(test.findAttribute(AttributeType.DESCRIPTION), Optional.empty()); }
public void test_builder_withers() { TradeInfo test = TradeInfo.builder() .counterparty(COUNTERPARTY) .build() .withId(ID) .withAttribute(AttributeType.DESCRIPTION, "A"); assertEquals(test.getId(), Optional.of(ID)); assertEquals(test.getCounterparty(), Optional.of(COUNTERPARTY)); assertEquals(test.getTradeDate(), Optional.empty()); assertEquals(test.getTradeTime(), Optional.empty()); assertEquals(test.getZone(), Optional.empty()); assertEquals(test.getSettlementDate(), Optional.empty()); assertEquals(test.getAttributeTypes(), ImmutableSet.of(AttributeType.DESCRIPTION)); assertEquals(test.getAttributes(), ImmutableMap.of(AttributeType.DESCRIPTION, "A")); assertEquals(test.getAttribute(AttributeType.DESCRIPTION), "A"); assertEquals(test.findAttribute(AttributeType.DESCRIPTION), Optional.of("A")); }
public void test_of_yield_settledate() { assertThrows(() -> BillTrade.ofYield(TradeInfo.builder().tradeDate(TRADE_DATE).build(), PRODUCT, QUANTITY, YIELD), IllegalArgumentException.class); }
@Override public Trade parseTrade(FpmlDocument document, XmlElement tradeEl) { // supported elements: // 'nearLeg' // 'farLeg' TradeInfoBuilder tradeInfoBuilder = document.parseTradeInfo(tradeEl); XmlElement fxEl = tradeEl.getChild("fxSwap"); FxSingle nearLeg = parseLeg(fxEl.getChild("nearLeg"), document, tradeInfoBuilder); FxSingle farLeg = parseLeg(fxEl.getChild("farLeg"), document, tradeInfoBuilder); return FxSwapTrade.builder() .info(tradeInfoBuilder.build()) .product(FxSwap.of(nearLeg, farLeg)) .build(); }
public void standardQuoteTest() { double pointsUpFront = 0.007; double expectedParSpread = 0.011112592882846; // taken from Excel-ISDA 1.8.2 double premium = 100d * ONE_BP; Cds product = Cds.of(BUY, LEGAL_ENTITY, GBP, 1.0e6, START_DATE, END_DATE, Frequency.P3M, DEFAULT_CALENDAR, premium); TradeInfo info = TradeInfo.builder().tradeDate(TODAY).settlementDate(product.getSettlementDateOffset().adjust(TODAY, REF_DATA)).build(); ResolvedCdsTrade trade = CdsTrade.builder().product(product).info(info).build().resolve(REF_DATA); CdsQuote pufQuote = CdsQuote.of(CdsQuoteConvention.POINTS_UPFRONT, pointsUpFront); CdsQuote quotedSpread = CONV.quotedSpreadFromPointsUpfront(trade, pufQuote, RATES_PROVIDER, REF_DATA); assertEquals(quotedSpread.getQuotedValue(), expectedParSpread, 1e-14); assertTrue(quotedSpread.getQuoteConvention().equals(CdsQuoteConvention.QUOTED_SPREAD)); CdsQuote derivedPuf = CONV.pointsUpFrontFromQuotedSpread(trade, quotedSpread, RATES_PROVIDER, REF_DATA); assertEquals(derivedPuf.getQuotedValue(), pointsUpFront, 1e-15); assertTrue(derivedPuf.getQuoteConvention().equals(CdsQuoteConvention.POINTS_UPFRONT)); }
public void standardQuoteTest2() { double quotedSpread = 143.4 * ONE_BP; double expectedPuf = -0.2195134271137960; // taken from Excel-ISDA 1.8.2 double premium = 500d * ONE_BP; Cds product = Cds.of(SELL, LEGAL_ENTITY, GBP, 1.0e8, START_DATE, END_DATE, Frequency.P6M, DEFAULT_CALENDAR, premium); TradeInfo info = TradeInfo.builder().tradeDate(TODAY).settlementDate(product.getSettlementDateOffset().adjust(TODAY, REF_DATA)).build(); ResolvedCdsTrade trade = CdsTrade.builder().product(product).info(info).build().resolve(REF_DATA); CdsQuote quotedSpreadQuoted = CdsQuote.of(CdsQuoteConvention.QUOTED_SPREAD, quotedSpread); CdsQuote derivedPuf = CONV.pointsUpFrontFromQuotedSpread(trade, quotedSpreadQuoted, RATES_PROVIDER, REF_DATA); assertEquals(derivedPuf.getQuotedValue(), expectedPuf, 5e-13); assertTrue(derivedPuf.getQuoteConvention().equals(CdsQuoteConvention.POINTS_UPFRONT)); CdsQuote derivedQuotedSpread = CONV.quotedSpreadFromPointsUpfront(trade, derivedPuf, RATES_PROVIDER, REF_DATA); assertEquals(derivedQuotedSpread.getQuotedValue(), quotedSpread, 1e-15); assertTrue(derivedQuotedSpread.getQuoteConvention().equals(CdsQuoteConvention.QUOTED_SPREAD)); }
public void test_createProduct() { CapitalIndexedBondSecurity test = sut(); assertEquals(test.createProduct(ReferenceData.empty()), PRODUCT); TradeInfo tradeInfo = TradeInfo.builder().tradeDate(date(2016, 6, 30)).settlementDate(date(2016, 7, 1)).build(); CapitalIndexedBondTrade expectedTrade = CapitalIndexedBondTrade.builder() .info(tradeInfo) .product(PRODUCT) .quantity(100) .price(123.50) .build(); assertEquals(test.createTrade(tradeInfo, 100, 123.50, ReferenceData.empty()), expectedTrade); }
public void test_serialization() { TradeInfo test = TradeInfo.builder() .counterparty(COUNTERPARTY) .tradeDate(date(2014, 6, 20)) .tradeTime(LocalTime.MIDNIGHT) .zone(ZoneOffset.UTC) .settlementDate(date(2014, 6, 20)) .build(); assertSerialization(test); }
static CapitalIndexedBondTrade sut2() { return CapitalIndexedBondTrade.builder() .info(TradeInfo.builder().tradeDate(START.plusDays(7)).build()) .product(PRODUCT2) .quantity(QUANTITY2) .price(PRICE2) .build(); }
public void test_load_genericSecurity() { TradeCsvLoader test = TradeCsvLoader.standard(); ValueWithFailures<List<Trade>> trades = test.load(FILE); List<GenericSecurityTrade> filtered = trades.getValue().stream() .flatMap(filtering(GenericSecurityTrade.class)) .collect(toImmutableList()); assertEquals(filtered.size(), 1); GenericSecurityTrade expected1 = GenericSecurityTrade.builder() .info(TradeInfo.builder() .id(StandardId.of("OG", "123433")) .tradeDate(date(2017, 6, 1)) .settlementDate(date(2017, 6, 3)) .build()) .security( GenericSecurity.of( SecurityInfo.of( SecurityId.of("OG-Security", "AAPL"), SecurityPriceInfo.of(5, CurrencyAmount.of(USD, 0.01), 10)))) .quantity(12) .price(14.5) .build(); assertBeanEquals(expected1, filtered.get(0)); }
public void coverage() { TradeInfo test = TradeInfo.builder() .addAttribute(AttributeType.DESCRIPTION, "A") .counterparty(COUNTERPARTY) .tradeDate(date(2014, 6, 20)) .tradeTime(LocalTime.MIDNIGHT) .zone(ZoneId.systemDefault()) .settlementDate(date(2014, 6, 20)) .build(); coverImmutableBean(test); TradeInfo test2 = TradeInfo.builder() .id(StandardId.of("OG-Id", "1")) .counterparty(StandardId.of("OG-Party", "Other2")) .tradeDate(date(2014, 6, 21)) .tradeTime(LocalTime.NOON) .zone(ZoneOffset.UTC) .settlementDate(date(2014, 6, 21)) .build(); coverBeanEquals(test, test2); }
public void pricePufTest() { double premium = 150d * ONE_BP; Cds product = Cds.of(BUY, LEGAL_ENTITY, GBP, 1.0e6, START_DATE, END_DATE, Frequency.P3M, DEFAULT_CALENDAR, premium); TradeInfo info = TradeInfo.builder().tradeDate(TODAY).settlementDate(product.getSettlementDateOffset().adjust(TODAY, REF_DATA)).build(); ResolvedCdsTrade trade = CdsTrade.builder().product(product).info(info).build().resolve(REF_DATA); NodalCurve cc = CALIB.calibrate(ImmutableList.of(trade), DoubleArray.of(0.0123), DoubleArray.of(0.0), CurveName.of("test"), TODAY, DSC_CURVE, REC_RATES, REF_DATA); CreditRatesProvider rates = RATES_PROVIDER.toImmutableCreditRatesProvider().toBuilder() .creditCurves(ImmutableMap.of( Pair.of(LEGAL_ENTITY, GBP), LegalEntitySurvivalProbabilities.of(LEGAL_ENTITY, IsdaCreditDiscountFactors.of(GBP, TODAY, cc)))) .build(); double pointsUpFront = CONV.pointsUpfront(trade, rates, REF_DATA); double cleanPrice = CONV.cleanPrice(trade, rates, REF_DATA); double cleanPriceRe = CONV.cleanPriceFromPointsUpfront(pointsUpFront); assertEquals(cleanPrice, cleanPriceRe, TOL); }
private static Trade trade() { SecurityInfo info = SecurityInfo.of(SecurityId.of("OG-Test", "1"), 20, CurrencyAmount.of(USD, 10)); GenericSecurity security = GenericSecurity.of(info); TradeInfo tradeInfo = TradeInfo.builder() .counterparty(StandardId.of("cpty", "a")) .build(); return GenericSecurityTrade.builder() .info(tradeInfo) .security(security) .quantity(123) .price(456) .build(); }
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); }
public void test_currentCash_onPaymentDate() { LocalDate paymentDate = RFRA.getPaymentDate(); double publishedRate = 0.025; ResolvedFraTrade trade = FraTrade.builder() .info(TradeInfo.builder().tradeDate(paymentDate).build()) .product(FRA) .build() .resolve(REF_DATA); ImmutableRatesProvider ratesProvider = RatesProviderDataSets.multiGbp(paymentDate).toBuilder() .timeSeries(GBP_LIBOR_3M, LocalDateDoubleTimeSeries.of(paymentDate, publishedRate)) .build(); assertEquals(PRICER_TRADE.currentCash(trade, ratesProvider), CurrencyAmount.of(FRA.getCurrency(), (publishedRate - FRA.getFixedRate()) / (1d + publishedRate * RFRA.getYearFraction()) * RFRA.getYearFraction() * RFRA.getNotional())); }
private static Trade trade(String counterparty, double notional) { TradeInfo tradeInfo = TradeInfo.builder() .counterparty(StandardId.of("cpty", counterparty)) .build(); Fra fra = Fra.builder() .buySell(BUY) .notional(notional) .startDate(date(2015, 8, 5)) .endDate(date(2015, 11, 5)) .paymentDate(AdjustableDate.of(date(2015, 8, 7))) .fixedRate(0.25d) .index(GBP_LIBOR_3M) .build(); return FraTrade.builder() .info(tradeInfo) .product(fra) .build(); } }