public void test_of_single() { UnitParameterSensitivities test = UnitParameterSensitivities.of(ENTRY1); assertEquals(test.size(), 1); assertEquals(test.getSensitivities(), ImmutableList.of(ENTRY1)); }
public void test_findSensitivity() { UnitParameterSensitivities test = UnitParameterSensitivities.of(ENTRY1); assertEquals(test.findSensitivity(NAME1), Optional.of(ENTRY1)); assertEquals(test.findSensitivity(NAME0), Optional.empty()); }
public void test_multipliedBy_vs_combinedWith() { UnitParameterSensitivities multiplied = SENSI_2.multipliedBy(2d); UnitParameterSensitivities added = SENSI_2.combinedWith(SENSI_2); assertEquals(multiplied, added); }
public void test_combinedWith_otherEmpty() { UnitParameterSensitivities test = SENSI_1.combinedWith(UnitParameterSensitivities.empty()); assertEquals(test, SENSI_1); }
private DoubleArray sensitivitySwap(BasicFixedLeg swap, NodalCurve curve, double swapRate) { int nPayments = swap.getNumPayments(); double annuity = 0d; UnitParameterSensitivities sensi = UnitParameterSensitivities.empty(); for (int i = 0; i < nPayments - 1; i++) { double t = swap.getPaymentTime(i); double df = Math.exp(-curve.yValue(t) * t); annuity += swap.getYearFraction(i) * df; sensi = sensi.combinedWith(curve.yValueParameterSensitivity(t).multipliedBy(-df * t * swap.getYearFraction(i) * swapRate)); } int lastIndex = nPayments - 1; double t = swap.getPaymentTime(lastIndex); double df = Math.exp(-curve.yValue(t) * t); annuity += swap.getYearFraction(lastIndex) * df; sensi = sensi.combinedWith( curve.yValueParameterSensitivity(t).multipliedBy(-df * t * (1d + swap.getYearFraction(lastIndex) * swapRate))); sensi = sensi.multipliedBy(-1d / annuity); ArgChecker.isTrue(sensi.size() == 1); return sensi.getSensitivities().get(0).getSensitivity(); }
public void test_equalWithTolerance() { UnitParameterSensitivities sensUsdTotal = UnitParameterSensitivities.of(ENTRY_TOTAL_1_2); UnitParameterSensitivities sensEur = UnitParameterSensitivities.of(ENTRY3); UnitParameterSensitivities sens1plus2 = SENSI_1.combinedWith(ENTRY2); UnitParameterSensitivities sensZeroA = UnitParameterSensitivities.of(ENTRY_ZERO3); UnitParameterSensitivities sensZeroB = UnitParameterSensitivities.of(ENTRY_ZERO0); UnitParameterSensitivities sens1plus2plus0a = SENSI_1.combinedWith(ENTRY2).combinedWith(ENTRY_ZERO0); UnitParameterSensitivities sens1plus2plus0b = SENSI_1.combinedWith(ENTRY2).combinedWith(ENTRY_ZERO3); UnitParameterSensitivities sens1plus2plus0 = SENSI_1 .combinedWith(ENTRY2).combinedWith(ENTRY_ZERO0).combinedWith(ENTRY_ZERO3); UnitParameterSensitivities sens2plus0 = SENSI_2.combinedWith(sensZeroA); assertEquals(SENSI_1.equalWithTolerance(sensZeroA, TOLERENCE_CMP), false); assertEquals(SENSI_1.equalWithTolerance(SENSI_1, TOLERENCE_CMP), true); assertEquals(SENSI_1.equalWithTolerance(SENSI_2, TOLERENCE_CMP), false); assertEquals(SENSI_1.equalWithTolerance(sensUsdTotal, TOLERENCE_CMP), false); assertEquals(SENSI_1.equalWithTolerance(sensEur, TOLERENCE_CMP), false); assertEquals(SENSI_1.equalWithTolerance(sens1plus2, TOLERENCE_CMP), false); assertEquals(SENSI_1.equalWithTolerance(sens2plus0, TOLERENCE_CMP), false); assertEquals(SENSI_2.equalWithTolerance(sensZeroA, TOLERENCE_CMP), false); assertEquals(SENSI_2.equalWithTolerance(SENSI_1, TOLERENCE_CMP), false); assertEquals(SENSI_2.equalWithTolerance(SENSI_2, TOLERENCE_CMP), true); assertEquals(SENSI_2.equalWithTolerance(sensUsdTotal, TOLERENCE_CMP), false); assertEquals(SENSI_2.equalWithTolerance(sensEur, TOLERENCE_CMP), false); assertEquals(SENSI_2.equalWithTolerance(sens1plus2, TOLERENCE_CMP), false); assertEquals(SENSI_2.equalWithTolerance(sens2plus0, TOLERENCE_CMP), true); assertEquals(sensZeroA.equalWithTolerance(sensZeroA, TOLERENCE_CMP), true); assertEquals(sensZeroA.equalWithTolerance(SENSI_1, TOLERENCE_CMP), false); assertEquals(sensZeroA.equalWithTolerance(SENSI_2, TOLERENCE_CMP), false);
public void test_value_parameter_sensitivity() { for (int i = 0; i < TEST_MONTHS.length; i++) { YearMonth fixingMonth = TEST_OBS[i].getFixingMonth(); if (!USCPI_TS.containsDate(fixingMonth.atEndOfMonth())) { InflationRateSensitivity ptsExpected = (InflationRateSensitivity) InflationRateSensitivity.of(TEST_OBS[i], 1d); CurrencyParameterSensitivities psComputed = INSTANCE.parameterSensitivity(ptsExpected); double x = YearMonth.from(VAL_DATE).until(fixingMonth, MONTHS); UnitParameterSensitivities sens1 = UnitParameterSensitivities.of(CURVE_INFL.yValueParameterSensitivity(x)); CurrencyParameterSensitivities psExpected = sens1.multipliedBy(ptsExpected.getCurrency(), ptsExpected.getSensitivity()); assertTrue(psComputed.equalWithTolerance(psExpected, TOLERANCE_DELTA), "test " + i); } } }
public void test_combinedWith_one_normalized() { UnitParameterSensitivities test = SENSI_1.combinedWith(ENTRY2); assertEquals(test.getSensitivities(), ImmutableList.of(ENTRY_TOTAL_1_2)); }
public void test_empty() { UnitParameterSensitivities test = UnitParameterSensitivities.empty(); assertEquals(test.size(), 0); assertEquals(test.getSensitivities().size(), 0); }
private UnitParameterSensitivities unitParameterSensitivity(YearMonth month) { // If fixing in the past, check time series and returns the historic month price index if present if (month.isBefore(YearMonth.from(valuationDate))) { if (fixings.get(month.atEndOfMonth()).isPresent()) { return UnitParameterSensitivities.empty(); } } double nbMonth = numberOfMonths(month); return UnitParameterSensitivities.of(curve.yValueParameterSensitivity(nbMonth)); }
public void test_multipliedBy() { UnitParameterSensitivities multiplied = SENSI_1.multipliedBy(FACTOR1); DoubleArray test = multiplied.getSensitivities().get(0).getSensitivity(); for (int i = 0; i < VECTOR1.size(); i++) { assertEquals(test.get(i), VECTOR1.get(i) * FACTOR1); } }
public void test_getSensitivity() { UnitParameterSensitivities test = UnitParameterSensitivities.of(ENTRY1); assertEquals(test.getSensitivity(NAME1), ENTRY1); assertThrowsIllegalArg(() -> test.getSensitivity(NAME0)); }
/** * Obtains an instance from an array of sensitivity entries. * <p> * The order of sensitivities is typically unimportant, however it is retained * and exposed in {@link #equals(Object)}. * * @param sensitivities the sensitivities * @return the sensitivities instance */ public static UnitParameterSensitivities of(UnitParameterSensitivity... sensitivities) { return of(Arrays.asList(sensitivities)); }
public void test_mapSensitivities() { UnitParameterSensitivities multiplied = SENSI_1.mapSensitivities(a -> 1 / a); DoubleArray test = multiplied.getSensitivities().get(0).getSensitivity(); for (int i = 0; i < VECTOR1.size(); i++) { assertEquals(test.get(i), 1 / VECTOR1.get(i)); } }
@Override public CurrencyParameterSensitivities parameterSensitivity(InflationRateSensitivity pointSensitivity) { UnitParameterSensitivities sens = unitParameterSensitivity(pointSensitivity.getObservation().getFixingMonth()); return sens.multipliedBy(pointSensitivity.getCurrency(), pointSensitivity.getSensitivity()); }
/** * Gets a single sensitivity instance by name. * * @param name the curve name to find * @return the matching sensitivity * @throws IllegalArgumentException if the name and currency do not match an entry */ public UnitParameterSensitivity getSensitivity(MarketDataName<?> name) { return findSensitivity(name) .orElseThrow(() -> new IllegalArgumentException(Messages.format( "Unable to find sensitivity: {}", name))); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 1226228605: // sensitivities return ((UnitParameterSensitivities) bean).getSensitivities(); } return super.propertyGet(bean, propertyName, quiet); }
/** * Returns an instance with the sensitivity values multiplied by the specified factor. * <p> * The result will consist of the same entries, but with each sensitivity value multiplied. * This instance is immutable and unaffected by this method. * * @param factor the multiplicative factor * @return an instance based on this one, with each sensitivity multiplied by the factor */ public UnitParameterSensitivities multipliedBy(double factor) { return mapSensitivities(s -> s * factor); }