/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(SwapTrade beanToCopy) { this.info = beanToCopy.getInfo(); this.product = beanToCopy.getProduct(); }
public void test_builder() { SwapTrade test = SwapTrade.builder() .product(SWAP1) .build(); assertEquals(test.getInfo(), TradeInfo.empty()); assertEquals(test.getProduct(), SWAP1); }
@Override public ResolvedSwapTrade resolvedTrade(double quantity, MarketData marketData, ReferenceData refData) { return trade(quantity, marketData, refData).resolve(refData); }
public void test_of() { SwapTrade test = SwapTrade.of(TRADE_INFO, SWAP1); assertEquals(test.getInfo(), TRADE_INFO); assertEquals(test.getProduct(), SWAP1); assertEquals(test.withInfo(TRADE_INFO).getInfo(), TRADE_INFO); }
private static SwapTrade replaceLegs(SwapTrade trade, ImmutableList<SwapLeg> legs) { return trade.toBuilder() .product(trade.getProduct().toBuilder() .legs(legs) .build()) .build(); }
public void test_VanillaFixedVsLibor3mSwap() { SwapLeg payLeg = fixedLeg( LocalDate.of(2014, 9, 12), LocalDate.of(2021, 9, 12), P6M, PAY, NOTIONAL, 0.015, null); SwapLeg receiveLeg = iborLeg(LocalDate.of(2014, 9, 12), LocalDate.of(2021, 9, 12), USD_LIBOR_3M, RECEIVE, NOTIONAL, null); ResolvedSwapTrade trade = SwapTrade.builder() .info(TradeInfo.builder().tradeDate(LocalDate.of(2014, 9, 10)).build()) .product(Swap.of(payLeg, receiveLeg)) .build() .resolve(REF_DATA); // test pv DiscountingSwapTradePricer pricer = swapPricer(); CurrencyAmount pv = pricer.presentValue(trade, provider()).getAmount(USD); assertEquals(pv.getAmount(), 7170391.798257509, TOLERANCE_PV); // test par rate double parRate = PRICER_PRODUCT.parRate(trade.getProduct(), provider()); assertEquals(parRate, 0.02589471566819517, TOLERANCE_RATE); // test par rate vs pv ResolvedSwap swapPV0 = Swap.of(fixedLeg(LocalDate.of(2014, 9, 12), LocalDate.of(2021, 9, 12), P6M, PAY, NOTIONAL, parRate, null), receiveLeg) .resolve(REF_DATA); CurrencyAmount pv0 = PRICER_PRODUCT.presentValue(swapPV0, provider()).getAmount(USD); assertEquals(pv0.getAmount(), 0, TOLERANCE_PV); // PV at par rate should be 0 }
public void test_currentCash_convention() { // Check that standard conventions return a compounded ZC fixed leg FixedInflationSwapConvention US_CPI = FixedInflationSwapConventions.USD_FIXED_ZC_US_CPI; double rate = 0.10; int nbYears = 5; LocalDate endDate = VAL_DATE_INFLATION.plusYears(nbYears); SwapTrade swap = US_CPI.toTrade(VAL_DATE_INFLATION, VAL_DATE_INFLATION, endDate, BuySell.BUY, NOTIONAL, rate); ResolvedSwap resolved = swap.getProduct().resolve(REF_DATA); DiscountingSwapLegPricer pricer = DiscountingSwapLegPricer.DEFAULT; RatesProvider providerEndDate = new MockRatesProvider(endDate); CurrencyAmount c = pricer.currentCash(resolved.getLegs(SwapLegType.FIXED).get(0), providerEndDate); assertEquals(c.getAmount(), -(Math.pow(1 + rate, nbYears) - 1.0) * NOTIONAL, NOTIONAL * EPS); }
public void test_parSpread_fixedInflation() { ResolvedSwapTrade tradeZc = SWAP_GBP_ZC_INFLATION_5Y.resolve(REF_DATA); double ps = SWAP_PRODUCT_PRICER.parSpread(tradeZc.getProduct(), RATES_GBP_INFLATION); SwapTrade swap0 = FixedInflationSwapConventions.GBP_FIXED_ZC_GB_RPI .createTrade(VAL_DATE_INFLATION, TENOR_5Y, BUY, NOTIONAL_SWAP, FIXED_RATE + ps, REF_DATA); CurrencyAmount pv0 = SWAP_PRODUCT_PRICER.presentValue(swap0.getProduct().resolve(REF_DATA), GBP, RATES_GBP_INFLATION); assertEquals(pv0.getAmount(), 0, TOLERANCE_PV); }
@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_summarize() { SwapTrade trade = SwapTrade.of(TRADE_INFO, SWAP1); PortfolioItemSummary expected = PortfolioItemSummary.builder() .id(TRADE_INFO.getId().orElse(null)) .portfolioItemType(PortfolioItemType.TRADE) .productType(ProductType.SWAP) .currencies(Currency.GBP, Currency.EUR, Currency.USD) .description( "7M Pay [GBP-LIBOR-3M, EUR/GBP-ECB, EUR-EONIA] / Rec [GBP-LIBOR-3M, EUR/GBP-ECB, EUR-EONIA] : 15Jan12-15Aug12") .build(); assertEquals(trade.summarize(), expected); }
return SwapTrade.of(info, swap);
public void test_VanillaFixedVsLibor1mSwap() { SwapLeg payLeg = fixedLeg( LocalDate.of(2014, 9, 12), LocalDate.of(2016, 9, 12), P6M, PAY, NOTIONAL, 0.0125, null); SwapLeg receiveLeg = RateCalculationSwapLeg.builder() .payReceive(RECEIVE) .accrualSchedule(PeriodicSchedule.builder() .startDate(LocalDate.of(2014, 9, 12)) .endDate(LocalDate.of(2016, 9, 12)) .frequency(P1M) .businessDayAdjustment(BDA_MF) .build()) .paymentSchedule(PaymentSchedule.builder() .paymentFrequency(P1M) .paymentDateOffset(DaysAdjustment.NONE) .build()) .notionalSchedule(NOTIONAL) .calculation(IborRateCalculation.builder() .index(USD_LIBOR_1M) .fixingDateOffset(DaysAdjustment.ofBusinessDays(-2, CalendarUSD.NYC, BDA_P)) .build()) .build(); ResolvedSwapTrade trade = SwapTrade.builder() .info(TradeInfo.builder().tradeDate(LocalDate.of(2014, 9, 10)).build()) .product(Swap.of(payLeg, receiveLeg)) .build() .resolve(REF_DATA); DiscountingSwapTradePricer pricer = swapPricer(); CurrencyAmount pv = pricer.presentValue(trade, provider()).getAmount(USD); assertEquals(pv.getAmount(), -1003684.8402, TOLERANCE_PV); }
public void test_parSpread_iborIbor() { double ps = SWAP_PRODUCT_PRICER.parSpread(SWAP_USD_LIBOR_3M_LIBOR_6M_5Y.getProduct().resolve(REF_DATA), MULTI_USD); SwapTrade swap0 = IborIborSwapTemplate .of(Period.ZERO, TENOR_5Y, CONV_USD_LIBOR3M_LIBOR6M) .createTrade(MULTI_USD.getValuationDate(), BUY, NOTIONAL_SWAP, SPREAD + ps, REF_DATA); CurrencyAmount pv0 = SWAP_PRODUCT_PRICER.presentValue(swap0.getProduct().resolve(REF_DATA), USD, MULTI_USD); assertEquals(pv0.getAmount(), 0, TOLERANCE_PV); }
public void test_parSpread_fixedIbor() { ResolvedSwapTrade swapTrade = SWAP_USD_FIXED_6M_LIBOR_3M_5Y.resolve(REF_DATA); double ps = SWAP_PRODUCT_PRICER.parSpread(swapTrade.getProduct(), MULTI_USD); SwapTrade swap0 = FixedIborSwapTemplate .of(Period.ZERO, TENOR_5Y, USD_FIXED_6M_LIBOR_3M) .createTrade(MULTI_USD.getValuationDate(), BUY, NOTIONAL_SWAP, FIXED_RATE + ps, REF_DATA); CurrencyAmount pv0 = SWAP_PRODUCT_PRICER.presentValue(swap0.getProduct().resolve(REF_DATA), USD, MULTI_USD); assertEquals(pv0.getAmount(), 0, TOLERANCE_PV); // test via SwapTrade DiscountingSwapProductPricer pricerSwap = DiscountingSwapProductPricer.DEFAULT; DiscountingSwapTradePricer pricerTrade = DiscountingSwapTradePricer.DEFAULT; assertEquals( pricerTrade.parSpread(swapTrade, MULTI_USD), pricerSwap.parSpread(swapTrade.getProduct(), MULTI_USD)); }
@Override public SwapTrade 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"); } SwapLeg leg1 = fixedLeg.toLeg(startDate, endDate, PayReceive.ofPay(buySell.isBuy()), notional, fixedRate); SwapLeg leg2 = floatingLeg.toLeg(startDate, endDate, PayReceive.ofPay(buySell.isSell()), notional); return SwapTrade.builder() .info(tradeInfo) .product(Swap.of(leg1, leg2)) .build(); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 3237038: // info return ((SwapTrade) bean).getInfo(); case -309474065: // product return ((SwapTrade) bean).getProduct(); } return super.propertyGet(bean, propertyName, quiet); }
public void test_VanillaFixedVsLibor3mSwapWithFixing() { SwapLeg payLeg = fixedLeg( LocalDate.of(2013, 9, 12), LocalDate.of(2020, 9, 12), P6M, PAY, NOTIONAL, 0.015, null); SwapLeg receiveLeg = RateCalculationSwapLeg.builder() .payReceive(RECEIVE) .accrualSchedule(PeriodicSchedule.builder() .startDate(LocalDate.of(2013, 9, 12)) .endDate(LocalDate.of(2020, 9, 12)) .frequency(P3M) .businessDayAdjustment(BDA_MF) .build()) .paymentSchedule(PaymentSchedule.builder() .paymentFrequency(P3M) .paymentDateOffset(DaysAdjustment.NONE) .build()) .notionalSchedule(NOTIONAL) .calculation(IborRateCalculation.builder() .index(USD_LIBOR_3M) .fixingDateOffset(DaysAdjustment.ofBusinessDays(-2, CalendarUSD.NYC, BDA_P)) .build()) .build(); ResolvedSwapTrade trade = SwapTrade.builder() .info(TradeInfo.builder().tradeDate(LocalDate.of(2013, 9, 10)).build()) .product(Swap.of(payLeg, receiveLeg)) .build() .resolve(REF_DATA); DiscountingSwapTradePricer pricer = swapPricer(); CurrencyAmount pv = pricer.presentValue(trade, provider()).getAmount(USD); assertEquals(pv.getAmount(), 3588376.471608199, TOLERANCE_PV); }
@Test(dataProvider = "stubIbor") public void test_stub_ibor(ThreeLegBasisSwapConvention convention, Tenor tenor) { LocalDate tradeDate = LocalDate.of(2015, 10, 20); SwapTrade swap = convention.createTrade(tradeDate, tenor, BuySell.BUY, 1, 0.01, REF_DATA); ResolvedSwap swapResolved = swap.getProduct().resolve(REF_DATA); LocalDate endDate = swapResolved.getLeg(PayReceive.PAY).get().getEndDate(); assertTrue(endDate.isAfter(tradeDate.plus(tenor).minusMonths(1))); assertTrue(endDate.isBefore(tradeDate.plus(tenor).plusMonths(1))); }
@Override public ResolvedSwapTrade resolvedTrade(double quantity, MarketData marketData, ReferenceData refData) { return trade(quantity, marketData, refData).resolve(refData); }