@Override public Double apply(final Double x) { InterpolatedNodalCurve tempCurve = curve.withParameter(curveIndex, x); double sum = cachedSense; for (int i = index1; i < index2; i++) { double t = swap.getPaymentTime(i); sum += swap.getPaymentAmounts(i, swapRate) * t * Math.exp(-tempCurve.yValue(t) * t) * tempCurve.yValueParameterSensitivity(t).getSensitivity().get(curveIndex); } return sum; }
public void test_yValueParameterSensitivity() { for (int i = 0; i < NUM_SAMPLES; ++i) { UnitParameterSensitivity computed = COMBINED_CURVE.yValueParameterSensitivity(X_SAMPLES.get(i)); UnitParameterSensitivity baseSens = BASE_CURVE.yValueParameterSensitivity(X_SAMPLES.get(i)); UnitParameterSensitivity spreadSens = SPREAD_CURVE.yValueParameterSensitivity( X_SAMPLES.get(i)); assertEquals(computed.split(), ImmutableList.of(baseSens, spreadSens)); } }
public void yParameterSensitivity() { for (int i = 0; i < X_SAMPLE.length; i++) { UnitParameterSensitivity dComputed = ADD_FIXED_CURVE.yValueParameterSensitivity(X_SAMPLE[i]); UnitParameterSensitivity dExpected = SPREAD_CURVE.yValueParameterSensitivity(X_SAMPLE[i]); assertTrue(dComputed.compareKey(dExpected) == 0); assertTrue(dComputed.getSensitivity().equalWithTolerance(dExpected.getSensitivity(), TOLERANCE_Y)); } }
public void test_yValueParameterSensitivity() { InterpolatedNodalCurve curve = InterpolatedNodalCurve.of( METADATA, DoubleArray.of(0, 1), DoubleArray.of(2, 2.5), CurveInterpolators.LINEAR); Curve absoluteShiftedCurve = ParallelShiftedCurve.absolute(curve, 1); Curve relativeShiftedCurve = ParallelShiftedCurve.relative(curve, 0.2); UnitParameterSensitivity expected = curve.yValueParameterSensitivity(0.1); assertThat(absoluteShiftedCurve.yValueParameterSensitivity(0.1)).isEqualTo(expected); assertThat(relativeShiftedCurve.yValueParameterSensitivity(0.1)).isEqualTo(expected); }
public void test_lookup() { InterpolatedNodalCurve test = InterpolatedNodalCurve.of(METADATA, XVALUES, YVALUES, INTERPOLATOR); BoundCurveInterpolator interp = INTERPOLATOR.bind(XVALUES, YVALUES, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); assertThat(test.yValue(XVALUES.get(0))).isEqualTo(YVALUES.get(0)); assertThat(test.yValue(XVALUES.get(1))).isEqualTo(YVALUES.get(1)); assertThat(test.yValue(XVALUES.get(2))).isEqualTo(YVALUES.get(2)); assertThat(test.yValue(10d)).isEqualTo(interp.interpolate(10d)); assertThat(test.yValueParameterSensitivity(10d).getMarketDataName()).isEqualTo(CURVE_NAME); assertThat(test.yValueParameterSensitivity(10d).getSensitivity()).isEqualTo(interp.parameterSensitivity(10d)); assertThat(test.firstDerivative(10d)).isEqualTo(interp.firstDerivative(10d)); }
double df = Math.exp(-curve.yValue(t) * t); temp += paymentAmounts[i] * df; temp2 += paymentAmounts[i] * t * df * curve.yValueParameterSensitivity(t).getSensitivity().get(curveIndex); i1++; } else if (t >= t2) { double df = Math.exp(-curve.yValue(t) * t); temp += paymentAmounts[i] * df; temp2 -= paymentAmounts[i] * t * df * curve.yValueParameterSensitivity(t).getSensitivity().get(curveIndex); i2--;
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 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_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); }