/** * Returns the total of the sensitivity values. * <p> * The result is the total of all values, as converted to the specified currency. * Any FX conversion that is required will use rates from the provider. * * @param resultCurrency the currency of the result * @param rateProvider the provider of FX rates * @return the total sensitivity * @throws RuntimeException if no FX rate could be found */ public CurrencyAmount total(Currency resultCurrency, FxRateProvider rateProvider) { CurrencyParameterSensitivities converted = convertedTo(resultCurrency, rateProvider); double total = converted.sensitivities.stream() .mapToDouble(s -> s.getSensitivity().sum()) .sum(); return CurrencyAmount.of(resultCurrency, total); }
public void test_convertedTo_multipleCurrency() { CurrencyParameterSensitivities test = SENSI_2.convertedTo(USD, FX_RATE); assertEquals(test.getSensitivities(), ImmutableList.of(ENTRY_USD2, ENTRY_EUR_IN_USD)); }
public void test_convertedTo_singleCurrency() { CurrencyParameterSensitivities test = SENSI_1.convertedTo(USD, FxMatrix.empty()); assertEquals(test.getSensitivities(), ImmutableList.of(ENTRY_USD)); }
public void test_convertedTo_multipleCurrency_mergeWhenSameName() { CurrencyParameterSensitivities test = SENSI_1.combinedWith(ENTRY_USD2_IN_EUR).convertedTo(USD, FX_RATE); assertEquals(test.getSensitivities(), ImmutableList.of(ENTRY_USD_TOTAL)); }
/** * Converts the sensitivities in this instance to an equivalent in the specified currency. * <p> * Any FX conversion that is required will use rates from the provider. * * @param resultCurrency the currency of the result * @param rateProvider the provider of FX rates * @return the sensitivity object expressed in terms of the result currency * @throws RuntimeException if no FX rate could be found */ @Override public CurveSensitivities convertedTo(Currency resultCurrency, FxRateProvider rateProvider) { return new CurveSensitivities( info, MapStream.of(typedSensitivities) .mapValues(v -> v.convertedTo(resultCurrency, rateProvider)) .toMap()); }
public void test_presentValueCurveSensitivityVsForex() { PointSensitivities pvcsNDF = PRICER.presentValueSensitivity(NDF, PROVIDER).normalized(); CurrencyParameterSensitivities sensiNDF = PROVIDER.parameterSensitivity(pvcsNDF); PointSensitivities pvcsFX = PRICER_FX.presentValueSensitivity(FOREX, PROVIDER).normalized(); CurrencyParameterSensitivities sensiFX = PROVIDER.parameterSensitivity(pvcsFX); assertTrue(sensiNDF.equalWithTolerance(sensiFX.convertedTo(USD, PROVIDER), NOMINAL_USD * TOL)); }
PRICER.presentValueSensitivityModelParamsVolatility(CALL_DKI_BASE, RATE_PROVIDER, VOLS); CurrencyParameterSensitivity pvSensiBase = VOLS .parameterSensitivity((FxOptionSensitivity) pointBase).convertedTo(EUR, RATE_PROVIDER).getSensitivities().get(0); PointSensitivityBuilder pointPut = PRICER.presentValueSensitivityModelParamsVolatility(PUT_DKO, RATE_PROVIDER, VOLS).multipliedBy(-1d); PRICER.presentValueSensitivityModelParamsVolatility(PUT_DKO_BASE, RATE_PROVIDER, VOLS).multipliedBy(-1d); CurrencyParameterSensitivity pvSensiPutBase = VOLS .parameterSensitivity((FxOptionSensitivity) pointPutBase).convertedTo(EUR, RATE_PROVIDER).getSensitivities().get(0); double[] computed = pvSensi.getSensitivity().toArray(); double[] computedBase = pvSensiBase.getSensitivity().toArray();
VOLS); CurrencyParameterSensitivities pvSensiBase = RATE_PROVIDER.parameterSensitivity(pointBase.build()).convertedTo(EUR, RATE_PROVIDER); double[] eurSensiBase = new double[] {0.0, 0.0, 0.0, -5.885393657463378E7, -4.247477498074986E7 }; double[] usdSensiBase = new double[] {0.0, 0.0, 0.0, 4.663853277047497E7, 3.365894110322015E7 }; PRICER.presentValueSensitivityRatesStickyStrike(PUT_DKO_BASE, RATE_PROVIDER, VOLS).multipliedBy(-1d); CurrencyParameterSensitivities pvSensiPutBase = RATE_PROVIDER.parameterSensitivity(pointPutBase.build()).convertedTo(EUR, RATE_PROVIDER); double[] eurSensiPutBase = new double[] {0.0, 0.0, 0.0, 24062.637495868825, 17365.96007956571 }; double[] usdSensiPutBase = new double[] {0.0, 0.0, 0.0, -44888.77092190999, -32396.141278548253 };