/** * Calculates the par spread curve sensitivity. * * @param deposit the product * @param provider the rates provider * @return the par spread curve sensitivity */ public PointSensitivities parSpreadSensitivity(ResolvedIborFixingDeposit deposit, RatesProvider provider) { return forwardRateSensitivity(deposit, provider).build(); }
public void test_presentValueSensitivityModelParamsVolatility() { PointSensitivities computedWithPayLeg = PRICER.presentValueSensitivityModelParamsVolatility(TRADE_PAYLEG, RATES, VOLS).build(); PointSensitivities computedWithPremium = PRICER.presentValueSensitivityModelParamsVolatility(TRADE_PREMIUM, RATES, VOLS).build(); PointSensitivities pvOneLeg = PRICER_PRODUCT.presentValueSensitivityModelParamsVolatility(CAP_ONE_LEG, RATES, VOLS).build(); PointSensitivities pvTwoLegs = PRICER_PRODUCT.presentValueSensitivityModelParamsVolatility(CAP_TWO_LEGS, RATES, VOLS).build(); assertEquals(computedWithPayLeg, pvTwoLegs); assertEquals(computedWithPremium, pvOneLeg); }
public void test_of_list_size2() { PointSensitivities test = PointSensitivityBuilder.of(ImmutableList.of(SENS, SENS)).build(); assertEquals(test.size(), 2); assertEquals(test.getSensitivities().get(0), SENS); assertEquals(test.getSensitivities().get(1), SENS); }
public void present_value_sensitivity_at_expiry() { PointSensitivities sensiRec = PRICER_SWAPTION_BLACK.presentValueSensitivityRatesStickyStrike( SWAPTION_REC_AT_EXPIRY, MULTI_USD, BLACK_VOLS_USD_STD).build(); for (PointSensitivity sensi : sensiRec.getSensitivities()) { assertEquals(Math.abs(sensi.getSensitivity()), 0d); } PointSensitivities sensiPay = PRICER_SWAPTION_BLACK.presentValueSensitivityRatesStickyStrike( SWAPTION_PAY_AT_EXPIRY, MULTI_USD, BLACK_VOLS_USD_STD).build(); PointSensitivities sensiPaySwap = PRICER_SWAP.presentValueSensitivity(RSWAP_PAY, MULTI_USD).build(); assertTrue(MULTI_USD.parameterSensitivity(sensiPay).equalWithTolerance( MULTI_USD.parameterSensitivity(sensiPaySwap), TOLERANCE_PV)); }
public void test_currencyExposure_singleCurrency() { PointSensitivities point = SWAP_PRODUCT_PRICER.parRateSensitivity(SWAP, RATES_GBP).build(); MultiCurrencyAmount expected = RATES_GBP.currencyExposure(point) .plus(SWAP_PRODUCT_PRICER.presentValue(SWAP, RATES_GBP)); MultiCurrencyAmount computed = SWAP_PRODUCT_PRICER.currencyExposure(SWAP, RATES_GBP); assertEquals(computed, expected); MultiCurrencyAmount fromTrade = SWAP_TRADE_PRICER.currencyExposure(SWAP_TRADE, RATES_GBP); assertEquals(fromTrade, computed); }
public void test_presentValueSensitivityVolatility_shifted() { PointSensitivityBuilder pointCaplet = PRICER.presentValueSensitivityModelParamsVolatility(CAPLET_LONG, RATES, SHIFTED_VOLS); CurrencyParameterSensitivity computedCaplet = SHIFTED_VOLS.parameterSensitivity(pointCaplet.build()).getSensitivities().get(0); PointSensitivityBuilder pointFloorlet = PRICER.presentValueSensitivityModelParamsVolatility(FLOORLET_SHORT, RATES, SHIFTED_VOLS); CurrencyParameterSensitivity computedFloorlet = SHIFTED_VOLS.parameterSensitivity(pointFloorlet.build()).getSensitivities().get(0); testSurfaceSensitivity(computedCaplet, SHIFTED_VOLS, v -> PRICER.presentValue(CAPLET_LONG, RATES, v)); testSurfaceSensitivity(computedFloorlet, SHIFTED_VOLS, v -> PRICER.presentValue(FLOORLET_SHORT, RATES, v)); }
public void present_value_sensitivity_premium_past() { PointSensitivities pvcsTrade = PRICER_TRADE .presentValueSensitivityRatesStickyStrike(SWAPTION_PREPAST_LONG_REC, MULTI_USD, NORMAL_VOLS_USD); PointSensitivityBuilder pvcsProduct = PRICER_PRODUCT .presentValueSensitivityRatesStickyStrike(SWAPTION_LONG_REC, MULTI_USD, NORMAL_VOLS_USD); CurrencyParameterSensitivities pvpsTrade = MULTI_USD.parameterSensitivity(pvcsTrade); CurrencyParameterSensitivities pvpsProduct = MULTI_USD.parameterSensitivity(pvcsProduct.build()); assertTrue(pvpsTrade.equalWithTolerance(pvpsProduct, TOLERANCE_PV_DELTA)); }
public void present_value_sensitivity_premium_valuedate() { PointSensitivities pvcsTrade = PRICER_TRADE .presentValueSensitivityRatesStickyModel(SWAPTION_PRETOD_LONG_REC, RATE_PROVIDER, VOLS); PointSensitivityBuilder pvcsProduct = PRICER_PRODUCT .presentValueSensitivityRatesStickyModel(SWAPTION_LONG_REC, RATE_PROVIDER, VOLS); CurrencyParameterSensitivities pvpsTrade = RATE_PROVIDER.parameterSensitivity(pvcsTrade); CurrencyParameterSensitivities pvpsProduct = RATE_PROVIDER.parameterSensitivity(pvcsProduct.build()); assertTrue(pvpsTrade.equalWithTolerance(pvpsProduct, NOTIONAL * NOTIONAL * TOL)); }
public void present_value_sensitivity_premium_past() { PointSensitivities pvcsTrade = PRICER_TRADE.presentValueSensitivityRatesStickyStrike(SWAPTION_PREPAST_LONG_REC, RATE_PROVIDER, VOLS); PointSensitivityBuilder pvcsProduct = PRICER_PRODUCT.presentValueSensitivityRatesStickyStrike(SWAPTION_LONG_REC, RATE_PROVIDER, VOLS); CurrencyParameterSensitivities pvpsTrade = RATE_PROVIDER.parameterSensitivity(pvcsTrade); CurrencyParameterSensitivities pvpsProduct = RATE_PROVIDER.parameterSensitivity(pvcsProduct.build()); assertTrue(pvpsTrade.equalWithTolerance(pvpsProduct, NOTIONAL * TOL)); }
public void test_currencyExposure() { ResolvedSwapLeg expSwapLeg = IBOR_SWAP_LEG_REC_GBP; PointSensitivities point = PRICER_LEG.presentValueSensitivity(expSwapLeg, RATES_GBP).build(); MultiCurrencyAmount expected = RATES_GBP.currencyExposure(point).plus(PRICER_LEG.presentValue(expSwapLeg, RATES_GBP)); MultiCurrencyAmount computed = PRICER_LEG.currencyExposure(expSwapLeg, RATES_GBP); assertEquals(computed, expected); }
public void present_value_sensitivity_FD() { PointSensitivities pvpt = PRICER_SWAPTION_NORMAL .presentValueSensitivityRatesStickyStrike(SWAPTION_SHORT_REC, MULTI_USD, NORMAL_VOLS_USD_FLAT).build(); CurrencyParameterSensitivities pvpsAd = MULTI_USD.parameterSensitivity(pvpt); CurrencyParameterSensitivities pvpsFd = FINITE_DIFFERENCE_CALCULATOR.sensitivity(MULTI_USD, (p) -> PRICER_SWAPTION_NORMAL.presentValue(SWAPTION_SHORT_REC, p, NORMAL_VOLS_USD_FLAT)); assertTrue(pvpsAd.equalWithTolerance(pvpsFd, TOLERANCE_PV_DELTA)); }
public void test_presentValueSensitivityWithZSpread_continuous() { PointSensitivityBuilder point = PRICER.presentValueSensitivityWithZSpread(PRODUCT, PROVIDER, Z_SPREAD, CONTINUOUS, 0); CurrencyParameterSensitivities computed = PROVIDER.parameterSensitivity(point.build()); CurrencyParameterSensitivities expected = FD_CAL.sensitivity( PROVIDER, p -> PRICER.presentValueWithZSpread(PRODUCT, p, Z_SPREAD, CONTINUOUS, 0)); assertTrue(computed.equalWithTolerance(expected, 20d * NOTIONAL * EPS)); }
public void test_presentValueSensitivityWithZSpread_periodic() { PointSensitivityBuilder point = PRICER.presentValueSensitivityWithZSpread( PRODUCT, PROVIDER, Z_SPREAD, PERIODIC, PERIOD_PER_YEAR); CurrencyParameterSensitivities computed = PROVIDER.parameterSensitivity(point.build()); CurrencyParameterSensitivities expected = FD_CAL.sensitivity(PROVIDER, p -> PRICER.presentValueWithZSpread(PRODUCT, p, Z_SPREAD, PERIODIC, PERIOD_PER_YEAR)); assertTrue(computed.equalWithTolerance(expected, 20d * NOTIONAL * EPS)); }
public void test_presentValueSensitivity_events() { ResolvedSwapLeg expSwapLeg = IBOR_SWAP_LEG_REC_GBP; PointSensitivities point = PRICER_LEG.presentValueSensitivityEventsInternal(expSwapLeg, RATES_GBP).build(); CurrencyParameterSensitivities psAd = RATES_GBP.parameterSensitivity(point); CurrencyParameterSensitivities psFd = FINITE_DIFFERENCE_CALCULATOR.sensitivity(RATES_GBP, (p) -> CurrencyAmount.of(GBP, PRICER_LEG.presentValueEventsInternal(expSwapLeg, p))); assertTrue(psAd.equalWithTolerance(psFd, TOLERANCE_DELTA)); }
public void test_dirtyPriceNominalPriceFromCurvesSensitivity_exCoupon() { PointSensitivities point = PRICER.dirtyNominalPriceSensitivity( PRODUCT_EX_COUPON, RATES_PROVIDER, ISSUER_RATES_PROVIDER, REF_DATA).build(); CurrencyParameterSensitivities computed1 = RATES_PROVIDER.parameterSensitivity(point); CurrencyParameterSensitivities computed2 = ISSUER_RATES_PROVIDER.parameterSensitivity(point); CurrencyParameterSensitivities expected = fdPriceSensitivity(PRODUCT_EX_COUPON, RATES_PROVIDER, ISSUER_RATES_PROVIDER); assertTrue(expected.equalWithTolerance(computed1.combinedWith(computed2), EPS * NOTIONAL)); }
public void test_dirtyPriceNominalPriceFromCurvesSensitivityWithZSpread_exCoupon() { PointSensitivities point = PRICER.dirtyNominalPriceSensitivityWithZSpread( PRODUCT_EX_COUPON, RATES_PROVIDER, ISSUER_RATES_PROVIDER, REF_DATA, Z_SPREAD, CONTINUOUS, 0).build(); CurrencyParameterSensitivities computed1 = RATES_PROVIDER.parameterSensitivity(point); CurrencyParameterSensitivities computed2 = ISSUER_RATES_PROVIDER.parameterSensitivity(point); CurrencyParameterSensitivities expected = fdPriceSensitivityWithZSpread( PRODUCT_EX_COUPON, RATES_PROVIDER, ISSUER_RATES_PROVIDER, Z_SPREAD, CONTINUOUS, 0); assertTrue(expected.equalWithTolerance(computed1.combinedWith(computed2), EPS * NOTIONAL)); }
public void test_dirtyPriceSensitivityWithZspread_continuous() { PointSensitivityBuilder point = PRICER.dirtyPriceSensitivityWithZspread(PRODUCT, PROVIDER, REF_DATA, Z_SPREAD, CONTINUOUS, 0); CurrencyParameterSensitivities computed = PROVIDER.parameterSensitivity(point.build()); CurrencyParameterSensitivities expected = FD_CAL.sensitivity(PROVIDER, p -> CurrencyAmount.of( EUR, PRICER.dirtyPriceFromCurvesWithZSpread(PRODUCT, p, REF_DATA, Z_SPREAD, CONTINUOUS, 0))); assertTrue(computed.equalWithTolerance(expected, NOTIONAL * EPS)); }
public void test_parSpreadSensitivity_iborIbor() { ResolvedSwap expanded = SWAP_USD_LIBOR_3M_LIBOR_6M_5Y.getProduct().resolve(REF_DATA); PointSensitivities point = SWAP_PRODUCT_PRICER.parSpreadSensitivity(expanded, MULTI_USD).build(); CurrencyParameterSensitivities prAd = MULTI_USD.parameterSensitivity(point); CurrencyParameterSensitivities prFd = FINITE_DIFFERENCE_CALCULATOR.sensitivity( MULTI_USD, p -> CurrencyAmount.of(USD, SWAP_PRODUCT_PRICER.parSpread(expanded, p))); assertTrue(prAd.equalWithTolerance(prFd, TOLERANCE_RATE_DELTA)); }
public void test_parSpreadSensitivity_iborCmpIbor_1Period() { ResolvedSwap swap = USD_LIBOR_3M_LIBOR_6M .createTrade(MULTI_USD.getValuationDate(), Tenor.TENOR_6M, BUY, NOTIONAL_SWAP, SPREAD, REF_DATA).resolve(REF_DATA).getProduct(); PointSensitivities point = SWAP_PRODUCT_PRICER.parSpreadSensitivity(swap, MULTI_USD).build(); CurrencyParameterSensitivities prAd = MULTI_USD.parameterSensitivity(point); CurrencyParameterSensitivities prFd = FINITE_DIFFERENCE_CALCULATOR.sensitivity( MULTI_USD, p -> CurrencyAmount.of(USD, SWAP_PRODUCT_PRICER.parSpread(swap, p))); assertTrue(prAd.equalWithTolerance(prFd, TOLERANCE_RATE_DELTA)); }
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)); }