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);
        }
Exemplo n.º 2
0
        //-------------------------------------------------------------------------
        public virtual void present_value_black_vol_sensitivity_premium_forward()
        {
            PointSensitivities  vegaTrade   = PRICER_TRADE.presentValueSensitivityModelParamsVolatility(SWAPTION_PREFWD_LONG_REC, RATE_PROVIDER, VOLS);
            SwaptionSensitivity vegaProduct = PRICER_PRODUCT.presentValueSensitivityModelParamsVolatility(SWAPTION_LONG_REC, RATE_PROVIDER, VOLS);

            assertEquals(vegaTrade.Sensitivities.get(0).Sensitivity, vegaProduct.Sensitivity, NOTIONAL * TOL);
        }
        //-------------------------------------------------------------------------
        /// <summary>
        /// Calculates the present value sensitivity to the implied volatility of the swaption trade.
        /// <para>
        /// The sensitivity to the Black volatility is also called Black vega.
        ///
        /// </para>
        /// </summary>
        /// <param name="trade">  the swaption trade </param>
        /// <param name="ratesProvider">  the rates provider </param>
        /// <param name="swaptionVolatilities">  the volatilities </param>
        /// <returns> the point sensitivity to the Black volatility </returns>
        public virtual PointSensitivities presentValueSensitivityModelParamsVolatility(ResolvedSwaptionTrade trade, RatesProvider ratesProvider, BlackSwaptionVolatilities swaptionVolatilities)
        {
            ResolvedSwaption    product   = trade.Product;
            SwaptionSensitivity pointSens = isCash(product) ? cashParYieldPricer.presentValueSensitivityModelParamsVolatility(product, ratesProvider, swaptionVolatilities) : physicalPricer.presentValueSensitivityModelParamsVolatility(product, ratesProvider, swaptionVolatilities);

            return(PointSensitivities.of(pointSens));
        }