Exemplo n.º 1
0
        // market quote bucketed PV01 for one scenario
        internal CurrencyParameterSensitivities pv01RatesMarketQuoteBucketed(ResolvedCmsTrade trade, RatesProvider ratesProvider, SwaptionVolatilities volatilities)
        {
            PointSensitivities             pointSensitivity     = this.pointSensitivity(trade, ratesProvider, volatilities);
            CurrencyParameterSensitivities parameterSensitivity = ratesProvider.parameterSensitivity(pointSensitivity);

            return(MARKET_QUOTE_SENS.sensitivity(parameterSensitivity, ratesProvider).multipliedBy(ONE_BASIS_POINT));
        }
        /// <summary>
        /// Calculates the present value curve sensitivity of the CMS trade by simple forward estimation.
        /// <para>
        /// The present value sensitivity of the trade is the sensitivity of the present value to the underlying curves.
        ///
        /// </para>
        /// </summary>
        /// <param name="trade">  the CMS trade </param>
        /// <param name="ratesProvider">  the rates provider </param>
        /// <returns> the present value sensitivity </returns>
        public virtual PointSensitivities presentValueSensitivity(ResolvedCmsTrade trade, RatesProvider ratesProvider)
        {
            PointSensitivityBuilder pvSensiCms = productPricer.presentValueSensitivity(trade.Product, ratesProvider);

            if (!trade.Premium.Present)
            {
                return(pvSensiCms.build());
            }
            PointSensitivityBuilder pvSensiPremium = paymentPricer.presentValueSensitivity(trade.Premium.get(), ratesProvider);

            return(pvSensiCms.combinedWith(pvSensiPremium).build());
        }
        //-------------------------------------------------------------------------
        /// <summary>
        /// Calculates the present value of the CMS trade by simple forward estimation.
        /// </summary>
        /// <param name="trade">  the CMS trade </param>
        /// <param name="ratesProvider">  the rates provider </param>
        /// <returns> the present value </returns>
        public virtual MultiCurrencyAmount presentValue(ResolvedCmsTrade trade, RatesProvider ratesProvider)
        {
            MultiCurrencyAmount pvCms = productPricer.presentValue(trade.Product, ratesProvider);

            if (!trade.Premium.Present)
            {
                return(pvCms);
            }
            CurrencyAmount pvPremium = paymentPricer.presentValue(trade.Premium.get(), ratesProvider);

            return(pvCms.plus(pvPremium));
        }
Exemplo n.º 4
0
        //-------------------------------------------------------------------------
        /// <summary>
        /// Calculates the currency exposure of the trade.
        /// </summary>
        /// <param name="trade">  the CMS trade </param>
        /// <param name="ratesProvider">  the rates provider </param>
        /// <param name="swaptionVolatilities">  the swaption volatilities </param>
        /// <returns> the currency exposure </returns>
        public virtual MultiCurrencyAmount currencyExposure(ResolvedCmsTrade trade, RatesProvider ratesProvider, SabrSwaptionVolatilities swaptionVolatilities)
        {
            MultiCurrencyAmount ceCms = productPricer.currencyExposure(trade.Product, ratesProvider, swaptionVolatilities);

            if (!trade.Premium.Present)
            {
                return(ceCms);
            }
            CurrencyAmount pvPremium = paymentPricer.presentValue(trade.Premium.get(), ratesProvider);

            return(ceCms.plus(pvPremium));
        }
        /// <summary>
        /// Calculates the current cash of the trade.
        /// </summary>
        /// <param name="trade">  the CMS trade </param>
        /// <param name="ratesProvider">  the rates provider </param>
        /// <returns> the current cash </returns>
        public virtual MultiCurrencyAmount currentCash(ResolvedCmsTrade trade, RatesProvider ratesProvider)
        {
            MultiCurrencyAmount ccCms = productPricer.currentCash(trade.Product, ratesProvider);

            if (!trade.Premium.Present)
            {
                return(ccCms);
            }
            Payment premium = trade.Premium.get();

            if (premium.Date.Equals(ratesProvider.ValuationDate))
            {
                ccCms = ccCms.plus(premium.Currency, premium.Amount);
            }
            return(ccCms);
        }
