/** * Creates curve metadata for SABR parameters. * * @return the curve metadata */ public ImmutableList<CurveMetadata> createSabrParameterMetadata() { CurveMetadata alphaMetadata = Curves.sabrParameterByExpiry(name.getName() + "-Alpha", dayCount, SABR_ALPHA); CurveMetadata betaMetadata = Curves.sabrParameterByExpiry(name.getName() + "-Beta", dayCount, SABR_BETA); CurveMetadata rhoMetadata = Curves.sabrParameterByExpiry(name.getName() + "-Rho", dayCount, SABR_RHO); CurveMetadata nuMetadata = Curves.sabrParameterByExpiry(name.getName() + "-Nu", dayCount, SABR_NU); return ImmutableList.of(alphaMetadata, betaMetadata, rhoMetadata, nuMetadata); }
/** * Creates curve metadata for SABR parameters. * <p> * The metadata in the list are ordered as alpha, beta, rho, then nu. * * @return the curve metadata */ public ImmutableList<CurveMetadata> createSabrParameterMetadata() { CurveMetadata alphaMetadata = Curves.sabrParameterByExpiry(name.getName() + "-Alpha", dayCount, SABR_ALPHA); CurveMetadata betaMetadata = Curves.sabrParameterByExpiry(name.getName() + "-Beta", dayCount, SABR_BETA); CurveMetadata rhoMetadata = Curves.sabrParameterByExpiry(name.getName() + "-Rho", dayCount, SABR_RHO); CurveMetadata nuMetadata = Curves.sabrParameterByExpiry(name.getName() + "-Nu", dayCount, SABR_NU); return ImmutableList.of(alphaMetadata, betaMetadata, rhoMetadata, nuMetadata); }
/** * Creates metadata for a curve providing a SABR parameter. * <p> * The x-values represent time to expiry year fractions as defined by the specified day count. * * @param name the curve name * @param dayCount the day count * @param yType the y-value type, which must be one of the four SABR values * @return the curve metadata */ public static CurveMetadata sabrParameterByExpiry( String name, DayCount dayCount, ValueType yType) { return sabrParameterByExpiry(CurveName.of(name), dayCount, yType); }
public void test_createSabrParameterMetadata() { SabrIborCapletFloorletVolatilityCalibrationDefinition base = SabrIborCapletFloorletVolatilityCalibrationDefinition.ofFixedBeta( NAME, USD_LIBOR_3M, ACT_365F, BETA_RHO, ALPHA_KNOTS, BETA_RHO_KNOTS, NU_KNOTS, DOUBLE_QUADRATIC, FLAT, LINEAR, HAGAN); ImmutableList<CurveMetadata> expected = ImmutableList.of( Curves.sabrParameterByExpiry(NAME.getName() + "-Alpha", ACT_365F, SABR_ALPHA), Curves.sabrParameterByExpiry(NAME.getName() + "-Beta", ACT_365F, SABR_BETA), Curves.sabrParameterByExpiry(NAME.getName() + "-Rho", ACT_365F, SABR_RHO), Curves.sabrParameterByExpiry(NAME.getName() + "-Nu", ACT_365F, SABR_NU)); ImmutableList<CurveMetadata> computed = base.createSabrParameterMetadata(); assertEquals(computed, expected); }
public void test_createSabrParameterMetadata() { SabrIborCapletFloorletVolatilityBootstrapDefinition base = SabrIborCapletFloorletVolatilityBootstrapDefinition.ofFixedBeta( NAME, USD_LIBOR_3M, ACT_ACT_ISDA, 0.5, LINEAR, FLAT, FLAT, SabrVolatilityFormula.hagan()); ImmutableList<CurveMetadata> expected = ImmutableList.of( Curves.sabrParameterByExpiry(NAME.getName() + "-Alpha", ACT_ACT_ISDA, SABR_ALPHA), Curves.sabrParameterByExpiry(NAME.getName() + "-Beta", ACT_ACT_ISDA, SABR_BETA), Curves.sabrParameterByExpiry(NAME.getName() + "-Rho", ACT_ACT_ISDA, SABR_RHO), Curves.sabrParameterByExpiry(NAME.getName() + "-Nu", ACT_ACT_ISDA, SABR_NU)); ImmutableList<CurveMetadata> computed = base.createSabrParameterMetadata(); assertEquals(computed, expected); }
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_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_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_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_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)); }
public void sabrParameterByExpiry_curveName() { CurveMetadata test = Curves.sabrParameterByExpiry(CURVE_NAME, ACT_365F, ValueType.SABR_BETA); CurveMetadata expected = DefaultCurveMetadata.builder() .curveName(CURVE_NAME) .xValueType(ValueType.YEAR_FRACTION) .yValueType(ValueType.SABR_BETA) .dayCount(ACT_365F) .build(); assertEquals(test, expected); }
public void sabrParameterByExpiry_string() { CurveMetadata test = Curves.sabrParameterByExpiry(NAME, ACT_365F, ValueType.SABR_ALPHA); CurveMetadata expected = DefaultCurveMetadata.builder() .curveName(CURVE_NAME) .xValueType(ValueType.YEAR_FRACTION) .yValueType(ValueType.SABR_ALPHA) .dayCount(ACT_365F) .build(); assertEquals(test, expected); }
public void sabrParameterByExpiry_curveNameParams() { CurveMetadata test = Curves.sabrParameterByExpiry(CURVE_NAME, ACT_365F, ValueType.SABR_NU, PARAMS); CurveMetadata expected = DefaultCurveMetadata.builder() .curveName(CURVE_NAME) .xValueType(ValueType.YEAR_FRACTION) .yValueType(ValueType.SABR_NU) .dayCount(ACT_365F) .parameterMetadata(PARAMS) .build(); assertEquals(test, expected); }
public void test_builder() { Curve betaCurve = ConstantCurve.of(Curves.sabrParameterByExpiry(NAME.getName() + "-Beta", ACT_ACT_ISDA, SABR_BETA), 0.65); SabrIborCapletFloorletVolatilityBootstrapDefinition test = SabrIborCapletFloorletVolatilityBootstrapDefinition.builder() .index(USD_LIBOR_3M) .name(NAME) .interpolator(LINEAR) .extrapolatorLeft(FLAT) .extrapolatorRight(CurveExtrapolators.LINEAR) .dayCount(ACT_ACT_ISDA) .sabrVolatilityFormula(SabrVolatilityFormula.hagan()) .betaCurve(betaCurve) .build(); assertEquals(test.getDayCount(), ACT_ACT_ISDA); assertEquals(test.getIndex(), USD_LIBOR_3M); assertEquals(test.getInterpolator(), LINEAR); assertEquals(test.getExtrapolatorLeft(), FLAT); assertEquals(test.getExtrapolatorRight(), CurveExtrapolators.LINEAR); assertEquals(test.getName(), NAME); assertEquals(test.getBetaCurve().get(), betaCurve); assertFalse(test.getRhoCurve().isPresent()); assertEquals(test.getSabrVolatilityFormula(), SabrVolatilityFormula.hagan()); assertEquals(test.getShiftCurve(), ConstantCurve.of("Zero shift", 0d)); }
public void test_builder() { Curve betaCurve = InterpolatedNodalCurve.of( Curves.sabrParameterByExpiry(NAME.getName() + "-Beta", ACT_365F, SABR_BETA), DoubleArray.of(2d, 5d), DoubleArray.of(0.5, 0.8),
public void coverage() { SabrIborCapletFloorletVolatilityCalibrationDefinition test1 = SabrIborCapletFloorletVolatilityCalibrationDefinition.ofFixedBeta( NAME, USD_LIBOR_3M, ACT_365F, BETA_RHO, ALPHA_KNOTS, BETA_RHO_KNOTS, NU_KNOTS, DOUBLE_QUADRATIC, FLAT, LINEAR, HAGAN); coverImmutableBean(test1); Curve betaCurve = InterpolatedNodalCurve.of( Curves.sabrParameterByExpiry(NAME.getName() + "-Beta", ACT_365F, SABR_BETA), DoubleArray.of(2d, 5d), DoubleArray.of(0.5, 0.8), CurveInterpolators.PCHIP); Curve shiftCurve = ConstantCurve.of("shift curve", 0.03d); DoubleArray initial = DoubleArray.of(0.34, 0.5, -0.22, 1.2); ImmutableList<DoubleArray> knots = ImmutableList.of(ALPHA_KNOTS, DoubleArray.of(), BETA_RHO_KNOTS, DoubleArray.of(1.1)); SabrIborCapletFloorletVolatilityCalibrationDefinition test2 = SabrIborCapletFloorletVolatilityCalibrationDefinition.builder() .betaCurve(betaCurve) .dayCount(ACT_360) .extrapolatorLeft(LINEAR) .extrapolatorRight(FLAT) .interpolator(PCHIP) .index(GBP_LIBOR_3M) .initialParameters(initial) .name(IborCapletFloorletVolatilitiesName.of("other")) .parameterCurveNodes(knots) .sabrVolatilityFormula(HAGAN) .shiftCurve(shiftCurve) .build(); coverBeanEquals(test1, test2); }
public void test_build_fail() { Curve betaCurve = InterpolatedNodalCurve.of( Curves.sabrParameterByExpiry(NAME.getName() + "-Beta", ACT_365F, SABR_BETA), DoubleArray.of(2d, 5d), DoubleArray.of(0.5, 0.8), CurveInterpolators.PCHIP); Curve rhoCurve = InterpolatedNodalCurve.of( Curves.sabrParameterByExpiry(NAME.getName() + "-Rho", ACT_365F, SABR_RHO), DoubleArray.of(2d, 5d), DoubleArray.of(0.5, 0.8),