@Override public int getParameterCount() { return curve.getParameterCount(); }
@Override public int getParameterCount() { return underlyingCurve.getParameterCount() + 1; }
@Override public int getParameterCount() { return curve.getParameterCount(); }
@Override public int getParameterCount() { return curve.getParameterCount(); }
@Override public int getParameterCount() { return curve.getParameterCount(); }
@Override public int getParameterCount() { return baseCurve.getParameterCount() + spreadCurve.getParameterCount(); }
@Override public int getParameterCount() { return spreadCurve.getParameterCount(); }
@Override public int getParameterCount() { return curve.getParameterCount(); }
@Override public double getParameter(int parameterIndex) { if (parameterIndex == underlyingCurve.getParameterCount()) { return shiftAmount; } return underlyingCurve.getParameter(parameterIndex); }
@Override public ParameterMetadata getParameterMetadata(int parameterIndex) { if (parameterIndex < baseCurve.getParameterCount()) { return baseCurve.getParameterMetadata(parameterIndex); } return spreadCurve.getParameterMetadata(parameterIndex - baseCurve.getParameterCount()); }
@Override public double getParameter(int parameterIndex) { if (parameterIndex < baseCurve.getParameterCount()) { return baseCurve.getParameter(parameterIndex); } return spreadCurve.getParameter(parameterIndex - baseCurve.getParameterCount()); }
@Override public ParameterMetadata getParameterMetadata(int parameterIndex) { if (parameterIndex == underlyingCurve.getParameterCount()) { return LabelParameterMetadata.of(shiftType + "Shift"); } return underlyingCurve.getParameterMetadata(parameterIndex); }
@Override public CombinedCurve withParameter(int parameterIndex, double newValue) { if (parameterIndex < baseCurve.getParameterCount()) { return new CombinedCurve( baseCurve.withParameter(parameterIndex, newValue), spreadCurve, metadata); } return new CombinedCurve( baseCurve, spreadCurve.withParameter(parameterIndex - baseCurve.getParameterCount(), newValue), metadata); }
/** * Creates a parameter sensitivity instance for this curve when the sensitivity values are known. * <p> * In most cases, {@link #yValueParameterSensitivity(double)} should be used and manipulated. * However, it can be useful to create a {@link UnitParameterSensitivity} from pre-computed sensitivity values. * * @param sensitivities the sensitivity values, which must match the parameter count of the curve * @return the sensitivity */ public default UnitParameterSensitivity createParameterSensitivity(DoubleArray sensitivities) { List<ParameterMetadata> paramMeta = IntStream.range(0, getParameterCount()) .mapToObj(i -> getParameterMetadata(i)) .collect(toImmutableList()); return UnitParameterSensitivity.of(getName(), paramMeta, sensitivities); }
@Override public ParallelShiftedCurve withParameter(int parameterIndex, double newValue) { if (parameterIndex == underlyingCurve.getParameterCount()) { return new ParallelShiftedCurve(underlyingCurve, shiftType, newValue); } return new ParallelShiftedCurve(underlyingCurve.withParameter(parameterIndex, newValue), shiftType, shiftAmount); }
@Override public UnitParameterSensitivity createParameterSensitivity(DoubleArray sensitivities) { UnitParameterSensitivity baseSens = baseCurve.createParameterSensitivity( sensitivities.subArray(0, baseCurve.getParameterCount())); UnitParameterSensitivity spreadSens = spreadCurve.createParameterSensitivity( sensitivities.subArray(baseCurve.getParameterCount(), sensitivities.size())); return UnitParameterSensitivity.combine(getName(), baseSens, spreadSens); }
@Override public CurrencyParameterSensitivity createParameterSensitivity( Currency currency, DoubleArray sensitivities) { CurrencyParameterSensitivity baseSensi = baseCurve.createParameterSensitivity( currency, sensitivities.subArray(0, baseCurve.getParameterCount())); CurrencyParameterSensitivity spreadSensi = spreadCurve.createParameterSensitivity( currency, sensitivities.subArray(baseCurve.getParameterCount(), sensitivities.size())); return CurrencyParameterSensitivity.combine(getName(), baseSensi, spreadSensi); }
@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); }
private SabrParametersIborCapletFloorletVolatilities updateParameters( SabrParametersIborCapletFloorletVolatilities volatilities, int nExpiries, int timeIndex, boolean betaFixed, DoubleArray newParameters) { int nBetaParams = volatilities.getParameters().getBetaCurve().getParameterCount(); int nRhoParams = volatilities.getParameters().getRhoCurve().getParameterCount(); SabrParametersIborCapletFloorletVolatilities newVols = volatilities .withParameter(timeIndex, newParameters.get(0)) .withParameter(timeIndex + nExpiries + nBetaParams + nRhoParams, newParameters.get(3)); if (betaFixed) { newVols = newVols.withParameter(timeIndex + nExpiries + nBetaParams, newParameters.get(2)); return newVols; } newVols = newVols.withParameter(timeIndex + nExpiries, newParameters.get(1)); return newVols; }
public void test_of() { Curve test = ParallelShiftedCurve.of(CONSTANT_CURVE, ShiftType.RELATIVE, 0.1d); assertThat(test.yValue(0)).isEqualTo(3.3d, offset(1e-10)); assertThat(test.yValue(1)).isEqualTo(3.3d, offset(1e-10)); assertThat(test.getName()).isEqualTo(METADATA.getCurveName()); assertThat(test.getParameterCount()).isEqualTo(2); assertThat(test.getParameter(0)).isEqualTo(3d); assertThat(test.getParameter(1)).isEqualTo(0.1d); assertThat(test.getParameterMetadata(0)).isEqualTo(ParameterMetadata.empty()); assertThat(test.getParameterMetadata(1)).isEqualTo(LabelParameterMetadata.of("RelativeShift")); assertThat(test.getMetadata()).isEqualTo(METADATA); }