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(); }
public void test_toBuilder() { TradeInfo test = TradeInfo.builder() .counterparty(COUNTERPARTY) .build() .toBuilder() .id(ID) .build(); assertEquals(test.getId(), Optional.of(ID)); assertEquals(test.getCounterparty(), Optional.of(COUNTERPARTY)); }
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_load_security() { TradeCsvLoader test = TradeCsvLoader.standard(); ValueWithFailures<List<Trade>> trades = test.load(FILE); List<SecurityTrade> filtered = trades.getValue().stream() .flatMap(filtering(SecurityTrade.class)) .collect(toImmutableList()); assertEquals(filtered.size(), 2); SecurityTrade expected1 = SecurityTrade.builder() .info(TradeInfo.builder() .id(StandardId.of("OG", "123431")) .tradeDate(date(2017, 6, 1)) .settlementDate(date(2017, 6, 3)) .build()) .securityId(SecurityId.of("OG-Security", "AAPL")) .quantity(12) .price(14.5) .build(); assertBeanEquals(expected1, filtered.get(0)); SecurityTrade expected2 = SecurityTrade.builder() .info(TradeInfo.builder() .id(StandardId.of("OG", "123432")) .tradeDate(date(2017, 6, 1)) .settlementDate(date(2017, 6, 3)) .build()) .securityId(SecurityId.of("BBG", "MSFT")) .quantity(-20) .price(17.8) .build(); assertBeanEquals(expected2, filtered.get(1)); }
@Test public void test_load_fx_forwards() throws Exception { TradeCsvLoader standard = TradeCsvLoader.standard(); ResourceLocator locator = ResourceLocator.of("classpath:com/opengamma/strata/loader/csv/fxtrades.csv"); ImmutableList<CharSource> charSources = ImmutableList.of(locator.getCharSource()); ValueWithFailures<List<FxSingleTrade>> loadedData = standard.parse(charSources, FxSingleTrade.class); assertEquals(loadedData.getFailures().size(), 0, loadedData.getFailures().toString()); List<FxSingleTrade> loadedTrades = loadedData.getValue(); assertEquals(loadedTrades.size(), 2); FxSingleTrade expectedTrade1 = FxSingleTrade.builder() .info(TradeInfo.builder() .tradeDate(LocalDate.parse("2016-12-06")) .id(StandardId.of("OG", "tradeId1")) .build()) .product(FxSingle.of(CurrencyAmount.of(USD, -3850000), FxRate.of(USD, INR, 67.40), LocalDate.parse("2016-12-08"))) .build(); assertEquals(loadedTrades.get(0), expectedTrade1); FxSingleTrade expectedTrade2 = FxSingleTrade.builder() .info(TradeInfo.builder() .tradeDate(LocalDate.parse("2016-12-22")) .id(StandardId.of("OG", "tradeId2")) .build()) .product(FxSingle.of(CurrencyAmount.of(EUR, 1920000), FxRate.of(EUR, CZK, 25.62), LocalDate.parse("2016-12-24"))) .build(); assertEquals(loadedTrades.get(1), expectedTrade2); }
.tradeDate(LocalDate.parse("2016-12-06")) .id(StandardId.of("OG", "tradeId1")) .build()) .product(FxSingle.of( CurrencyAmount.of(Currency.USD, -3850000), .tradeDate(LocalDate.parse("2017-01-11")) .id(StandardId.of("OG", "tradeId5")) .build()) .product(FxSingle.of( CurrencyAmount.of(Currency.USD, -6608000), .tradeDate(LocalDate.parse("2017-01-25")) .tradeTime(LocalTime.of(11, 00)) .zone(ZoneId.of("Europe/London")) .id(StandardId.of("OG", "tradeId6")) .build()) .product(FxSingle.of( CurrencyAmount.of(Currency.EUR, -1920000), .tradeDate(LocalDate.parse("2017-01-25")) .id(StandardId.of("OG", "tradeId7")) .build()) .product(FxSingle.of( CurrencyAmount.of(Currency.EUR, -1920000), .tradeDate(LocalDate.parse("2017-01-25")) .id(StandardId.of("OG", "tradeId8")) .build())
String payerPartyReference = baseEl.getChild("payerPartyReference").getAttribute(HREF); String receiverPartyReference = baseEl.getChild("receiverPartyReference").getAttribute(HREF); Object currentCounterparty = tradeInfoBuilder.build().getCounterparty().orElse(null); tradeInfoBuilder.counterparty(proposedCounterparty); } else if (!currentCounterparty.equals(proposedCounterparty)) { throw new FpmlParseException(Messages.format( StandardId proposedCounterparty = StandardId.of(FPML_PARTY_SCHEME, parties.get(payerPartyReference).get(0)); if (currentCounterparty == null) { tradeInfoBuilder.counterparty(proposedCounterparty); } else if (!currentCounterparty.equals(proposedCounterparty)) { throw new FpmlParseException(Messages.format(
@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(); }
/** * Converts an FpML 'BuyerSeller.model' to a {@code BuySell}. * <p> * The {@link TradeInfo} builder is updated with the counterparty. * * @param baseEl the FpML payer receiver model element * @param tradeInfoBuilder the builder of the trade info * @return the pay/receive flag * @throws RuntimeException if unable to parse */ public BuySell parseBuyerSeller(XmlElement baseEl, TradeInfoBuilder tradeInfoBuilder) { String buyerPartyReference = baseEl.getChild("buyerPartyReference").getAttribute(FpmlDocument.HREF); String sellerPartyReference = baseEl.getChild("sellerPartyReference").getAttribute(FpmlDocument.HREF); if (ourPartyHrefIds.isEmpty() || ourPartyHrefIds.contains(buyerPartyReference)) { tradeInfoBuilder.counterparty(StandardId.of(FPML_PARTY_SCHEME, parties.get(sellerPartyReference).get(0))); return BuySell.BUY; } else if (ourPartyHrefIds.contains(sellerPartyReference)) { tradeInfoBuilder.counterparty(StandardId.of(FPML_PARTY_SCHEME, parties.get(buyerPartyReference).get(0))); return BuySell.SELL; } else { throw new FpmlParseException(Messages.format( "Neither buyerPartyReference nor sellerPartyReference contain our party ID: {}", ourPartyHrefIds)); } }
.tradeDate(TODAY) .settlementDate(products.get(0).getSettlementDateOffset().adjust(TODAY, REF_DATA)) .build(); List<ResolvedCdsTrade> trades = products.stream() .map(p -> CdsTrade.builder().product(p).info(info).build().resolve(REF_DATA))
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)); }
@Test public void test_load_fx_swaps() throws Exception { TradeCsvLoader standard = TradeCsvLoader.standard(); ResourceLocator locator = ResourceLocator.of("classpath:com/opengamma/strata/loader/csv/fxtrades.csv"); ImmutableList<CharSource> charSources = ImmutableList.of(locator.getCharSource()); ValueWithFailures<List<FxSwapTrade>> loadedData = standard.parse(charSources, FxSwapTrade.class); assertEquals(loadedData.getFailures().size(), 0, loadedData.getFailures().toString()); List<FxSwapTrade> loadedTrades = loadedData.getValue(); assertEquals(loadedTrades.size(), 2); FxSingle near1 = FxSingle.of(CurrencyAmount.of(USD, 120000), FxRate.of(USD, CAD, 1.31), LocalDate.parse("2016-12-08")); FxSingle far1 = FxSingle.of(CurrencyAmount.of(USD, -120000), FxRate.of(USD, CAD, 1.34), LocalDate.parse("2017-01-08")); FxSwapTrade expectedTrade1 = FxSwapTrade.builder() .info(TradeInfo.builder() .tradeDate(LocalDate.parse("2016-12-06")) .id(StandardId.of("OG", "tradeId11")) .build()) .product(FxSwap.of(near1, far1)) .build(); assertBeanEquals(loadedTrades.get(0), expectedTrade1); FxSingle near2 = FxSingle.of(CurrencyAmount.of(CAD, -160000), FxRate.of(USD, CAD, 1.32), LocalDate.parse("2016-12-08")); FxSingle far2 = FxSingle.of(CurrencyAmount.of(CAD, 160000), FxRate.of(USD, CAD, 1.34), LocalDate.parse("2017-01-08")); FxSwapTrade expectedTrade2 = FxSwapTrade.builder() .info(TradeInfo.builder() .tradeDate(LocalDate.parse("2016-12-06")) .id(StandardId.of("OG", "tradeId12")) .build()) .product(FxSwap.of(near2, far2)) .build(); assertBeanEquals(loadedTrades.get(1), expectedTrade2); }
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()); }
@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 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); }
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 test_load_fx_swaps_fullFormat() throws Exception { TradeCsvLoader standard = TradeCsvLoader.standard(); ResourceLocator locator = ResourceLocator.of("classpath:com/opengamma/strata/loader/csv/fxtrades2.csv"); ImmutableList<CharSource> charSources = ImmutableList.of(locator.getCharSource()); ValueWithFailures<List<FxSwapTrade>> loadedData = standard.parse(charSources, FxSwapTrade.class); assertEquals(loadedData.getFailures().size(), 0, loadedData.getFailures().toString()); List<FxSwapTrade> loadedTrades = loadedData.getValue(); assertEquals(loadedTrades.size(), 1); FxSingle near1 = FxSingle.of( Payment.of(EUR, 1920000, LocalDate.parse("2018-01-29")), Payment.of(CZK, -12256000, LocalDate.parse("2018-01-30")), BusinessDayAdjustment.of(MODIFIED_FOLLOWING, EUTA.combinedWith(CZPR))); FxSingle far1 = FxSingle.of( Payment.of(EUR, -1920000, LocalDate.parse("2018-04-29")), Payment.of(CZK, 12258000, LocalDate.parse("2018-04-30")), BusinessDayAdjustment.of(MODIFIED_FOLLOWING, EUTA.combinedWith(CZPR))); FxSwapTrade expectedTrade1 = FxSwapTrade.builder() .info(TradeInfo.builder() .tradeDate(LocalDate.parse("2017-01-25")) .id(StandardId.of("OG", "tradeId9")) .build()) .product(FxSwap.of(near1, far1)) .build(); assertBeanEquals(loadedTrades.get(0), expectedTrade1); }