/** * Obtains an instance from an array of sensitivity entries. * <p> * The sensitivities are sorted using {@link CurrencyParameterSensitivity#compareKey}. * * @param sensitivities the sensitivities * @return the sensitivities instance */ public static CurrencyParameterSensitivities of(CurrencyParameterSensitivity... sensitivities) { return of(Arrays.asList(sensitivities)); }
/** * Returns the diagonal part of the sensitivity values. * * @return the diagonal part */ public CurrencyParameterSensitivities diagonal() { return CurrencyParameterSensitivities.of(sensitivities.stream().map(s -> s.diagonal()).collect(Collectors.toList())); }
@Override public CurrencyParameterSensitivities createParameterSensitivity(Currency currency, DoubleArray sensitivities) { return CurrencyParameterSensitivities.of(curve.createParameterSensitivity(currency, sensitivities)); }
public void test_of_single() { CurrencyParameterSensitivities test = CurrencyParameterSensitivities.of(ENTRY_USD); assertEquals(test.size(), 1); assertEquals(test.getSensitivities(), ImmutableList.of(ENTRY_USD)); }
public void test_of_list_notNormalized() { ImmutableList<CurrencyParameterSensitivity> list = ImmutableList.of(ENTRY_USD, ENTRY_EUR); CurrencyParameterSensitivities test = CurrencyParameterSensitivities.of(list); assertEquals(test.size(), 2); assertEquals(test.getSensitivities(), ImmutableList.of(ENTRY_USD, ENTRY_EUR)); }
public void test_of_list_normalized() { ImmutableList<CurrencyParameterSensitivity> list = ImmutableList.of(ENTRY_USD, ENTRY_USD2); CurrencyParameterSensitivities test = CurrencyParameterSensitivities.of(list); assertEquals(test.size(), 1); assertEquals(test.getSensitivities(), ImmutableList.of(ENTRY_USD_TOTAL)); }
public void test_findSensitivity() { CurrencyParameterSensitivities test = CurrencyParameterSensitivities.of(ENTRY_USD); assertEquals(test.findSensitivity(NAME1, USD), Optional.of(ENTRY_USD)); assertEquals(test.findSensitivity(NAME1, EUR), Optional.empty()); assertEquals(test.findSensitivity(NAME0, USD), Optional.empty()); assertEquals(test.findSensitivity(NAME0, EUR), Optional.empty()); }
@Override public CurrencyParameterSensitivities parameterSensitivity(ZeroRateSensitivity pointSensitivity) { double yearFraction = pointSensitivity.getYearFraction(); UnitParameterSensitivity unitSens = curve.yValueParameterSensitivity(yearFraction); CurrencyParameterSensitivity curSens = unitSens.multipliedBy(pointSensitivity.getCurrency(), pointSensitivity.getSensitivity()); return CurrencyParameterSensitivities.of(curSens); }
@Override public CurrencyParameterSensitivities parameterSensitivity(ZeroRateSensitivity pointSens) { double yearFraction = pointSens.getYearFraction(); if (Math.abs(yearFraction) < EFFECTIVE_ZERO) { return CurrencyParameterSensitivities.empty(); // Discount factor in 0 is always 1, no sensitivity. } double discountFactor = discountFactor(yearFraction); UnitParameterSensitivity unitSens = curve.yValueParameterSensitivity(yearFraction); CurrencyParameterSensitivity curSens = unitSens .multipliedBy(-1d / (yearFraction * discountFactor)) .multipliedBy(pointSens.getCurrency(), pointSens.getSensitivity()); return CurrencyParameterSensitivities.of(curSens); }
public void test_mergedWith() { CurrencyParameterSensitivity entry1 = CurrencyParameterSensitivity.of(NAME1, METADATA1B, USD, VECTOR_USD1); CurrencyParameterSensitivity entry2 = CurrencyParameterSensitivity.of(NAME1, METADATA1B.subList(0, 2), USD, VECTOR_USD1.subArray(0, 2)); CurrencyParameterSensitivities base1 = CurrencyParameterSensitivities.of(entry1); CurrencyParameterSensitivities base2 = CurrencyParameterSensitivities.of(entry2); CurrencyParameterSensitivities test = base1.mergedWith(base2); assertEquals(test.getSensitivities().size(), 1); assertEquals(test.getSensitivities().get(0).getParameterMetadata(), METADATA1B); assertEquals(test.getSensitivities().get(0).getSensitivity(), DoubleArray.of(200, 400, 300, 123)); }
public void test_withMarketDataNames() { CurrencyParameterSensitivity entry1 = CurrencyParameterSensitivity.of(NAME1, METADATA1B, USD, DoubleArray.of(0, 1, 2, 3)); CurrencyParameterSensitivities base = CurrencyParameterSensitivities.of(entry1); CurrencyParameterSensitivities test = base.withMarketDataNames(name -> NAME2); assertEquals(SENSI_1.getSensitivities().get(0).getMarketDataName(), NAME1); assertEquals(test.getSensitivities().get(0).getMarketDataName(), NAME2); }
public void wrong_metadata() { List<ParameterMetadata> pmdInput = new ArrayList<>(); pmdInput.add(TenorParameterMetadata.of(Tenor.TENOR_10M)); CurrencyParameterSensitivity s1 = CurrencyParameterSensitivity.of(NAME_1, pmdInput, CCY_1, DoubleArray.of(SENSITIVITY_AMOUNT)); CurrencyParameterSensitivities s2 = CurrencyParameterSensitivities.of(s1); assertThrowsIllegalArg(() -> CurveSensitivityUtils.linearRebucketing(s2, TARGET_DATES)); }
public void test_withParameterMetadatas() { CurrencyParameterSensitivity entry1 = CurrencyParameterSensitivity.of(NAME1, METADATA1B, USD, DoubleArray.of(0, 1, 2, 3)); CurrencyParameterSensitivities base = CurrencyParameterSensitivities.of(entry1); CurrencyParameterSensitivities test = base.withParameterMetadatas(md -> TENOR_MD_1Y); assertEquals(test.getSensitivities().get(0).getParameterMetadata().size(), 1); assertEquals(test.getSensitivities().get(0).getParameterMetadata(0), TENOR_MD_1Y); assertEquals(test.getSensitivities().get(0).getSensitivity(), DoubleArray.of(6)); }
@Override public CurrencyParameterSensitivities parameterSensitivity(IborRateSensitivity pointSensitivity) { LocalDate maturityDate = pointSensitivity.getObservation().getMaturityDate(); double relativeYearFraction = relativeYearFraction(maturityDate); UnitParameterSensitivity unitSensitivity = curve.yValueParameterSensitivity(relativeYearFraction); CurrencyParameterSensitivity sensitivity = unitSensitivity.multipliedBy(pointSensitivity.getCurrency(), pointSensitivity.getSensitivity()); return CurrencyParameterSensitivities.of(sensitivity); }
public void missing_metadata() { CurrencyParameterSensitivity s1 = CurrencyParameterSensitivity.of(NAME_1, CCY_1, DoubleArray.of(SENSITIVITY_AMOUNT)); CurrencyParameterSensitivities s2 = CurrencyParameterSensitivities.of(s1); assertThrowsIllegalArg(() -> CurveSensitivityUtils.linearRebucketing(s2, TARGET_DATES)); final LocalDate sensitivityDate = LocalDate.of(2015, 8, 18); assertThrowsIllegalArg(() -> CurveSensitivityUtils.linearRebucketing(s2, TARGET_DATES, sensitivityDate)); }
public void test_getSensitivity() { CurrencyParameterSensitivities test = CurrencyParameterSensitivities.of(ENTRY_USD); assertEquals(test.getSensitivity(NAME1, USD), ENTRY_USD); assertThrowsIllegalArg(() -> test.getSensitivity(NAME1, EUR)); assertThrowsIllegalArg(() -> test.getSensitivity(NAME0, USD)); assertThrowsIllegalArg(() -> test.getSensitivity(NAME0, EUR)); }
public void test_unitParameterSensitivity() { IsdaCreditDiscountFactors test = IsdaCreditDiscountFactors.of(USD, VALUATION, CURVE); ZeroRateSensitivity sens = test.zeroRatePointSensitivity(DATE_AFTER); double relativeYearFraction = ACT_365F.relativeYearFraction(VALUATION, DATE_AFTER); CurrencyParameterSensitivities expected = CurrencyParameterSensitivities.of( CURVE.yValueParameterSensitivity(relativeYearFraction) .multipliedBy(sens.getCurrency(), sens.getSensitivity())); assertEquals(test.parameterSensitivity(sens), expected); }
public void test_unitParameterSensitivity() { ZeroRateDiscountFactors test = ZeroRateDiscountFactors.of(GBP, DATE_VAL, CURVE); ZeroRateSensitivity sens = test.zeroRatePointSensitivity(DATE_AFTER); double relativeYearFraction = ACT_365F.relativeYearFraction(DATE_VAL, DATE_AFTER); CurrencyParameterSensitivities expected = CurrencyParameterSensitivities.of( CURVE.yValueParameterSensitivity(relativeYearFraction) .multipliedBy(sens.getCurrency(), sens.getSensitivity())); assertEquals(test.parameterSensitivity(sens), expected); }
public void tokens() { CurrencyParameterSensitivity sensitivity1 = CurrencyParameterSensitivity.of(CurveName.of("curve1"), Currency.AUD, DoubleArray.EMPTY); CurrencyParameterSensitivity sensitivity2 = CurrencyParameterSensitivity.of(CurveName.of("curve2"), Currency.CHF, DoubleArray.EMPTY); CurrencyParameterSensitivities sensitivities = CurrencyParameterSensitivities.of(sensitivity1, sensitivity2); Set<String> expected = ImmutableSet.of("curve1", "curve2", "aud", "chf"); CurrencyParameterSensitivitiesTokenEvaluator evaluator = new CurrencyParameterSensitivitiesTokenEvaluator(); assertThat(evaluator.tokens(sensitivities)).isEqualTo(expected); }
public void test_currencyParameterSensitivity() { SimpleDiscountFactors test = SimpleDiscountFactors.of(GBP, DATE_VAL, CURVE); ZeroRateSensitivity sens = test.zeroRatePointSensitivity(DATE_AFTER); double relativeYearFraction = ACT_365F.relativeYearFraction(DATE_VAL, DATE_AFTER); double discountFactor = CURVE.yValue(relativeYearFraction); CurrencyParameterSensitivities expected = CurrencyParameterSensitivities.of( CURVE.yValueParameterSensitivity(relativeYearFraction) .multipliedBy(-1d / discountFactor / relativeYearFraction) .multipliedBy(sens.getCurrency(), sens.getSensitivity())); assertEquals(test.parameterSensitivity(sens), expected); }