Exemplo n.º 1
0
        //-------------------------------------------------------------------------
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        //-------------------------------------------------------------------------
        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);
        }