//-------------------------------------------------------------------------
        /// <summary>
        /// Calculates the currency exposure of the FX vanilla option trade.
        /// </summary>
        /// <param name="trade">  the option trade </param>
        /// <param name="ratesProvider">  the rates provider </param>
        /// <param name="volatilities">  the Black volatility provider </param>
        /// <returns> the currency exposure </returns>
        public virtual MultiCurrencyAmount currencyExposure(ResolvedFxVanillaOptionTrade trade, RatesProvider ratesProvider, BlackFxOptionSmileVolatilities volatilities)
        {
            Payment                 premium   = trade.Premium;
            CurrencyAmount          pvPremium = paymentPricer.presentValue(premium, ratesProvider);
            ResolvedFxVanillaOption product   = trade.Product;

            return(productPricer.currencyExposure(product, ratesProvider, volatilities).plus(pvPremium));
        }
コード例 #2
0
 //-------------------------------------------------------------------------
 public virtual void test_currencyExposure()
 {
     for (int i = 0; i < NB_STRIKES; ++i)
     {
         CurrencyAmount          pvCall       = PRICER.presentValue(CALLS[i], RATES_PROVIDER, VOLS);
         PointSensitivityBuilder pvSensiCall  = PRICER.presentValueSensitivityRatesStickyStrike(CALLS[i], RATES_PROVIDER, VOLS);
         MultiCurrencyAmount     computedCall = PRICER.currencyExposure(CALLS[i], RATES_PROVIDER, VOLS);
         MultiCurrencyAmount     expectedCall = RATES_PROVIDER.currencyExposure(pvSensiCall.build()).plus(pvCall);
         assertEquals(computedCall.getAmount(EUR).Amount, expectedCall.getAmount(EUR).Amount, NOTIONAL * TOL);
         assertEquals(computedCall.getAmount(USD).Amount, expectedCall.getAmount(USD).Amount, NOTIONAL * TOL);
         CurrencyAmount          pvPut       = PRICER.presentValue(PUTS[i], RATES_PROVIDER, VOLS);
         PointSensitivityBuilder pvSensiPut  = PRICER.presentValueSensitivityRatesStickyStrike(PUTS[i], RATES_PROVIDER, VOLS);
         MultiCurrencyAmount     computedPut = PRICER.currencyExposure(PUTS[i], RATES_PROVIDER, VOLS);
         MultiCurrencyAmount     expectedPut = RATES_PROVIDER.currencyExposure(pvSensiPut.build()).plus(pvPut);
         assertEquals(computedPut.getAmount(EUR).Amount, expectedPut.getAmount(EUR).Amount, NOTIONAL * TOL);
         assertEquals(computedPut.getAmount(USD).Amount, expectedPut.getAmount(USD).Amount, NOTIONAL * TOL);
     }
 }