Exemplo n.º 6
0
 //-------------------------------------------------------------------------
 /// <summary>
 /// Calculates present value sensitivity across one or more scenarios.
 /// <para>
 /// This is the sensitivity of present value to a one basis point shift in
 /// the market quotes used to calibrate the curves.
 /// The result is provided for each affected curve and currency, bucketed by curve node.
 ///
 /// </para>
 /// </summary>
 /// <param name="trade">  the trade </param>
 /// <param name="ratesLookup">  the lookup used to query the market data </param>
 /// <param name="marketData">  the market data </param>
 /// <param name="swaptionLookup">  the lookup used to query the swaption market data </param>
 /// <returns> the present value sensitivity, one entry per scenario </returns>
 public virtual ScenarioArray <CurrencyParameterSensitivities> pv01RatesMarketQuoteBucketed(ResolvedCmsTrade trade, RatesMarketDataLookup ratesLookup, SwaptionMarketDataLookup swaptionLookup, ScenarioMarketData marketData)
 {
     return(calc.pv01RatesMarketQuoteBucketed(trade, ratesLookup.marketDataView(marketData), swaptionLookup.marketDataView(marketData)));
 }
Exemplo n.º 7
0
 /// <summary>
 /// Calculates present value sensitivity for a single set of market data.
 /// <para>
 /// This is the sensitivity of present value to a one basis point shift in
 /// the market quotes used to calibrate the curves.
 /// The result is the sum of the sensitivities of all affected curves.
 ///
 /// </para>
 /// </summary>
 /// <param name="trade">  the trade </param>
 /// <param name="ratesProvider">  the market data </param>
 /// <param name="volatilities">  the swaption volatilities </param>
 /// <returns> the present value sensitivity </returns>
 public virtual MultiCurrencyAmount pv01RatesMarketQuoteSum(ResolvedCmsTrade trade, RatesProvider ratesProvider, SwaptionVolatilities volatilities)
 {
     return(calc.pv01RatesMarketQuoteSum(trade, ratesProvider, volatilities));
 }
Exemplo n.º 8
0
 /// <summary>
 /// Calculates the present value sensitivity to the strike value.
 /// <para>
 /// The present value sensitivity of the trade is the sensitivity of the present value to the strike value.
 ///
 /// </para>
 /// </summary>
 /// <param name="trade">  the CMS trade </param>
 /// <param name="ratesProvider">  the rates provider </param>
 /// <param name="swaptionVolatilities">  the swaption volatilities </param>
 /// <returns> the present value sensitivity </returns>
 public virtual double presentValueSensitivityStrike(ResolvedCmsTrade trade, RatesProvider ratesProvider, SabrSwaptionVolatilities swaptionVolatilities)
 {
     return(productPricer.presentValueSensitivityStrike(trade.Product, ratesProvider, swaptionVolatilities));
 }
Exemplo n.º 9
0
 //-------------------------------------------------------------------------
 /// <summary>
 /// Calculates present value across one or more scenarios.
 /// </summary>
 /// <param name="trade">  the trade </param>
 /// <param name="ratesLookup">  the lookup used to query the market data </param>
 /// <param name="swaptionLookup">  the lookup used to query the swaption market data </param>
 /// <param name="marketData">  the market data </param>
 /// <returns> the present value, one entry per scenario </returns>
 public virtual MultiCurrencyScenarioArray presentValue(ResolvedCmsTrade trade, RatesMarketDataLookup ratesLookup, SwaptionMarketDataLookup swaptionLookup, ScenarioMarketData marketData)
 {
     return(calc.presentValue(trade, ratesLookup.marketDataView(marketData), swaptionLookup.marketDataView(marketData)));
 }
Exemplo n.º 10
0
 // present value for one scenario
 internal MultiCurrencyAmount presentValue(ResolvedCmsTrade trade, RatesProvider ratesProvider, SwaptionVolatilities volatilities)
 {
     return(tradePricer.presentValue(trade, ratesProvider, checkSabr(volatilities)));
 }
Exemplo n.º 11
0
 //-------------------------------------------------------------------------
 // returns the Ibor index or the CMS leg
 internal static IborIndex cmsLegIborIndex(ResolvedCmsTrade trade)
 {
     return(trade.Product.CmsLeg.UnderlyingIndex);
 }
Exemplo n.º 12
0
 // point sensitivity
 private PointSensitivities pointSensitivity(ResolvedCmsTrade trade, RatesProvider ratesProvider, SwaptionVolatilities volatilities)
 {
     return(tradePricer.presentValueSensitivityRates(trade, ratesProvider, checkSabr(volatilities)));
 }
Exemplo n.º 13
0
        //-------------------------------------------------------------------------
        // calculates market quote bucketed PV01 for all scenarios
        internal ScenarioArray <CurrencyParameterSensitivities> pv01RatesMarketQuoteBucketed(ResolvedCmsTrade trade, RatesScenarioMarketData ratesMarketData, SwaptionScenarioMarketData swaptionMarketData)
        {
            IborIndex index = cmsLegIborIndex(trade);

            return(ScenarioArray.of(ratesMarketData.ScenarioCount, i => pv01RatesMarketQuoteBucketed(trade, ratesMarketData.scenario(i).ratesProvider(), swaptionMarketData.scenario(i).volatilities(index))));
        }
