public void test_impliedVolatility_after_expiry() { assertThrowsIllegalArg(() -> PRICER_SWAPTION.impliedVolatility(SWAPTION_REC_LONG_PAST, RATE_PROVIDER, VOLS)); assertThrowsIllegalArg(() -> PRICER_SWAPTION.impliedVolatility(SWAPTION_PAY_SHORT_PAST, RATE_PROVIDER, VOLS)); }
public void implied_volatility_round_trip() { // Compute pv and then implied vol from PV and compare with direct implied vol CurrencyAmount pvLongRec = PRICER_SWAPTION.presentValue(SWAPTION_REC_LONG, RATE_PROVIDER, VOLS); double impliedLongRecComputed = PRICER_SWAPTION.impliedVolatilityFromPresentValue( SWAPTION_REC_LONG, RATE_PROVIDER, ACT_365F, pvLongRec.getAmount()); double impliedLongRecInterpolated = PRICER_SWAPTION.impliedVolatility(SWAPTION_REC_LONG, RATE_PROVIDER, VOLS); assertEquals(impliedLongRecComputed, impliedLongRecInterpolated, TOL); CurrencyAmount pvLongPay = PRICER_SWAPTION.presentValue(SWAPTION_PAY_LONG, RATE_PROVIDER, VOLS); double impliedLongPayComputed = PRICER_SWAPTION.impliedVolatilityFromPresentValue( SWAPTION_PAY_LONG, RATE_PROVIDER, ACT_365F, pvLongPay.getAmount()); double impliedLongPayInterpolated = PRICER_SWAPTION.impliedVolatility(SWAPTION_PAY_LONG, RATE_PROVIDER, VOLS); assertEquals(impliedLongPayComputed, impliedLongPayInterpolated, TOL); CurrencyAmount pvShortRec = PRICER_SWAPTION.presentValue(SWAPTION_REC_SHORT, RATE_PROVIDER, VOLS); double impliedShortRecComputed = PRICER_SWAPTION.impliedVolatilityFromPresentValue( SWAPTION_REC_SHORT, RATE_PROVIDER, ACT_365F, pvShortRec.getAmount()); double impliedShortRecInterpolated = PRICER_SWAPTION.impliedVolatility(SWAPTION_REC_SHORT, RATE_PROVIDER, VOLS); assertEquals(impliedShortRecComputed, impliedShortRecInterpolated, TOL); }
public void test_impliedVolatility_at_expiry() { double forward = PRICER_SWAP.parRate(RSWAP_REC, RATE_PROVIDER); double expected = VOLS.volatility( VAL_DATE.atTime(SWAPTION_EXPIRY_TIME).atZone(SWAPTION_EXPIRY_ZONE), SWAP_TENOR_YEAR, STRIKE, forward); double computedRec = PRICER_SWAPTION.impliedVolatility(SWAPTION_REC_LONG_AT_EXPIRY, RATE_PROVIDER, VOLS); double computedPay = PRICER_SWAPTION.impliedVolatility(SWAPTION_PAY_SHORT_AT_EXPIRY, RATE_PROVIDER, VOLS); assertEquals(computedRec, expected, TOL); assertEquals(computedPay, expected, TOL); }
public void test_impliedVolatility() { double forward = PRICER_SWAP.parRate(RSWAP_REC, RATE_PROVIDER); double expected = VOLS.volatility(SWAPTION_REC_LONG.getExpiry(), SWAP_TENOR_YEAR, STRIKE, forward); double computedRec = PRICER_SWAPTION.impliedVolatility(SWAPTION_REC_LONG, RATE_PROVIDER, VOLS); double computedPay = PRICER_SWAPTION.impliedVolatility(SWAPTION_PAY_SHORT, RATE_PROVIDER, VOLS); assertEquals(computedRec, expected, TOL); assertEquals(computedPay, expected, TOL); }