@Override public SabrInterestRateParameters withPerturbation(ParameterPerturbation perturbation) { return new SabrInterestRateParameters( paramCombiner.underlyingWithPerturbation(0, Surface.class, perturbation), paramCombiner.underlyingWithPerturbation(1, Surface.class, perturbation), paramCombiner.underlyingWithPerturbation(2, Surface.class, perturbation), paramCombiner.underlyingWithPerturbation(3, Surface.class, perturbation), paramCombiner.underlyingWithPerturbation(4, Surface.class, perturbation), sabrVolatilityFormula); }
@Override public double getParameter(int parameterIndex) { return paramCombiner.getParameter(parameterIndex); }
@Override public int getParameterCount() { return paramCombiner.getParameterCount(); }
public void test_basics() { ParameterizedDataCombiner test = ParameterizedDataCombiner.of(DATA1, DATA2, DATA3); assertEquals(test.getParameterCount(), 5); assertEquals(test.getParameter(0), 1d); assertEquals(test.getParameter(1), 2d); assertEquals(test.getParameter(2), 3d); assertEquals(test.getParameter(3), 4d); assertEquals(test.getParameter(4), 5d); assertEquals(test.getParameterMetadata(0), ParameterMetadata.empty()); assertThrows(() -> test.getParameter(-1), IndexOutOfBoundsException.class); assertThrows(() -> test.getParameter(5), IndexOutOfBoundsException.class); assertThrows(() -> test.getParameterMetadata(-1), IndexOutOfBoundsException.class); assertThrows(() -> test.getParameterMetadata(5), IndexOutOfBoundsException.class); assertThrowsIllegalArg(() -> ParameterizedDataCombiner.of()); }
public void test_underlyingWithParameter4() { ParameterizedDataCombiner test = ParameterizedDataCombiner.of(DATA1, DATA2, DATA3); assertEquals(test.underlyingWithParameter(0, TestingParameterizedData2.class, 4, -1d).getParameter(0), 1d); assertEquals(test.underlyingWithParameter(0, TestingParameterizedData2.class, 4, -1d).getParameter(1), 2d); assertEquals(test.underlyingWithParameter(1, TestingParameterizedData.class, 4, -1d).getParameter(0), 3d); assertEquals(test.underlyingWithParameter(2, TestingParameterizedData2.class, 4, -1d).getParameter(0), 4d); assertEquals(test.underlyingWithParameter(2, TestingParameterizedData2.class, 4, -1d).getParameter(1), -1d); }
public void test_underlyingWithPerturbation() { ParameterPerturbation perturbation = (i, v, m) -> v + i + 0.5d; ParameterizedDataCombiner test = ParameterizedDataCombiner.of(DATA1, DATA2, DATA3); assertEquals(test.underlyingWithPerturbation(0, TestingParameterizedData2.class, perturbation).getParameter(0), 1.5d); assertEquals(test.underlyingWithPerturbation(0, TestingParameterizedData2.class, perturbation).getParameter(1), 3.5d); assertEquals(test.underlyingWithPerturbation(1, TestingParameterizedData.class, perturbation).getParameter(0), 5.5d); assertEquals(test.underlyingWithPerturbation(2, TestingParameterizedData2.class, perturbation).getParameter(0), 7.5d); assertEquals(test.underlyingWithPerturbation(2, TestingParameterizedData2.class, perturbation).getParameter(1), 9.5d); }
public void test_withPerturbation() { ParameterPerturbation perturbation = (i, v, m) -> v + i + 0.5d; ParameterizedDataCombiner test = ParameterizedDataCombiner.of(DATA1, DATA2, DATA3); List<ParameterizedData> perturbed = test.withPerturbation(ParameterizedData.class, perturbation); assertEquals(perturbed.get(0), new TestingParameterizedData2(1.5d, 3.5d)); assertEquals(perturbed.get(1), new TestingParameterizedData(5.5d)); assertEquals(perturbed.get(2), new TestingParameterizedData2(7.5d, 9.5d)); }
public void test_withParameter() { ParameterizedDataCombiner test = ParameterizedDataCombiner.of(DATA1, DATA2, DATA3); assertEquals(test.withParameter( ParameterizedData.class, 0, -1d), ImmutableList.of(DATA1.withParameter(0, -1d), DATA2, DATA3)); assertEquals(test.withParameter( ParameterizedData.class, 1, -1d), ImmutableList.of(DATA1.withParameter(1, -1d), DATA2, DATA3)); assertEquals(test.withParameter( ParameterizedData.class, 2, -1d), ImmutableList.of(DATA1, DATA2.withParameter(0, -1d), DATA3)); assertEquals(test.withParameter( ParameterizedData.class, 3, -1d), ImmutableList.of(DATA1, DATA2, DATA3.withParameter(0, -1d))); assertEquals(test.withParameter( ParameterizedData.class, 4, -1d), ImmutableList.of(DATA1, DATA2, DATA3.withParameter(1, -1d))); }
@Override public ParameterMetadata getParameterMetadata(int parameterIndex) { return paramCombiner.getParameterMetadata(parameterIndex); }
@ImmutableConstructor private SabrInterestRateParameters( Surface alphaSurface, Surface betaSurface, Surface rhoSurface, Surface nuSurface, Surface shiftSurface, SabrVolatilityFormula sabrFormula) { validate(alphaSurface, "alphaSurface", ValueType.SABR_ALPHA); validate(betaSurface, "betaSurface", ValueType.SABR_BETA); validate(rhoSurface, "rhoSurface", ValueType.SABR_RHO); validate(nuSurface, "nuSurface", ValueType.SABR_NU); ArgChecker.notNull(shiftSurface, "shiftSurface"); ArgChecker.notNull(sabrFormula, "sabrFormula"); DayCount dayCount = alphaSurface.getMetadata().findInfo(SurfaceInfoType.DAY_COUNT) .orElseThrow(() -> new IllegalArgumentException("Incorrect surface metadata, missing DayCount")); validate(betaSurface, dayCount); validate(rhoSurface, dayCount); validate(nuSurface, dayCount); validate(shiftSurface, dayCount); this.alphaSurface = alphaSurface; this.betaSurface = betaSurface; this.rhoSurface = rhoSurface; this.nuSurface = nuSurface; this.shiftSurface = shiftSurface; this.sabrVolatilityFormula = sabrFormula; this.dayCount = dayCount; this.paramCombiner = ParameterizedDataCombiner.of(alphaSurface, betaSurface, rhoSurface, nuSurface, shiftSurface); }
@Override public SabrInterestRateParameters withParameter(int parameterIndex, double newValue) { return new SabrInterestRateParameters( paramCombiner.underlyingWithParameter(0, Surface.class, parameterIndex, newValue), paramCombiner.underlyingWithParameter(1, Surface.class, parameterIndex, newValue), paramCombiner.underlyingWithParameter(2, Surface.class, parameterIndex, newValue), paramCombiner.underlyingWithParameter(3, Surface.class, parameterIndex, newValue), paramCombiner.underlyingWithParameter(4, Surface.class, parameterIndex, newValue), sabrVolatilityFormula); }
@Override public InterpolatedStrikeSmileDeltaTermStructure withParameter(int parameterIndex, double newValue) { List<SmileDeltaParameters> updated = paramCombiner.withParameter(SmileDeltaParameters.class, parameterIndex, newValue); return new InterpolatedStrikeSmileDeltaTermStructure( updated, dayCount, timeInterpolator, timeExtrapolatorLeft, timeExtrapolatorRight, strikeInterpolator, strikeExtrapolatorLeft, strikeExtrapolatorRight); }
@Override public InterpolatedStrikeSmileDeltaTermStructure withPerturbation(ParameterPerturbation perturbation) { List<SmileDeltaParameters> updated = paramCombiner.withPerturbation(SmileDeltaParameters.class, perturbation); return new InterpolatedStrikeSmileDeltaTermStructure( updated, dayCount, timeInterpolator, timeExtrapolatorLeft, timeExtrapolatorRight, strikeInterpolator, strikeExtrapolatorLeft, strikeExtrapolatorRight); }
/** * Obtains an instance that can combine the specified underlying instances. * * @param instances the underlying instances to combine * @return the combiner */ public static ParameterizedDataCombiner of(ParameterizedData... instances) { return new ParameterizedDataCombiner(instances); }
public void test_underlyingWithParameter2() { ParameterizedDataCombiner test = ParameterizedDataCombiner.of(DATA1, DATA2, DATA3); assertEquals(test.underlyingWithParameter(0, TestingParameterizedData2.class, 2, -1d).getParameter(0), 1d); assertEquals(test.underlyingWithParameter(0, TestingParameterizedData2.class, 2, -1d).getParameter(1), 2d); assertEquals(test.underlyingWithParameter(1, TestingParameterizedData.class, 2, -1d).getParameter(0), -1d); assertEquals(test.underlyingWithParameter(2, TestingParameterizedData2.class, 2, -1d).getParameter(0), 4d); assertEquals(test.underlyingWithParameter(2, TestingParameterizedData2.class, 2, -1d).getParameter(1), 5d); }
@Override public ParameterMetadata getParameterMetadata(int parameterIndex) { return paramCombiner.getParameterMetadata(parameterIndex); }
@ImmutableConstructor private SabrParameters( Curve alphaCurve, Curve betaCurve, Curve rhoCurve, Curve nuCurve, Curve shiftCurve, SabrVolatilityFormula sabrFormula) { validate(alphaCurve, "alphaCurve", ValueType.SABR_ALPHA); validate(betaCurve, "betaCurve", ValueType.SABR_BETA); validate(rhoCurve, "rhoCurve", ValueType.SABR_RHO); validate(nuCurve, "nuCurve", ValueType.SABR_NU); ArgChecker.notNull(shiftCurve, "shiftCurve"); ArgChecker.notNull(sabrFormula, "sabrFormula"); DayCount dayCount = alphaCurve.getMetadata().findInfo(CurveInfoType.DAY_COUNT) .orElseThrow(() -> new IllegalArgumentException("Incorrect curve metadata, missing DayCount")); validate(betaCurve, dayCount); validate(rhoCurve, dayCount); validate(nuCurve, dayCount); validate(shiftCurve, dayCount); this.alphaCurve = alphaCurve; this.betaCurve = betaCurve; this.rhoCurve = rhoCurve; this.nuCurve = nuCurve; this.shiftCurve = shiftCurve; this.sabrVolatilityFormula = sabrFormula; this.dayCount = dayCount; this.paramCombiner = ParameterizedDataCombiner.of(alphaCurve, betaCurve, rhoCurve, nuCurve, shiftCurve); }
@Override public SabrParameters withParameter(int parameterIndex, double newValue) { return new SabrParameters( paramCombiner.underlyingWithParameter(0, Curve.class, parameterIndex, newValue), paramCombiner.underlyingWithParameter(1, Curve.class, parameterIndex, newValue), paramCombiner.underlyingWithParameter(2, Curve.class, parameterIndex, newValue), paramCombiner.underlyingWithParameter(3, Curve.class, parameterIndex, newValue), paramCombiner.underlyingWithParameter(4, Curve.class, parameterIndex, newValue), sabrVolatilityFormula); }
/** * Obtains an instance that can combine the specified underlying instances. * * @param instances the underlying instances to combine * @return the combiner */ public static ParameterizedDataCombiner of(List<? extends ParameterizedData> instances) { return new ParameterizedDataCombiner((ParameterizedData[]) instances.toArray(new ParameterizedData[0])); }
public void test_underlyingWithParameter0() { ParameterizedDataCombiner test = ParameterizedDataCombiner.of(DATA1, DATA2, DATA3); assertEquals(test.underlyingWithParameter(0, TestingParameterizedData2.class, 0, -1d).getParameter(0), -1d); assertEquals(test.underlyingWithParameter(0, TestingParameterizedData2.class, 0, -1d).getParameter(1), 2d); assertEquals(test.underlyingWithParameter(1, TestingParameterizedData.class, 0, -1d).getParameter(0), 3d); assertEquals(test.underlyingWithParameter(2, TestingParameterizedData2.class, 0, -1d).getParameter(0), 4d); assertEquals(test.underlyingWithParameter(2, TestingParameterizedData2.class, 0, -1d).getParameter(1), 5d); }