// 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)); }
//------------------------------------------------------------------------- /// <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); }
//------------------------------------------------------------------------- /// <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))); }
/// <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)); }
/// <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)); }
//------------------------------------------------------------------------- /// <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))); }
// present value for one scenario internal MultiCurrencyAmount presentValue(ResolvedCmsTrade trade, RatesProvider ratesProvider, SwaptionVolatilities volatilities) { return(tradePricer.presentValue(trade, ratesProvider, checkSabr(volatilities))); }
//------------------------------------------------------------------------- // returns the Ibor index or the CMS leg internal static IborIndex cmsLegIborIndex(ResolvedCmsTrade trade) { return(trade.Product.CmsLeg.UnderlyingIndex); }
// point sensitivity private PointSensitivities pointSensitivity(ResolvedCmsTrade trade, RatesProvider ratesProvider, SwaptionVolatilities volatilities) { return(tradePricer.presentValueSensitivityRates(trade, ratesProvider, checkSabr(volatilities))); }
//------------------------------------------------------------------------- // 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)))); }
/// <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)); }
//------------------------------------------------------------------------- // 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)))); }
/// <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)); }
// 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)); }
/// <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)); }
/// <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()); }