// market quote bucketed PV01 for one scenario
        internal CurrencyParameterSensitivities pv01MarketQuoteBucketed(ResolvedBulletPaymentTrade 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));
        }
        //-------------------------------------------------------------------------
        public virtual void coverage()
        {
            ResolvedTradeParameterMetadata test1 = ResolvedTradeParameterMetadata.of(TRADE, "Label");

            coverImmutableBean(test1);
            ResolvedTrade trade = ResolvedBulletPaymentTrade.of(TradeInfo.empty(), BulletPayment.builder().date(AdjustableDate.of(LocalDate.of(2017, 3, 3))).value(CurrencyAmount.of(Currency.USD, 100d)).payReceive(PayReceive.PAY).build().resolve(REF_DATA));
            ResolvedTradeParameterMetadata test2 = ResolvedTradeParameterMetadata.builder().trade(trade).label("Label2").build();

            coverBeanEquals(test1, test2);
        }
 /// <summary>
 /// Calculates the current cash of the bullet payment trade.
 /// </summary>
 /// <param name="trade">  the trade </param>
 /// <param name="provider">  the provider </param>
 /// <returns> the current cash </returns>
 public virtual CurrencyAmount currentCash(ResolvedBulletPaymentTrade trade, BaseProvider provider)
 {
     return(paymentPricer.currentCash(trade.Product.Payment, provider));
 }
Exemple #4
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>
 /// <returns> the present value </returns>
 public virtual CurrencyAmount presentValue(ResolvedBulletPaymentTrade trade, RatesProvider ratesProvider)
 {
     return(calc.presentValue(trade, ratesProvider));
 }
Exemple #5
0
 /// <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 CurrencyAmount currentCash(ResolvedBulletPaymentTrade trade, RatesProvider ratesProvider)
 {
     return(calc.currentCash(trade, ratesProvider));
 }
Exemple #6
0
 //-------------------------------------------------------------------------
 /// <summary>
 /// Calculates currency exposure across one or more scenarios.
 /// <para>
 /// The currency risk, expressed as the equivalent amount in each currency.
 ///
 /// </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 currency exposure, one entry per scenario </returns>
 public virtual MultiCurrencyScenarioArray currencyExposure(ResolvedBulletPaymentTrade trade, RatesMarketDataLookup lookup, ScenarioMarketData marketData)
 {
     return(calc.currencyExposure(trade, lookup.marketDataView(marketData)));
 }
Exemple #7
0
 //-------------------------------------------------------------------------
 /// <summary>
 /// Calculates cash flows across one or more scenarios.
 /// <para>
 /// The cash flows provide details about the payments of the trade.
 ///
 /// </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 cash flows, one entry per scenario </returns>
 public virtual ScenarioArray <CashFlows> cashFlows(ResolvedBulletPaymentTrade trade, RatesMarketDataLookup lookup, ScenarioMarketData marketData)
 {
     return(calc.cashFlows(trade, lookup.marketDataView(marketData)));
 }
