public void test_collectIndices() { ResolvedSwapLeg test = ResolvedSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1) .paymentEvents(NOTIONAL_EXCHANGE) .build(); ImmutableSet.Builder<Index> builder = ImmutableSet.builder(); test.collectIndices(builder); assertEquals(builder.build(), ImmutableSet.of(GBP_LIBOR_3M)); }
public void test_annuityCash_twoPeriods() { ResolvedSwapLeg leg = ResolvedSwapLeg.builder() .type(FIXED) .payReceive(PAY) .paymentPeriods(FIXED_RATE_PAYMENT_PERIOD_PAY_USD, FIXED_RATE_PAYMENT_PERIOD_PAY_USD_2) .build(); double yield = 0.01; DiscountingSwapLegPricer test = DiscountingSwapLegPricer.DEFAULT; double computed = test.annuityCash(leg, yield); double expected = SwapDummyData.NOTIONAL * (1d - Math.pow(1d + yield / 4d, -2)) / yield; assertEquals(computed, expected, SwapDummyData.NOTIONAL * TOLERANCE); }
public void test_builder() { ResolvedSwapLeg test = ResolvedSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1) .paymentEvents(NOTIONAL_EXCHANGE) .build(); assertEquals(test.getType(), IBOR); assertEquals(test.getPayReceive(), RECEIVE); assertEquals(test.getStartDate(), DATE_2014_06_30); assertEquals(test.getEndDate(), DATE_2014_09_30); assertEquals(test.getCurrency(), GBP); assertEquals(test.getPaymentPeriods(), ImmutableList.of(RPP1)); assertEquals(test.getPaymentEvents(), ImmutableList.of(NOTIONAL_EXCHANGE)); }
public void test_findPaymentPeriod() { ResolvedSwapLeg test = ResolvedSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1, RPP2) .build(); assertEquals(test.findPaymentPeriod(RPP1.getStartDate()), Optional.empty()); assertEquals(test.findPaymentPeriod(RPP1.getStartDate().plusDays(1)), Optional.of(RPP1)); assertEquals(test.findPaymentPeriod(RPP1.getEndDate()), Optional.of(RPP1)); assertEquals(test.findPaymentPeriod(RPP2.getStartDate()), Optional.of(RPP1)); assertEquals(test.findPaymentPeriod(RPP2.getStartDate().plusDays(1)), Optional.of(RPP2)); assertEquals(test.findPaymentPeriod(RPP2.getEndDate()), Optional.of(RPP2)); assertEquals(test.findPaymentPeriod(RPP2.getEndDate().plusDays(1)), Optional.empty()); }
public void test_couponEquivalent_twoPeriods() { ResolvedSwapLeg leg = ResolvedSwapLeg.builder() .type(FIXED) .payReceive(PAY) .paymentPeriods(FIXED_RATE_PAYMENT_PERIOD_PAY_USD, FIXED_RATE_PAYMENT_PERIOD_PAY_USD_2) .build(); RatesProvider mockProv = mock(RatesProvider.class); double df1 = 0.99d; when(mockProv.discountFactor(USD, FIXED_RATE_PAYMENT_PERIOD_PAY_USD.getPaymentDate())) .thenReturn(df1); double df2 = 0.98d; when(mockProv.discountFactor(USD, FIXED_RATE_PAYMENT_PERIOD_PAY_USD_2.getPaymentDate())) .thenReturn(df2); when(mockProv.getValuationDate()).thenReturn(RatesProviderDataSets.VAL_DATE_2014_01_22); double pvbp = PRICER_LEG.pvbp(leg, mockProv); double ceExpected = PRICER_LEG.presentValuePeriodsInternal(leg, mockProv) / pvbp; double ceComputed = PRICER_LEG.couponEquivalent(leg, mockProv, pvbp); assertEquals(ceComputed, ceExpected, TOLERANCE); }
public void test_of() { SwapPaymentPeriod pp = mock(SwapPaymentPeriod.class); when(pp.getCurrency()).thenReturn(Currency.GBP); ResolvedSwapLeg leg = ResolvedSwapLeg.builder() .type(SwapLegType.FIXED) .payReceive(PayReceive.PAY) .paymentPeriods(pp) .build(); SwapLegAmount legAmount = SwapLegAmount.of(leg, CurrencyAmount.of(Currency.GBP, 10)); SwapLegAmount test = legAmount.convertedTo(Currency.USD, FxRate.of(Currency.GBP, Currency.USD, 1.6)); assertThat(test.getAmount().getCurrency()).isEqualTo(Currency.USD); assertThat(test.getAmount().getAmount()).isEqualTo(16.0); assertThat(test.getPayReceive()).isEqualTo(legAmount.getPayReceive()); assertThat(test.getType()).isEqualTo(legAmount.getType()); assertThat(test.getCurrency()).isEqualTo(legAmount.getCurrency()); }
public void test_pvbp_twoPeriods() { ResolvedSwapLeg leg = ResolvedSwapLeg.builder() .type(FIXED) .payReceive(PAY) .paymentPeriods(FIXED_RATE_PAYMENT_PERIOD_PAY_USD, FIXED_RATE_PAYMENT_PERIOD_PAY_USD_2) .build(); RatesProvider mockProv = mock(RatesProvider.class); double df1 = 0.99d; when(mockProv.discountFactor(USD, FIXED_RATE_PAYMENT_PERIOD_PAY_USD.getPaymentDate())) .thenReturn(df1); double df2 = 0.98d; when(mockProv.discountFactor(USD, FIXED_RATE_PAYMENT_PERIOD_PAY_USD_2.getPaymentDate())) .thenReturn(df2); double expected = df1 * FIXED_RATE_PAYMENT_PERIOD_PAY_USD.getNotional() * FIXED_RATE_PAYMENT_PERIOD_PAY_USD.getAccrualPeriods().get(0).getYearFraction(); expected += df2 * FIXED_RATE_PAYMENT_PERIOD_PAY_USD_2.getNotional() * FIXED_RATE_PAYMENT_PERIOD_PAY_USD_2.getAccrualPeriods().get(0).getYearFraction(); DiscountingSwapLegPricer test = DiscountingSwapLegPricer.DEFAULT; assertEquals(test.pvbp(leg, mockProv), expected, TOLERANCE); }
public void test_findNotional() { ResolvedSwapLeg test = ResolvedSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1, RPP2) .build(); // Date is before the start date assertEquals(test.findNotional(RPP1.getStartDate().minusMonths(1)), Optional.of(RPP1.getNotionalAmount())); // Date is on the start date assertEquals(test.findNotional(RPP1.getStartDate()), Optional.of(RPP1.getNotionalAmount())); // Date is after the start date assertEquals(test.findNotional(RPP1.getStartDate().plusDays(1)), Optional.of(RPP1.getNotionalAmount())); // Date is before the end date assertEquals(test.findNotional(RPP2.getEndDate().minusDays(1)), Optional.of(RPP2.getNotionalAmount())); // Date is on the end date assertEquals(test.findNotional(RPP2.getEndDate()), Optional.of(RPP2.getNotionalAmount())); // Date is after the end date assertEquals(test.findNotional(RPP2.getEndDate().plusMonths(1)), Optional.of(RPP2.getNotionalAmount())); }
public void test_builder_invalidMixedCurrency() { assertThrowsIllegalArg(() -> ResolvedSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP3) .paymentEvents(NOTIONAL_EXCHANGE) .build()); }
public void test_serialization() { ResolvedSwapLeg test = ResolvedSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1) .paymentEvents(NOTIONAL_EXCHANGE) .build(); assertSerialization(test); }
public void test_annuityCashDerivative_twoPeriods() { ResolvedSwapLeg leg = ResolvedSwapLeg.builder() .type(FIXED) .payReceive(PAY) .paymentPeriods(FIXED_RATE_PAYMENT_PERIOD_PAY_USD, FIXED_RATE_PAYMENT_PERIOD_PAY_USD_2) .build(); double yield = 0.01; DiscountingSwapLegPricer test = DiscountingSwapLegPricer.DEFAULT; double computed = test.annuityCashDerivative(leg, yield).getDerivative(0); double expected = 0.5 / FD_SHIFT * (test.annuityCash(leg, yield + FD_SHIFT) - test.annuityCash(leg, yield - FD_SHIFT)); assertEquals(computed, expected, SwapDummyData.NOTIONAL * FD_SHIFT); }
public void coverage() { ResolvedSwapLeg test = ResolvedSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1) .paymentEvents(NOTIONAL_EXCHANGE) .build(); coverImmutableBean(test); ResolvedSwapLeg test2 = ResolvedSwapLeg.builder() .type(FIXED) .payReceive(PAY) .paymentPeriods(RPP2) .build(); coverBeanEquals(test, test2); }
public void test_pvbpSensitivity() { ResolvedSwapLeg leg = ResolvedSwapLeg.builder() .type(FIXED) .payReceive(PAY) .paymentPeriods(FIXED_RATE_PAYMENT_PERIOD_PAY_USD, FIXED_RATE_PAYMENT_PERIOD_PAY_USD_2) .build(); PointSensitivities point = PRICER_LEG.pvbpSensitivity(leg, RATES_USD).build(); CurrencyParameterSensitivities pvbpsAd = RATES_USD.parameterSensitivity(point); CurrencyParameterSensitivities pvbpsFd = FINITE_DIFFERENCE_CALCULATOR.sensitivity(RATES_USD, (p) -> CurrencyAmount.of(USD, PRICER_LEG.pvbp(leg, p))); assertTrue(pvbpsAd.equalWithTolerance(pvbpsFd, TOLERANCE_DELTA)); }
public void test_resolve() { RatePeriodSwapLeg test = RatePeriodSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1) .paymentEvents(NOTIONAL_EXCHANGE) .build(); ResolvedSwapLeg expected = ResolvedSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1) .paymentEvents(NOTIONAL_EXCHANGE) .build(); assertEquals(test.resolve(REF_DATA), expected); }
public void test_resolve_createNotionalExchange_finalOnly() { RatePeriodSwapLeg test = RatePeriodSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1) .initialExchange(false) .intermediateExchange(false) .finalExchange(true) .build(); ResolvedSwapLeg expected = ResolvedSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1) .paymentEvents(NotionalExchange.of(CurrencyAmount.of(GBP, 5000d), DATE_2014_10_01)) .build(); assertEquals(test.resolve(REF_DATA), expected); }
public void test_resolve_createNotionalExchange_initialOnly() { RatePeriodSwapLeg test = RatePeriodSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1) .initialExchange(true) .intermediateExchange(false) .finalExchange(false) .build(); ResolvedSwapLeg expected = ResolvedSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1) .paymentEvents(NotionalExchange.of(CurrencyAmount.of(GBP, -5000d), DATE_2014_06_30)) .build(); assertEquals(test.resolve(REF_DATA), expected); }
public void test_resolve_createNotionalExchange_noInitial() { RatePeriodSwapLeg test = RatePeriodSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1) .initialExchange(false) .intermediateExchange(true) .finalExchange(true) .build(); ResolvedSwapLeg expected = ResolvedSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1) .paymentEvents(NotionalExchange.of(CurrencyAmount.of(GBP, 5000d), DATE_2014_10_01)) .build(); assertEquals(test.resolve(REF_DATA), expected); }
public void test_resolve_FxResetOmitInitialNotionalExchange() { RatePeriodSwapLeg test = RatePeriodSwapLeg.builder() .type(IBOR) .payReceive(PAY) .paymentPeriods(RPP1_FXRESET) .initialExchange(false) .intermediateExchange(true) .finalExchange(true) .build(); FxResetNotionalExchange finalExchange = FxResetNotionalExchange.of( CurrencyAmount.of(USD, 8000d), DATE_2014_10_01, FxIndexObservation.of(GBP_USD_WM, DATE_2014_06_28, REF_DATA)); ResolvedSwapLeg expected = ResolvedSwapLeg.builder() .type(IBOR) .payReceive(PAY) .paymentPeriods(RPP1_FXRESET) .paymentEvents(finalExchange) .build(); assertEquals(test.resolve(REF_DATA), expected); }
public void test_resolve_createNotionalExchange() { RatePeriodSwapLeg test = RatePeriodSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1) .initialExchange(true) .intermediateExchange(true) .finalExchange(true) .build(); ResolvedSwapLeg expected = ResolvedSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1) .paymentEvents( NotionalExchange.of(CurrencyAmount.of(GBP, -5000d), DATE_2014_06_30), NotionalExchange.of(CurrencyAmount.of(GBP, 5000d), DATE_2014_10_01)) .build(); assertEquals(test.resolve(REF_DATA), expected); }
public void test_resolve_FxResetOmitIntermediateNotionalExchange() { RatePeriodSwapLeg test = RatePeriodSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1_FXRESET) .initialExchange(true) .intermediateExchange(false) .finalExchange(true) .build(); FxResetNotionalExchange initialExchange = FxResetNotionalExchange.of( CurrencyAmount.of(USD, -8000d), DATE_2014_06_30, FxIndexObservation.of(GBP_USD_WM, DATE_2014_06_28, REF_DATA)); FxResetNotionalExchange finalExchange = FxResetNotionalExchange.of( CurrencyAmount.of(USD, 8000d), DATE_2014_10_01, FxIndexObservation.of(GBP_USD_WM, DATE_2014_06_28, REF_DATA)); ResolvedSwapLeg expected = ResolvedSwapLeg.builder() .type(IBOR) .payReceive(RECEIVE) .paymentPeriods(RPP1_FXRESET) .paymentEvents(initialExchange, finalExchange) .build(); assertEquals(test.resolve(REF_DATA), expected); }