Exemplo n.º 14
0
 /// <summary>
 /// Calculates present value sensitivity for a single set of market data.
 /// <para>
 /// This is the sensitivity of present value to a one basis point shift in
 /// the market quotes used to calibrate the curves.
 /// The result is provided for each affected curve and currency, bucketed by curve node.
 ///
 /// </para>
 /// </summary>
 /// <param name="trade">  the trade </param>
 /// <param name="ratesProvider">  the market data </param>
 /// <param name="volatilities">  the swaption volatilities </param>
 /// <returns> the present value sensitivity </returns>
 public virtual CurrencyParameterSensitivities pv01RatesMarketQuoteBucketed(ResolvedCmsTrade trade, RatesProvider ratesProvider, SwaptionVolatilities volatilities)
 {
     return(calc.pv01RatesMarketQuoteBucketed(trade, ratesProvider, volatilities));
 }
Exemplo n.º 15
0
        //-------------------------------------------------------------------------
        // calculates calibrated sum PV01 for all scenarios
        internal MultiCurrencyScenarioArray pv01RatesCalibratedSum(ResolvedCmsTrade trade, RatesScenarioMarketData ratesMarketData, SwaptionScenarioMarketData swaptionMarketData)
        {
            IborIndex index = cmsLegIborIndex(trade);

            return(MultiCurrencyScenarioArray.of(ratesMarketData.ScenarioCount, i => pv01RatesCalibratedSum(trade, ratesMarketData.scenario(i).ratesProvider(), swaptionMarketData.scenario(i).volatilities(index))));
        }
Exemplo n.º 16
0
 /// <summary>
 /// Calculates currency exposure for a single set of market data.
 /// <para>
 /// The currency risk, expressed as the equivalent amount in each currency.
 ///
 /// </para>
 /// </summary>
 /// <param name="trade">  the trade </param>
 /// <param name="ratesProvider">  the market data </param>
 /// <param name="volatilities">  the swaption volatilities </param>
 /// <returns> the currency exposure </returns>
 public virtual MultiCurrencyAmount currencyExposure(ResolvedCmsTrade trade, RatesProvider ratesProvider, SwaptionVolatilities volatilities)
 {
     return(calc.currencyExposure(trade, ratesProvider, volatilities));
 }
Exemplo n.º 17
0
        // calibrated sum PV01 for one scenario
        internal MultiCurrencyAmount pv01RatesCalibratedSum(ResolvedCmsTrade trade, RatesProvider ratesProvider, SwaptionVolatilities volatilities)
        {
            PointSensitivities pointSensitivity = this.pointSensitivity(trade, ratesProvider, volatilities);

            return(ratesProvider.parameterSensitivity(pointSensitivity).total().multipliedBy(ONE_BASIS_POINT));
        }
Exemplo n.º 18
0
 /// <summary>
 /// Calculates present value for a single set of market data.
 /// </summary>
 /// <param name="trade">  the trade </param>
 /// <param name="ratesProvider">  the market data </param>
 /// <param name="volatilities">  the swaption volatilities </param>
 /// <returns> the present value </returns>
 public virtual MultiCurrencyAmount presentValue(ResolvedCmsTrade trade, RatesProvider ratesProvider, SwaptionVolatilities volatilities)
 {
     return(calc.presentValue(trade, ratesProvider, volatilities));
 }
Exemplo n.º 19
0
 /// <summary>
 /// Calculates the present value sensitivity to the SABR model parameters.
 /// <para>
 /// The present value sensitivity of the trade is the sensitivity of the present value to the SABR model parameters,
 /// alpha, beta, rho and nu.
 ///
 /// </para>
 /// </summary>
 /// <param name="trade">  the CMS trade </param>
 /// <param name="ratesProvider">  the rates provider </param>
 /// <param name="swaptionVolatilities">  the swaption volatilities </param>
 /// <returns> the present value sensitivity </returns>
 public virtual PointSensitivities presentValueSensitivityModelParamsSabr(ResolvedCmsTrade trade, RatesProvider ratesProvider, SabrSwaptionVolatilities swaptionVolatilities)
 {
     return(productPricer.presentValueSensitivityModelParamsSabr(trade.Product, ratesProvider, swaptionVolatilities).build());
 }