Exemple #8
0
 //-------------------------------------------------------------------------
 /// <summary>
 /// Calculates present value sensitivity across one or more scenarios.
 /// <para>
 /// This is the sensitivity of
 /// <seealso cref="#presentValue(ResolvedBulletPaymentTrade, 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(ResolvedBulletPaymentTrade trade, RatesMarketDataLookup lookup, ScenarioMarketData marketData)
 {
     return(calc.pv01MarketQuoteBucketed(trade, lookup.marketDataView(marketData)));
 }
        // calibrated sum PV01 for one scenario
        internal MultiCurrencyAmount pv01CalibratedSum(ResolvedBulletPaymentTrade trade, RatesProvider ratesProvider)
        {
            PointSensitivities pointSensitivity = tradePricer.presentValueSensitivity(trade, ratesProvider);

            return(ratesProvider.parameterSensitivity(pointSensitivity).total().multipliedBy(ONE_BASIS_POINT));
        }
 //-------------------------------------------------------------------------
 // calculates cash flows for all scenarios
 internal ScenarioArray <CashFlows> cashFlows(ResolvedBulletPaymentTrade trade, RatesScenarioMarketData marketData)
 {
     return(ScenarioArray.of(marketData.ScenarioCount, i => cashFlows(trade, marketData.scenario(i).ratesProvider())));
 }
        // single-node gamma PV01 for one scenario
        private CurrencyParameterSensitivities pv01SingleNodeGammaBucketed(ResolvedBulletPaymentTrade trade, RatesProvider ratesProvider)
        {
            CrossGammaParameterSensitivities crossGamma = CROSS_GAMMA.calculateCrossGammaIntraCurve(ratesProvider, p => p.parameterSensitivity(tradePricer.presentValueSensitivity(trade, p)));

            return(crossGamma.diagonal().multipliedBy(ONE_BASIS_POINT * ONE_BASIS_POINT));
        }
 //-------------------------------------------------------------------------
 // calculates single-node gamma PV01 for all scenarios
 internal ScenarioArray <CurrencyParameterSensitivities> pv01SingleNodeGammaBucketed(ResolvedBulletPaymentTrade trade, RatesScenarioMarketData marketData)
 {
     return(ScenarioArray.of(marketData.ScenarioCount, i => pv01SingleNodeGammaBucketed(trade, marketData.scenario(i).ratesProvider())));
 }
 /// <summary>
 /// Calculates the present value sensitivity of the bullet payment 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 provider </param>
 /// <returns> the point sensitivity of the present value </returns>
 public virtual PointSensitivities presentValueSensitivity(ResolvedBulletPaymentTrade trade, BaseProvider provider)
 {
     return(paymentPricer.presentValueSensitivity(trade.Product.Payment, provider).build());
 }
 /// <summary>
 /// Explains the present value of the bullet payment product.
 /// <para>
 /// This returns explanatory information about the calculation.
 ///
 /// </para>
 /// </summary>
 /// <param name="trade">  the trade </param>
 /// <param name="provider">  the provider </param>
 /// <returns> the explanatory information </returns>
 public virtual ExplainMap explainPresentValue(ResolvedBulletPaymentTrade trade, BaseProvider provider)
 {
     return(paymentPricer.explainPresentValue(trade.Product.Payment, provider));
 }
 //-------------------------------------------------------------------------
 /// <summary>
 /// Calculates the present value of the bullet payment trade.
 /// <para>
 /// The present value of the trade is the value on the valuation date.
 /// This is the discounted forecast value.
 ///
 /// </para>
 /// </summary>
 /// <param name="trade">  the trade </param>
 /// <param name="provider">  the provider </param>
 /// <returns> the present value of the trade </returns>
 public virtual CurrencyAmount presentValue(ResolvedBulletPaymentTrade trade, BaseProvider provider)
 {
     return(paymentPricer.presentValue(trade.Product.Payment, provider));
 }
 // explain present value for one scenario
 internal ExplainMap explainPresentValue(ResolvedBulletPaymentTrade trade, RatesProvider ratesProvider)
 {
     return(tradePricer.explainPresentValue(trade, ratesProvider));
 }
 //-------------------------------------------------------------------------
 // calculates calibrated sum PV01 for all scenarios
 internal MultiCurrencyScenarioArray pv01CalibratedSum(ResolvedBulletPaymentTrade trade, RatesScenarioMarketData marketData)
 {
     return(MultiCurrencyScenarioArray.of(marketData.ScenarioCount, i => pv01CalibratedSum(trade, marketData.scenario(i).ratesProvider())));
 }
 // cash flows for one scenario
 internal CashFlows cashFlows(ResolvedBulletPaymentTrade trade, RatesProvider ratesProvider)
 {
     return(tradePricer.cashFlows(trade, ratesProvider));
 }
