// market quote bucketed PV01 for one scenario internal CurrencyParameterSensitivities pv01MarketQuoteBucketed(ResolvedFxSingleTrade trade, RatesProvider ratesProvider) { PointSensitivities pointSensitivity = tradePricer.presentValueSensitivity(trade, ratesProvider); CurrencyParameterSensitivities parameterSensitivity = ratesProvider.parameterSensitivity(pointSensitivity); return(MARKET_QUOTE_SENS.sensitivity(parameterSensitivity, ratesProvider).multipliedBy(ONE_BASIS_POINT)); }
//------------------------------------------------------------------------- // calculates par spread for all scenarios internal DoubleScenarioArray parSpread(ResolvedFxSingleTrade trade, RatesScenarioMarketData marketData) { return(DoubleScenarioArray.of(marketData.ScenarioCount, i => parSpread(trade, marketData.scenario(i).ratesProvider()))); }
/// <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> /// <returns> the present value </returns> public virtual MultiCurrencyAmount presentValue(ResolvedFxSingleTrade trade, RatesProvider ratesProvider) { return(calc.presentValue(trade, ratesProvider)); }
/// <summary> /// Calculates the forward FX rate for a single set of market data. /// </summary> /// <param name="trade"> the trade </param> /// <param name="ratesProvider"> the market data </param> /// <returns> the current cash </returns> public virtual FxRate forwardFxRate(ResolvedFxSingleTrade trade, RatesProvider ratesProvider) { return(calc.forwardFxRate(trade, ratesProvider)); }
/// <summary> /// Calculates current cash for a single set of market data. /// <para> /// The sum of all cash flows paid on the valuation date. /// /// </para> /// </summary> /// <param name="trade"> the trade </param> /// <param name="ratesProvider"> the market data </param> /// <returns> the current cash </returns> public virtual MultiCurrencyAmount currentCash(ResolvedFxSingleTrade trade, RatesProvider ratesProvider) { return(calc.currentCash(trade, ratesProvider)); }
//------------------------------------------------------------------------- /// <summary> /// Calculates par spread across one or more scenarios. /// </summary> /// <param name="trade"> the trade </param> /// <param name="lookup"> the lookup used to query the market data </param> /// <param name="marketData"> the market data </param> /// <returns> the par spread, one entry per scenario </returns> public virtual DoubleScenarioArray parSpread(ResolvedFxSingleTrade trade, RatesMarketDataLookup lookup, ScenarioMarketData marketData) { return(calc.parSpread(trade, lookup.marketDataView(marketData))); }
//------------------------------------------------------------------------- /// <summary> /// Calculates present value sensitivity across one or more scenarios. /// <para> /// This is the sensitivity of /// <seealso cref="#presentValue(ResolvedFxSingleTrade, RatesMarketDataLookup, ScenarioMarketData) 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="lookup"> the lookup used to query the market data </param> /// <param name="marketData"> the market data </param> /// <returns> the present value sensitivity, one entry per scenario </returns> public virtual ScenarioArray <CurrencyParameterSensitivities> pv01MarketQuoteBucketed(ResolvedFxSingleTrade trade, RatesMarketDataLookup lookup, ScenarioMarketData marketData) { return(calc.pv01MarketQuoteBucketed(trade, lookup.marketDataView(marketData))); }
//------------------------------------------------------------------------- /// <summary> /// Calculates the currency exposure by discounting each payment in its own currency. /// </summary> /// <param name="trade"> the trade </param> /// <param name="provider"> the rates provider </param> /// <returns> the currency exposure </returns> public virtual MultiCurrencyAmount currencyExposure(ResolvedFxSingleTrade trade, RatesProvider provider) { return(productPricer.currencyExposure(trade.Product, provider)); }
//------------------------------------------------------------------------- // calculates calibrated sum PV01 for all scenarios internal MultiCurrencyScenarioArray pv01CalibratedSum(ResolvedFxSingleTrade trade, RatesScenarioMarketData marketData) { return(MultiCurrencyScenarioArray.of(marketData.ScenarioCount, i => pv01CalibratedSum(trade, marketData.scenario(i).ratesProvider()))); }
// present value for one scenario internal MultiCurrencyAmount presentValue(ResolvedFxSingleTrade trade, RatesProvider ratesProvider) { return(tradePricer.presentValue(trade, ratesProvider)); }
// forward FX rate for one scenario internal FxRate forwardFxRate(ResolvedFxSingleTrade trade, RatesProvider ratesProvider) { return(tradePricer.forwardFxRate(trade, ratesProvider)); }
//------------------------------------------------------------------------- // calculates forward FX rate for all scenarios internal ScenarioArray <FxRate> forwardFxRate(ResolvedFxSingleTrade trade, RatesScenarioMarketData marketData) { return(ScenarioArray.of(marketData.ScenarioCount, i => forwardFxRate(trade, marketData.scenario(i).ratesProvider()))); }
// current cash for one scenario internal MultiCurrencyAmount currentCash(ResolvedFxSingleTrade trade, RatesProvider ratesProvider) { return(tradePricer.currentCash(trade, ratesProvider)); }
//------------------------------------------------------------------------- // calculates currency exposure for all scenarios internal MultiCurrencyScenarioArray currencyExposure(ResolvedFxSingleTrade trade, RatesScenarioMarketData marketData) { return(MultiCurrencyScenarioArray.of(marketData.ScenarioCount, i => currencyExposure(trade, marketData.scenario(i).ratesProvider()))); }
// par spread for one scenario internal double parSpread(ResolvedFxSingleTrade trade, RatesProvider ratesProvider) { return(tradePricer.parSpread(trade, ratesProvider)); }
/// <summary> /// Calculates the present value curve sensitivity of the trade. /// <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 trade </param> /// <param name="provider"> the rates provider </param> /// <returns> the point sensitivity of the present value </returns> public virtual PointSensitivities presentValueSensitivity(ResolvedFxSingleTrade trade, RatesProvider provider) { return(productPricer.presentValueSensitivity(trade.Product, provider)); }
//------------------------------------------------------------------------- /// <summary> /// Calculates the par spread. /// <para> /// This is the spread that should be added to the FX points to have a zero value. /// /// </para> /// </summary> /// <param name="trade"> the trade </param> /// <param name="provider"> the rates provider </param> /// <returns> the spread </returns> public virtual double parSpread(ResolvedFxSingleTrade trade, RatesProvider provider) { return(productPricer.parSpread(trade.Product, provider)); }
//------------------------------------------------------------------------- // calculates calibrated bucketed PV01 for all scenarios internal ScenarioArray <CurrencyParameterSensitivities> pv01CalibratedBucketed(ResolvedFxSingleTrade trade, RatesScenarioMarketData marketData) { return(ScenarioArray.of(marketData.ScenarioCount, i => pv01CalibratedBucketed(trade, marketData.scenario(i).ratesProvider()))); }
/// <summary> /// Calculates present value sensitivity for a single set of market data. /// <para> /// This is the sensitivity of /// <seealso cref="#presentValue(ResolvedFxSingleTrade, RatesMarketDataLookup, ScenarioMarketData) 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> /// <returns> the present value sensitivity </returns> public virtual MultiCurrencyAmount pv01MarketQuoteSum(ResolvedFxSingleTrade trade, RatesProvider ratesProvider) { return(calc.pv01MarketQuoteSum(trade, ratesProvider)); }
// calibrated bucketed PV01 for one scenario internal CurrencyParameterSensitivities pv01CalibratedBucketed(ResolvedFxSingleTrade trade, RatesProvider ratesProvider) { PointSensitivities pointSensitivity = tradePricer.presentValueSensitivity(trade, ratesProvider); return(ratesProvider.parameterSensitivity(pointSensitivity).multipliedBy(ONE_BASIS_POINT)); }
/// <summary> /// Calculates present value sensitivity for a single set of market data. /// <para> /// This is the sensitivity of /// <seealso cref="#presentValue(ResolvedFxSingleTrade, RatesMarketDataLookup, ScenarioMarketData) 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> /// <returns> the present value sensitivity </returns> public virtual CurrencyParameterSensitivities pv01MarketQuoteBucketed(ResolvedFxSingleTrade trade, RatesProvider ratesProvider) { return(calc.pv01MarketQuoteBucketed(trade, ratesProvider)); }
/// <summary> /// Calculates the current cash of the trade. /// </summary> /// <param name="trade"> the trade </param> /// <param name="provider"> the rates provider </param> /// <returns> the current cash of the trade in the settlement currency </returns> public virtual MultiCurrencyAmount currentCash(ResolvedFxSingleTrade trade, RatesProvider provider) { return(productPricer.currentCash(trade.Product, provider.ValuationDate)); }
/// <summary> /// Calculates par spread for a single set of market data. /// </summary> /// <param name="trade"> the trade </param> /// <param name="ratesProvider"> the market data </param> /// <returns> the par spread </returns> public virtual double parSpread(ResolvedFxSingleTrade trade, RatesProvider ratesProvider) { return(calc.parSpread(trade, ratesProvider)); }
//------------------------------------------------------------------------- /// <summary> /// Calculates the forward exchange rate. /// </summary> /// <param name="trade"> the trade </param> /// <param name="provider"> the rates provider </param> /// <returns> the forward rate </returns> public virtual FxRate forwardFxRate(ResolvedFxSingleTrade trade, RatesProvider provider) { return(productPricer.forwardFxRate(trade.Product, provider)); }
//------------------------------------------------------------------------- /// <summary> /// Calculates the forward FX rate across one or more scenarios. /// </summary> /// <param name="trade"> the trade </param> /// <param name="lookup"> the lookup used to query the market data </param> /// <param name="marketData"> the market data </param> /// <returns> the current cash, one entry per scenario </returns> public virtual ScenarioArray <FxRate> forwardFxRate(ResolvedFxSingleTrade trade, RatesMarketDataLookup lookup, ScenarioMarketData marketData) { return(calc.forwardFxRate(trade, lookup.marketDataView(marketData))); }
/// <summary> /// Calculates the forward exchange rate point sensitivity. /// <para> /// The returned value is based on the direction of the FX product. /// /// </para> /// </summary> /// <param name="trade"> the trade </param> /// <param name="provider"> the rates provider </param> /// <returns> the point sensitivity </returns> public virtual PointSensitivities forwardFxRatePointSensitivity(ResolvedFxSingleTrade trade, RatesProvider provider) { return(productPricer.forwardFxRatePointSensitivity(trade.Product, provider).build()); }
//------------------------------------------------------------------------- /// <summary> /// Calculates present value across one or more scenarios. /// </summary> /// <param name="trade"> the trade </param> /// <param name="lookup"> the lookup used to query the market data </param> /// <param name="marketData"> the market data </param> /// <returns> the present value, one entry per scenario </returns> public virtual MultiCurrencyScenarioArray presentValue(ResolvedFxSingleTrade trade, RatesMarketDataLookup lookup, ScenarioMarketData marketData) { return(calc.presentValue(trade, lookup.marketDataView(marketData))); }
/// <summary> /// Calculates the sensitivity of the forward exchange rate to the spot rate. /// <para> /// The returned value is based on the direction of the FX product. /// /// </para> /// </summary> /// <param name="trade"> the trade </param> /// <param name="provider"> the rates provider </param> /// <returns> the sensitivity to spot </returns> public virtual double forwardFxRateSpotSensitivity(ResolvedFxSingleTrade trade, RatesProvider provider) { return(productPricer.forwardFxRateSpotSensitivity(trade.Product, provider)); }
//------------------------------------------------------------------------- /// <summary> /// Calculates present value sensitivity across one or more scenarios. /// <para> /// This is the sensitivity of /// <seealso cref="#presentValue(ResolvedFxSingleTrade, RatesMarketDataLookup, ScenarioMarketData) present value"/> /// to a one basis point shift in the calibrated curves. /// The result is the sum of the sensitivities of all affected curves. /// /// </para> /// </summary> /// <param name="trade"> the trade </param> /// <param name="lookup"> the lookup used to query the market data </param> /// <param name="marketData"> the market data </param> /// <returns> the present value sensitivity, one entry per scenario </returns> public virtual MultiCurrencyScenarioArray pv01CalibratedSum(ResolvedFxSingleTrade trade, RatesMarketDataLookup lookup, ScenarioMarketData marketData) { return(calc.pv01CalibratedSum(trade, lookup.marketDataView(marketData))); }
//------------------------------------------------------------------------- /// <summary> /// Calculates the present value of the trade. /// <para> /// The present value of the trade is the value on the valuation date. /// The present value is returned in the settlement currency. /// /// </para> /// </summary> /// <param name="trade"> the trade </param> /// <param name="provider"> the rates provider </param> /// <returns> the present value of the trade in the settlement currency </returns> public virtual MultiCurrencyAmount presentValue(ResolvedFxSingleTrade trade, RatesProvider provider) { return(productPricer.presentValue(trade.Product, provider)); }