//------------------------------------------------------------------------- public virtual void test_presentValueSensitivityBlackVolatility() { SwaptionSensitivity sensiRec = PRICER.presentValueSensitivityModelParamsVolatility(SWAPTION_REC_LONG, RATE_PROVIDER, VOLS); SwaptionSensitivity sensiPay = PRICER.presentValueSensitivityModelParamsVolatility(SWAPTION_PAY_SHORT, RATE_PROVIDER, VOLS); double forward = SWAP_PRICER.parRate(RSWAP_REC, RATE_PROVIDER); double annuityCash = SWAP_PRICER.LegPricer.annuityCash(RFIXED_LEG_REC, forward); double expiry = VOLS.relativeTime(SWAPTION_REC_LONG.Expiry); double tenor = VOLS.tenor(SETTLE, END); double volatility = SURFACE.zValue(expiry, tenor); double settle = ACT_ACT_ISDA.relativeYearFraction(VAL_DATE, SETTLE); double df = Math.Exp(-DSC_CURVE.yValue(settle) * settle); double expectedRec = df * annuityCash * BlackFormulaRepository.vega(forward, RATE, expiry, volatility); double expectedPay = -df *annuityCash *BlackFormulaRepository.vega(forward, RATE, expiry, volatility); assertEquals(sensiRec.Currency, EUR); assertEquals(sensiRec.Sensitivity, expectedRec, NOTIONAL * TOL); assertEquals(sensiRec.VolatilitiesName, VOLS.Name); assertEquals(sensiRec.Expiry, expiry); assertEquals(sensiRec.Tenor, 5.0); assertEquals(sensiRec.Strike, RATE); assertEquals(sensiRec.Forward, forward, TOL); assertEquals(sensiPay.Currency, EUR); assertEquals(sensiPay.Sensitivity, expectedPay, NOTIONAL * TOL); assertEquals(sensiRec.VolatilitiesName, VOLS.Name); assertEquals(sensiPay.Expiry, expiry); assertEquals(sensiPay.Tenor, 5.0); assertEquals(sensiPay.Strike, RATE); assertEquals(sensiPay.Forward, forward, TOL); }
//------------------------------------------------------------------------- public virtual void test_price() { double computed = PRICER.price(FUTURE, PROVIDER); double pvSwap = PRICER.SwapPricer.presentValue(RSWAP, PROVIDER).getAmount(USD).Amount; double yc = ACT_ACT_ISDA.relativeYearFraction(VAL_DATE, DELIVERY); double df = Math.Exp(-USD_DSC.yValue(yc) * yc); double expected = 1d + pvSwap / df; assertEquals(computed, expected, TOL); }
public virtual void test_presentValueDelta_atMaturity() { CurrencyAmount computedRec = PRICER.presentValueDelta(SWAPTION_REC_LONG, RATES_PROVIDER_AT_MATURITY, VOLS_AT_MATURITY); CurrencyAmount computedPay = PRICER.presentValueDelta(SWAPTION_PAY_SHORT, RATES_PROVIDER_AT_MATURITY, VOLS_AT_MATURITY); double forward = SWAP_PRICER.parRate(RSWAP_REC, RATES_PROVIDER_AT_MATURITY); double annuityCash = SWAP_PRICER.LegPricer.annuityCash(RFIXED_LEG_REC, forward); double settle = ACT_ACT_ISDA.relativeYearFraction(MATURITY, SETTLE); double df = Math.Exp(-DSC_CURVE.yValue(settle) * settle); assertEquals(computedRec.Amount, -df * annuityCash, NOTIONAL * TOL); assertEquals(computedPay.Amount, 0d, NOTIONAL * TOL); }
//------------------------------------------------------------------------- public virtual void test_presentValueTheta() { CurrencyAmount computedRec = PRICER.presentValueTheta(SWAPTION_REC_LONG, RATE_PROVIDER, VOLS); CurrencyAmount computedPay = PRICER.presentValueTheta(SWAPTION_PAY_SHORT, RATE_PROVIDER, VOLS); double forward = SWAP_PRICER.parRate(RSWAP_REC, RATE_PROVIDER); double annuityCash = SWAP_PRICER.LegPricer.annuityCash(RFIXED_LEG_REC, forward); double expiry = VOLS.relativeTime(SWAPTION_REC_LONG.Expiry); double tenor = VOLS.tenor(SETTLE, END); double volatility = SURFACE.zValue(expiry, tenor); double settle = ACT_ACT_ISDA.relativeYearFraction(VAL_DATE, SETTLE); double df = Math.Exp(-DSC_CURVE.yValue(settle) * settle); double expectedRec = df * annuityCash * BlackFormulaRepository.driftlessTheta(forward, RATE, expiry, volatility); double expectedPay = -df *annuityCash *BlackFormulaRepository.driftlessTheta(forward, RATE, expiry, volatility); assertEquals(computedRec.Currency, EUR); assertEquals(computedRec.Amount, expectedRec, NOTIONAL * TOL); assertEquals(computedPay.Currency, EUR); assertEquals(computedPay.Amount, expectedPay, NOTIONAL * TOL); }