@Override public default NodalCurve withPerturbation(ParameterPerturbation perturbation) { return (NodalCurve) Curve.super.withPerturbation(perturbation); }
@Override public AddFixedCurve withPerturbation(ParameterPerturbation perturbation) { return new AddFixedCurve(fixedCurve, spreadCurve.withPerturbation(perturbation)); }
@Override public BlackFxOptionFlatVolatilities withPerturbation(ParameterPerturbation perturbation) { return new BlackFxOptionFlatVolatilities( currencyPair, valuationDateTime, curve.withPerturbation(perturbation)); }
@Override public ZeroRateDiscountFactors withPerturbation(ParameterPerturbation perturbation) { return withCurve(curve.withPerturbation(perturbation)); }
@Override public ZeroRatePeriodicDiscountFactors withPerturbation(ParameterPerturbation perturbation) { return withCurve(curve.withPerturbation(perturbation)); }
@Override public SimpleIborIndexRates withPerturbation(ParameterPerturbation perturbation) { return withCurve(curve.withPerturbation(perturbation)); }
@Override public SimpleDiscountFactors withPerturbation(ParameterPerturbation perturbation) { return withCurve(curve.withPerturbation(perturbation)); }
private Curve replaceParameters(Curve curve, DoubleArray newParameters) { return curve.withPerturbation((i, v, m) -> newParameters.get(i)); }
@Override public DoubleArray apply(DoubleArray t) { Curve newCurve = curve.withPerturbation((i, v, m) -> t.get(i)); ImmutableLegalEntityDiscountingProvider newRates = ratesProviderFn.apply(newCurve); CurrencyParameterSensitivities sensiMulti = sensitivitiesFn.apply(newRates); return sensiMulti.getSensitivity(curveName, sensitivityCurrency).getSensitivity(); } };
@Override public ParallelShiftedCurve withPerturbation(ParameterPerturbation perturbation) { Curve bumpedCurve = underlyingCurve.withPerturbation(perturbation); int shiftIndex = underlyingCurve.getParameterCount(); double bumpedShift = perturbation.perturbParameter(shiftIndex, shiftAmount, getParameterMetadata(shiftIndex)); return new ParallelShiftedCurve(bumpedCurve, shiftType, bumpedShift); }
public void test_withPerturbation() { Curve test = new TestingCurve(2d); assertEquals(test.withPerturbation((i, v, m) -> v + 1).getParameter(0), 3d); }
@Override public CombinedCurve withPerturbation(ParameterPerturbation perturbation) { Curve newBaseCurve = baseCurve.withPerturbation( (idx, value, meta) -> perturbation.perturbParameter( idx, baseCurve.getParameter(idx), baseCurve.getParameterMetadata(idx))); int offset = baseCurve.getParameterCount(); Curve newSpreadCurve = spreadCurve.withPerturbation( (idx, value, meta) -> perturbation.perturbParameter( idx + offset, spreadCurve.getParameter(idx), spreadCurve.getParameterMetadata(idx))); List<ParameterMetadata> newParamMeta = Stream.concat( IntStream.range(0, newBaseCurve.getParameterCount()) .mapToObj(i -> newBaseCurve.getParameterMetadata(i)), IntStream.range(0, newSpreadCurve.getParameterCount()) .mapToObj(i -> newSpreadCurve.getParameterMetadata(i))) .collect(toImmutableList()); return CombinedCurve.of( newBaseCurve, newSpreadCurve, metadata.withParameterMetadata(newParamMeta)); }