/** * Obtains {@code SABRVolatilitySwaptionProvider} for specified valuation date. * * @param valuationDate the valuation date * @param shift nonzero shift if true, zero shift otherwise * @return the volatility provider */ public static SabrParametersSwaptionVolatilities getVolatilitiesUsd(LocalDate valuationDate, boolean shift) { ZonedDateTime dateTime = valuationDate.atStartOfDay(ZoneOffset.UTC); return shift ? SabrParametersSwaptionVolatilities.of(NAME, SWAP_CONVENTION_USD, dateTime, SABR_PARAM_SHIFT_USD) : SabrParametersSwaptionVolatilities.of(NAME, SWAP_CONVENTION_USD, dateTime, SABR_PARAM_USD); }
/** * Obtains {@code SABRVolatilitySwaptionProvider} for specified valuation date. * * @param valuationDate the valuation date * @param shift nonzero shift if true, zero shift otherwise * @return the volatility provider */ public static SabrParametersSwaptionVolatilities getVolatilitiesEur(LocalDate valuationDate, boolean shift) { ZonedDateTime dateTime = valuationDate.atStartOfDay(ZoneOffset.UTC); return shift ? SabrParametersSwaptionVolatilities.of(NAME, SWAP_CONVENTION_EUR, dateTime, SABR_PARAM_SHIFT_EUR) : SabrParametersSwaptionVolatilities.of(NAME, SWAP_CONVENTION_EUR, dateTime, SABR_PARAM_EUR); } }
public void coverage() { SabrParametersSwaptionVolatilities test1 = SabrParametersSwaptionVolatilities.of(NAME, CONV, DATE_TIME, PARAM); coverImmutableBean(test1); SabrParametersSwaptionVolatilities test2 = SabrParametersSwaptionVolatilities.of( NAME2, SwaptionSabrRateVolatilityDataSet.SWAP_CONVENTION_EUR, DATE_TIME.plusDays(1), SwaptionSabrRateVolatilityDataSet.SABR_PARAM_USD); coverBeanEquals(test1, test2); } }
public void test_of() { SabrParametersSwaptionVolatilities test = SabrParametersSwaptionVolatilities.of(NAME, CONV, DATE_TIME, PARAM); assertEquals(test.getConvention(), CONV); assertEquals(test.getDayCount(), ACT_ACT_ISDA); assertEquals(test.getParameters(), PARAM); assertEquals(test.getValuationDateTime(), DATE_TIME); }
public void test_volatility() { SabrParametersSwaptionVolatilities prov = SabrParametersSwaptionVolatilities.of(NAME, CONV, DATE_TIME, PARAM); for (int i = 0; i < NB_TEST; i++) { for (int j = 0; j < NB_STRIKE; ++j) { double expiryTime = prov.relativeTime(TEST_OPTION_EXPIRY[i]); double volExpected = PARAM.volatility(expiryTime, TEST_TENOR[i], TEST_STRIKE[j], TEST_FORWARD); double volComputed = prov.volatility(TEST_OPTION_EXPIRY[i], TEST_TENOR[i], TEST_STRIKE[j], TEST_FORWARD); assertEquals(volComputed, volExpected, TOLERANCE_VOL); } } }
public void test_tenor() { SabrParametersSwaptionVolatilities prov = SabrParametersSwaptionVolatilities.of(NAME, CONV, DATE_TIME, PARAM); double test1 = prov.tenor(DATE, DATE); assertEquals(test1, 0d); double test2 = prov.tenor(DATE, DATE.plusYears(2)); double test3 = prov.tenor(DATE, DATE.minusYears(2)); assertEquals(test2, -test3); double test4 = prov.tenor(DATE, LocalDate.of(2019, 2, 2)); double test5 = prov.tenor(DATE, LocalDate.of(2018, 12, 31)); assertEquals(test4, 5d); assertEquals(test5, 5d); }
private SabrParametersSwaptionVolatilities replaceSabrParameters( SabrInterestRateParameters sabrParams, SabrParametersSwaptionVolatilities orgVols) { return SabrParametersSwaptionVolatilities.of( SwaptionVolatilitiesName.of("Test-SABR"), orgVols.getConvention(), orgVols.getValuationDateTime(), sabrParams); }
public void test_relativeTime() { SabrParametersSwaptionVolatilities prov = SabrParametersSwaptionVolatilities.of(NAME, CONV, DATE_TIME, PARAM); double test1 = prov.relativeTime(DATE_TIME); assertEquals(test1, 0d); double test2 = prov.relativeTime(DATE_TIME.plusYears(2)); double test3 = prov.relativeTime(DATE_TIME.minusYears(2)); assertEquals(test2, -test3, 1e-2); }
public void test_calc() { SabrParametersSwaptionVolatilities test = SabrParametersSwaptionVolatilities.of(NAME, CONV, DATE_TIME, PARAM); assertEquals(test.alpha(1d, 2d), PARAM.alpha(1d, 2d)); assertEquals(test.beta(1d, 2d), PARAM.beta(1d, 2d)); assertEquals(test.rho(1d, 2d), PARAM.rho(1d, 2d)); assertEquals(test.nu(1d, 2d), PARAM.nu(1d, 2d)); assertEquals(test.shift(1d, 2d), PARAM.shift(1d, 2d)); }
public void test_findData() { SabrParametersSwaptionVolatilities test = SabrParametersSwaptionVolatilities.of(NAME, CONV, DATE_TIME, PARAM); assertEquals(test.findData(PARAM.getAlphaSurface().getName()), Optional.of(PARAM.getAlphaSurface())); assertEquals(test.findData(PARAM.getBetaSurface().getName()), Optional.of(PARAM.getBetaSurface())); assertEquals(test.findData(PARAM.getRhoSurface().getName()), Optional.of(PARAM.getRhoSurface())); assertEquals(test.findData(PARAM.getNuSurface().getName()), Optional.of(PARAM.getNuSurface())); assertEquals(test.findData(PARAM.getShiftSurface().getName()), Optional.of(PARAM.getShiftSurface())); assertEquals(test.findData(SurfaceName.of("Rubbish")), Optional.empty()); }
public void test_pointShifts() { SabrParametersSwaptionVolatilities base = SabrParametersSwaptionVolatilities.of(NAME, CONV, DATE_TIME, PARAM); PointShiftsBuilder builder = PointShifts.builder(ShiftType.ABSOLUTE); for (int i = 0; i < base.getParameterCount(); ++i) { builder.addShift(0, base.getParameterMetadata(i).getIdentifier(), 0.1d * (i + 1d)); builder.addShift(1, base.getParameterMetadata(i).getIdentifier(), 10d * (i + 1d)); } PointShifts shifts = builder.build(); MarketDataBox<ParameterizedData> resBox = shifts.applyTo(MarketDataBox.ofSingleValue(base), REF_DATA); SabrParametersSwaptionVolatilities computed0 = (SabrParametersSwaptionVolatilities) resBox.getValue(0); SabrParametersSwaptionVolatilities computed1 = (SabrParametersSwaptionVolatilities) resBox.getValue(1); for (int i = 0; i < base.getParameterCount(); ++i) { assertEquals(computed0.getParameter(i), base.getParameter(i) + 0.1d * (i + 1d)); assertEquals(computed1.getParameter(i), base.getParameter(i) + 10d * (i + 1d)); } }
public void test_parameterSensitivity() { double alphaSensi = 2.24, betaSensi = 3.45, rhoSensi = -2.12, nuSensi = -0.56; SabrParametersSwaptionVolatilities prov = SabrParametersSwaptionVolatilities.of(NAME, CONV, DATE_TIME, PARAM); for (int i = 0; i < NB_TEST; i++) { double expiryTime = prov.relativeTime(TEST_OPTION_EXPIRY[i]);
double[] points2 = new double[] {-0.145, 1.01, -5.0, -11.0}; double[] points3 = new double[] {1.3, -4.32, 2.1, -7.18}; SabrParametersSwaptionVolatilities prov = SabrParametersSwaptionVolatilities.of(NAME, CONV, DATE_TIME, PARAM); double expiryTime0 = prov.relativeTime(TEST_OPTION_EXPIRY[0]); double expiryTime3 = prov.relativeTime(TEST_OPTION_EXPIRY[3]);