@ImmutablePreBuild private static void preBuild(Builder builder) { if (builder.shiftCurve == null) { builder.shiftCurve = ConstantCurve.of("Zero shift", 0d); } }
/** * Creates a constant curve with a specific value. * * @param name the curve name * @param yValue the constant y-value * @return the curve */ public static ConstantCurve of(String name, double yValue) { return of(CurveName.of(name), yValue); }
public void test_serialization() { ConstantCurve test = ConstantCurve.of(CURVE_NAME, VALUE); assertSerialization(test); }
public void test_of_String() { ConstantCurve test = ConstantCurve.of(NAME, VALUE); assertThat(test.getName()).isEqualTo(CURVE_NAME); assertThat(test.getYValue()).isEqualTo(VALUE); assertThat(test.getParameterCount()).isEqualTo(1); assertThat(test.getParameter(0)).isEqualTo(VALUE); assertThat(test.getParameterMetadata(0)).isEqualTo(ParameterMetadata.empty()); assertThat(test.withParameter(0, 2d)).isEqualTo(ConstantCurve.of(NAME, 2d)); assertThat(test.withPerturbation((i, v, m) -> v + 1d)).isEqualTo(ConstantCurve.of(NAME, VALUE + 1d)); assertThat(test.getMetadata()).isEqualTo(METADATA); assertThat(test.withMetadata(METADATA2)).isEqualTo(ConstantCurve.of(METADATA2, VALUE)); }
public void test_of_CurveName() { ConstantCurve test = ConstantCurve.of(CURVE_NAME, VALUE); assertThat(test.getName()).isEqualTo(CURVE_NAME); assertThat(test.getYValue()).isEqualTo(VALUE); assertThat(test.getParameterCount()).isEqualTo(1); assertThat(test.getParameter(0)).isEqualTo(VALUE); assertThat(test.getParameterMetadata(0)).isEqualTo(ParameterMetadata.empty()); assertThat(test.withParameter(0, 2d)).isEqualTo(ConstantCurve.of(NAME, 2d)); assertThat(test.getMetadata()).isEqualTo(METADATA); assertThat(test.withMetadata(METADATA2)).isEqualTo(ConstantCurve.of(METADATA2, VALUE)); }
public void test_of_CurveMetadata() { ConstantCurve test = ConstantCurve.of(METADATA, VALUE); assertThat(test.getName()).isEqualTo(CURVE_NAME); assertThat(test.getYValue()).isEqualTo(VALUE); assertThat(test.getParameterCount()).isEqualTo(1); assertThat(test.getParameter(0)).isEqualTo(VALUE); assertThat(test.getParameterMetadata(0)).isEqualTo(ParameterMetadata.empty()); assertThat(test.withParameter(0, 2d)).isEqualTo(ConstantCurve.of(NAME, 2d)); assertThat(test.getMetadata()).isEqualTo(METADATA); assertThat(test.withMetadata(METADATA2)).isEqualTo(ConstantCurve.of(METADATA2, VALUE)); }
public void test_ofFixedBeta() { SabrIborCapletFloorletVolatilityBootstrapDefinition test = SabrIborCapletFloorletVolatilityBootstrapDefinition.ofFixedBeta( NAME, USD_LIBOR_3M, ACT_ACT_ISDA, 0.5, LINEAR, FLAT, FLAT, SabrVolatilityFormula.hagan()); assertEquals(test.getDayCount(), ACT_ACT_ISDA); assertEquals(test.getIndex(), USD_LIBOR_3M); assertEquals(test.getInterpolator(), LINEAR); assertEquals(test.getExtrapolatorLeft(), FLAT); assertEquals(test.getExtrapolatorRight(), FLAT); assertEquals(test.getName(), NAME); assertEquals(test.getBetaCurve().get(), ConstantCurve.of(Curves.sabrParameterByExpiry(NAME.getName() + "-Beta", ACT_ACT_ISDA, SABR_BETA), 0.5)); assertFalse(test.getRhoCurve().isPresent()); assertEquals(test.getSabrVolatilityFormula(), SabrVolatilityFormula.hagan()); assertEquals(test.getShiftCurve(), ConstantCurve.of("Zero shift", 0d)); }
public void test_ofFixedBeta() { SabrIborCapletFloorletVolatilityCalibrationDefinition test = SabrIborCapletFloorletVolatilityCalibrationDefinition.ofFixedBeta( NAME, USD_LIBOR_3M, ACT_365F, BETA_RHO, ALPHA_KNOTS, BETA_RHO_KNOTS, NU_KNOTS, DOUBLE_QUADRATIC, FLAT, LINEAR, HAGAN); assertEquals(test.getBetaCurve().get(), ConstantCurve.of(Curves.sabrParameterByExpiry(NAME.getName() + "-Beta", ACT_365F, SABR_BETA), BETA_RHO)); assertEquals(test.getDayCount(), ACT_365F); assertEquals(test.getExtrapolatorLeft(), FLAT); assertEquals(test.getExtrapolatorRight(), LINEAR); assertEquals(test.getIndex(), USD_LIBOR_3M); assertEquals(test.getInitialParameters(), DoubleArray.of(0.1, BETA_RHO, -0.2, 0.5)); assertEquals(test.getInterpolator(), DOUBLE_QUADRATIC); assertEquals(test.getName(), NAME); assertFalse(test.getRhoCurve().isPresent()); assertEquals(test.getSabrVolatilityFormula(), HAGAN); assertEquals(test.getShiftCurve(), ConstantCurve.of("Zero shift", 0d)); }
public void test_ofFixedRho() { SabrIborCapletFloorletVolatilityBootstrapDefinition test = SabrIborCapletFloorletVolatilityBootstrapDefinition.ofFixedRho( NAME, USD_LIBOR_3M, ACT_ACT_ISDA, 0.5, LINEAR, FLAT, FLAT, SabrVolatilityFormula.hagan()); assertEquals(test.getDayCount(), ACT_ACT_ISDA); assertEquals(test.getIndex(), USD_LIBOR_3M); assertEquals(test.getInterpolator(), LINEAR); assertEquals(test.getExtrapolatorLeft(), FLAT); assertEquals(test.getExtrapolatorRight(), FLAT); assertEquals(test.getName(), NAME); assertEquals(test.getRhoCurve().get(), ConstantCurve.of(Curves.sabrParameterByExpiry(NAME.getName() + "-Rho", ACT_ACT_ISDA, SABR_RHO), 0.5)); assertFalse(test.getBetaCurve().isPresent()); assertEquals(test.getSabrVolatilityFormula(), SabrVolatilityFormula.hagan()); assertEquals(test.getShiftCurve(), ConstantCurve.of("Zero shift", 0d)); }
public void test_ofFixedBeta_shift() { SabrIborCapletFloorletVolatilityBootstrapDefinition test = SabrIborCapletFloorletVolatilityBootstrapDefinition.ofFixedBeta( NAME, USD_LIBOR_3M, ACT_ACT_ISDA, 0.5, 0.01, LINEAR, FLAT, FLAT, SabrVolatilityFormula.hagan()); assertEquals(test.getDayCount(), ACT_ACT_ISDA); assertEquals(test.getIndex(), USD_LIBOR_3M); assertEquals(test.getInterpolator(), LINEAR); assertEquals(test.getExtrapolatorLeft(), FLAT); assertEquals(test.getExtrapolatorRight(), FLAT); assertEquals(test.getName(), NAME); assertEquals(test.getBetaCurve().get(), ConstantCurve.of(Curves.sabrParameterByExpiry(NAME.getName() + "-Beta", ACT_ACT_ISDA, SABR_BETA), 0.5)); assertFalse(test.getRhoCurve().isPresent()); assertEquals(test.getSabrVolatilityFormula(), SabrVolatilityFormula.hagan()); assertEquals(test.getShiftCurve(), ConstantCurve.of("Shift curve", 0.01)); }
public void test_ofFixedRho_shift() { SabrIborCapletFloorletVolatilityBootstrapDefinition test = SabrIborCapletFloorletVolatilityBootstrapDefinition.ofFixedRho( NAME, USD_LIBOR_3M, ACT_ACT_ISDA, 0.5, 0.01, LINEAR, FLAT, FLAT, SabrVolatilityFormula.hagan()); assertEquals(test.getDayCount(), ACT_ACT_ISDA); assertEquals(test.getIndex(), USD_LIBOR_3M); assertEquals(test.getInterpolator(), LINEAR); assertEquals(test.getExtrapolatorLeft(), FLAT); assertEquals(test.getExtrapolatorRight(), FLAT); assertEquals(test.getName(), NAME); assertEquals(test.getRhoCurve().get(), ConstantCurve.of(Curves.sabrParameterByExpiry(NAME.getName() + "-Rho", ACT_ACT_ISDA, SABR_RHO), 0.5)); assertFalse(test.getBetaCurve().isPresent()); assertEquals(test.getSabrVolatilityFormula(), SabrVolatilityFormula.hagan()); assertEquals(test.getShiftCurve(), ConstantCurve.of("Shift curve", 0.01)); }
public void test_ofFixedRho() { SabrIborCapletFloorletVolatilityCalibrationDefinition test = SabrIborCapletFloorletVolatilityCalibrationDefinition.ofFixedRho( NAME, USD_LIBOR_3M, ACT_365F, BETA_RHO, ALPHA_KNOTS, BETA_RHO_KNOTS, NU_KNOTS, DOUBLE_QUADRATIC, FLAT, LINEAR, HAGAN); assertFalse(test.getBetaCurve().isPresent()); assertEquals(test.getDayCount(), ACT_365F); assertEquals(test.getExtrapolatorLeft(), FLAT); assertEquals(test.getExtrapolatorRight(), LINEAR); assertEquals(test.getIndex(), USD_LIBOR_3M); assertEquals(test.getInitialParameters(), DoubleArray.of(0.1, 0.7, BETA_RHO, 0.5)); assertEquals(test.getInterpolator(), DOUBLE_QUADRATIC); assertEquals(test.getName(), NAME); assertEquals(test.getRhoCurve().get(), ConstantCurve.of(Curves.sabrParameterByExpiry(NAME.getName() + "-Rho", ACT_365F, SABR_RHO), BETA_RHO)); assertEquals(test.getSabrVolatilityFormula(), HAGAN); assertEquals(test.getShiftCurve(), ConstantCurve.of("Zero shift", 0d)); }
public void test_ofFixedBeta_shift() { SabrIborCapletFloorletVolatilityCalibrationDefinition test = SabrIborCapletFloorletVolatilityCalibrationDefinition.ofFixedBeta( NAME, USD_LIBOR_3M, ACT_365F, BETA_RHO, SHIFT, ALPHA_KNOTS, BETA_RHO_KNOTS, NU_KNOTS, DOUBLE_QUADRATIC, FLAT, LINEAR, HAGAN); assertEquals(test.getBetaCurve().get(), ConstantCurve.of(Curves.sabrParameterByExpiry(NAME.getName() + "-Beta", ACT_365F, SABR_BETA), BETA_RHO)); assertEquals(test.getDayCount(), ACT_365F); assertEquals(test.getExtrapolatorLeft(), FLAT); assertEquals(test.getExtrapolatorRight(), LINEAR); assertEquals(test.getIndex(), USD_LIBOR_3M); assertEquals(test.getInitialParameters(), DoubleArray.of(0.1, BETA_RHO, -0.2, 0.5)); assertEquals(test.getInterpolator(), DOUBLE_QUADRATIC); assertEquals(test.getName(), NAME); assertFalse(test.getRhoCurve().isPresent()); assertEquals(test.getSabrVolatilityFormula(), HAGAN); assertEquals(test.getShiftCurve(), ConstantCurve.of("Shift curve", SHIFT)); }
public void test_ofFixedRho_shift() { SabrIborCapletFloorletVolatilityCalibrationDefinition test = SabrIborCapletFloorletVolatilityCalibrationDefinition.ofFixedRho( NAME, USD_LIBOR_3M, ACT_365F, BETA_RHO, SHIFT, ALPHA_KNOTS, BETA_RHO_KNOTS, NU_KNOTS, DOUBLE_QUADRATIC, FLAT, LINEAR, HAGAN); assertFalse(test.getBetaCurve().isPresent()); assertEquals(test.getDayCount(), ACT_365F); assertEquals(test.getExtrapolatorLeft(), FLAT); assertEquals(test.getExtrapolatorRight(), LINEAR); assertEquals(test.getIndex(), USD_LIBOR_3M); assertEquals(test.getInitialParameters(), DoubleArray.of(0.1, 0.7, BETA_RHO, 0.5)); assertEquals(test.getInterpolator(), DOUBLE_QUADRATIC); assertEquals(test.getName(), NAME); assertEquals(test.getRhoCurve().get(), ConstantCurve.of(Curves.sabrParameterByExpiry(NAME.getName() + "-Rho", ACT_365F, SABR_RHO), BETA_RHO)); assertEquals(test.getSabrVolatilityFormula(), HAGAN); assertEquals(test.getShiftCurve(), ConstantCurve.of("Shift curve", SHIFT)); }
private SimpleRatesProvider createProvider(ResolvedFra fraExp) { DiscountFactors mockDf = SimpleDiscountFactors.of( GBP, VAL_DATE, ConstantCurve.of(Curves.discountFactors("DSC", DAY_COUNT), DISCOUNT_FACTOR)); LocalDateDoubleTimeSeries timeSeries = LocalDateDoubleTimeSeries.of(VAL_DATE, FORWARD_RATE); IborIndexRates mockIbor = SimpleIborIndexRates.of( GBP_LIBOR_3M, VAL_DATE, ConstantCurve.of(Curves.forwardRates("L3M", DAY_COUNT), FORWARD_RATE), timeSeries); SimpleRatesProvider prov = new SimpleRatesProvider(VAL_DATE, mockDf); prov.setIborRates(mockIbor); return prov; }
public void test_lookup() { ConstantCurve test = ConstantCurve.of(CURVE_NAME, VALUE); assertThat(test.yValue(0d)).isEqualTo(VALUE); assertThat(test.yValue(-10d)).isEqualTo(VALUE); assertThat(test.yValue(100d)).isEqualTo(VALUE); assertThat(test.yValueParameterSensitivity(0d).getSensitivity().toArray()).containsExactly(1d); assertThat(test.yValueParameterSensitivity(-10d).getSensitivity().toArray()).containsExactly(1d); assertThat(test.yValueParameterSensitivity(100d).getSensitivity().toArray()).containsExactly(1d); assertThat(test.firstDerivative(0d)).isEqualTo(0d); assertThat(test.firstDerivative(-10d)).isEqualTo(0d); assertThat(test.firstDerivative(100d)).isEqualTo(0d); }
private SimpleRatesProvider createProvider(LocalDate valDate) { Curve curve = ConstantCurve.of(Curves.discountFactors("Test", DAY_COUNT), DISCOUNT_FACTOR); DiscountFactors df = SimpleDiscountFactors.of(GBP, valDate, curve); SimpleRatesProvider prov = new SimpleRatesProvider(valDate); prov.setDayCount(DAY_COUNT); prov.setDiscountFactors(df); return prov; }
public void coverage() { coverImmutableBean(VOLS); ShiftedBlackIborCapletFloorletExpiryStrikeVolatilities vols = ShiftedBlackIborCapletFloorletExpiryStrikeVolatilities.of( USD_LIBOR_3M, VAL_DATE_TIME.plusMonths(1), InterpolatedNodalSurface.of(METADATA, TIME, STRIKE, VOL, GridSurfaceInterpolator.of(TIME_SQUARE, LINEAR)), ConstantCurve.of("shift", 0.05)); coverBeanEquals(VOLS, vols); }
public void coverage() { SabrIborCapletFloorletVolatilityBootstrapDefinition test1 = SabrIborCapletFloorletVolatilityBootstrapDefinition.ofFixedBeta( NAME, USD_LIBOR_3M, ACT_ACT_ISDA, 0.5, LINEAR, FLAT, FLAT, SabrVolatilityFormula.hagan()); coverImmutableBean(test1); SabrIborCapletFloorletVolatilityBootstrapDefinition test2 = SabrIborCapletFloorletVolatilityBootstrapDefinition.builder() .index(GBP_LIBOR_3M) .name(IborCapletFloorletVolatilitiesName.of("other")) .interpolator(STEP_UPPER) .extrapolatorLeft(FLAT) .extrapolatorRight(CurveExtrapolators.LINEAR) .rhoCurve(ConstantCurve.of("rho", 0.1d)) .shiftCurve(ConstantCurve.of("shift", 0.01d)) .dayCount(ACT_365F) .sabrVolatilityFormula(SabrVolatilityFormula.hagan()) .build(); coverBeanEquals(test1, test2); }