Exemple #19
0
 /// <summary>
 /// Calculates present value sensitivity for a single set of market data.
 /// <para>
 /// This is the sensitivity of
 /// <seealso cref="#presentValue(ResolvedBulletPaymentTrade, 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(ResolvedBulletPaymentTrade trade, RatesProvider ratesProvider)
 {
     return(calc.pv01MarketQuoteSum(trade, ratesProvider));
 }
 //-------------------------------------------------------------------------
 // calculates currency exposure for all scenarios
 internal MultiCurrencyScenarioArray currencyExposure(ResolvedBulletPaymentTrade trade, RatesScenarioMarketData marketData)
 {
     return(MultiCurrencyScenarioArray.of(marketData.ScenarioCount, i => currencyExposure(trade, marketData.scenario(i).ratesProvider())));
 }
Exemple #21
0
 /// <summary>
 /// Calculates present value sensitivity for a single set of market data.
 /// <para>
 /// This is the sensitivity of
 /// <seealso cref="#presentValue(ResolvedBulletPaymentTrade, 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(ResolvedBulletPaymentTrade trade, RatesProvider ratesProvider)
 {
     return(calc.pv01MarketQuoteBucketed(trade, ratesProvider));
 }
 // currency exposure for one scenario
 internal MultiCurrencyAmount currencyExposure(ResolvedBulletPaymentTrade trade, RatesProvider ratesProvider)
 {
     return(MultiCurrencyAmount.of(tradePricer.currencyExposure(trade, ratesProvider)));
 }
Exemple #23
0
 /// <summary>
 /// Calculates cash flows for a single set of market data.
 /// <para>
 /// The cash flows provide details about the payments of the trade.
 ///
 /// </para>
 /// </summary>
 /// <param name="trade">  the trade </param>
 /// <param name="ratesProvider">  the market data </param>
 /// <returns> the cash flows </returns>
 public virtual CashFlows cashFlows(ResolvedBulletPaymentTrade trade, RatesProvider ratesProvider)
 {
     return(calc.cashFlows(trade, ratesProvider));
 }
 // current cash for one scenario
 internal CurrencyAmount currentCash(ResolvedBulletPaymentTrade trade, RatesProvider ratesProvider)
 {
     return(tradePricer.currentCash(trade, ratesProvider));
 }
Exemple #25
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>
 /// <returns> the currency exposure </returns>
 public virtual MultiCurrencyAmount currencyExposure(ResolvedBulletPaymentTrade trade, RatesProvider ratesProvider)
 {
     return(calc.currencyExposure(trade, ratesProvider));
 }
 //-------------------------------------------------------------------------
 // calculates present value for all scenarios
 internal CurrencyScenarioArray presentValue(ResolvedBulletPaymentTrade trade, RatesScenarioMarketData marketData)
 {
     return(CurrencyScenarioArray.of(marketData.ScenarioCount, i => presentValue(trade, marketData.scenario(i).ratesProvider())));
 }
Exemple #27
0
 //-------------------------------------------------------------------------
 /// <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 CurrencyScenarioArray presentValue(ResolvedBulletPaymentTrade trade, RatesMarketDataLookup lookup, ScenarioMarketData marketData)
 {
     return(calc.presentValue(trade, lookup.marketDataView(marketData)));
 }
 // present value for one scenario
 internal CurrencyAmount presentValue(ResolvedBulletPaymentTrade trade, RatesProvider ratesProvider)
 {
     return(tradePricer.presentValue(trade, ratesProvider));
 }
Exemple #29
0
 //-------------------------------------------------------------------------
 /// <summary>
 /// Calculates present value sensitivity across one or more scenarios.
 /// <para>
 /// This is the sensitivity of
 /// <seealso cref="#presentValue(ResolvedBulletPaymentTrade, 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(ResolvedBulletPaymentTrade trade, RatesMarketDataLookup lookup, ScenarioMarketData marketData)
 {
     return(calc.pv01CalibratedSum(trade, lookup.marketDataView(marketData)));
 }
 //-------------------------------------------------------------------------
 // calculates explain present value for all scenarios
 internal ScenarioArray <ExplainMap> explainPresentValue(ResolvedBulletPaymentTrade trade, RatesScenarioMarketData marketData)
 {
     return(ScenarioArray.of(marketData.ScenarioCount, i => explainPresentValue(trade, marketData.scenario(i).ratesProvider())));
 }