public virtual void test_presentValue_ended()
        {
            ResolvedFxSingle    fwd      = ResolvedFxSingle.of(CurrencyAmount.of(USD, NOMINAL_USD), FxRate.of(USD, KRW, FX_RATE), PAYMENT_DATE_PAST);
            MultiCurrencyAmount computed = PRICER.presentValue(fwd, PROVIDER);

            assertEquals(computed, MultiCurrencyAmount.empty());
        }
Beispiel #2
0
 /// <summary>
 /// Calculates the current cash.
 /// </summary>
 /// <param name="fx">  the product </param>
 /// <param name="valuationDate">  the valuation date </param>
 /// <returns> the current cash </returns>
 public virtual MultiCurrencyAmount currentCash(ResolvedFxSingle fx, LocalDate valuationDate)
 {
     if (valuationDate.isEqual(fx.PaymentDate))
     {
         return(MultiCurrencyAmount.of(fx.BaseCurrencyPayment.Value, fx.CounterCurrencyPayment.Value));
     }
     return(MultiCurrencyAmount.empty());
 }
Beispiel #3
0
 public virtual void test_currencyExposure_atExpiry()
 {
     for (int i = 0; i < NB_STRIKES; ++i)
     {
         MultiCurrencyAmount computedCall = PRICER.currencyExposure(CALLS[i], RATES_PROVIDER_AFTER, VOLS_AFTER);
         assertEquals(computedCall, MultiCurrencyAmount.empty());
         MultiCurrencyAmount computedPut = PRICER.currencyExposure(PUTS[i], RATES_PROVIDER_AFTER, VOLS_AFTER);
         assertEquals(computedPut, MultiCurrencyAmount.empty());
     }
 }
Beispiel #4
0
        //-------------------------------------------------------------------------
        /// <summary>
        /// Calculates the present value of the FX product by discounting each payment in its own currency.
        /// </summary>
        /// <param name="fx">  the product </param>
        /// <param name="provider">  the rates provider </param>
        /// <returns> the present value in the two natural currencies </returns>
        public virtual MultiCurrencyAmount presentValue(ResolvedFxSingle fx, RatesProvider provider)
        {
            if (provider.ValuationDate.isAfter(fx.PaymentDate))
            {
                return(MultiCurrencyAmount.empty());
            }
            CurrencyAmount pv1 = paymentPricer.presentValue(fx.BaseCurrencyPayment, provider);
            CurrencyAmount pv2 = paymentPricer.presentValue(fx.CounterCurrencyPayment, provider);

            return(MultiCurrencyAmount.of(pv1, pv2));
        }
        public virtual void test_presentValue_ended()
        {
            ResolvedFxSwap      product  = ResolvedFxSwap.ofForwardPoints(CurrencyAmount.of(USD, NOMINAL_USD), KRW, FX_RATE, FX_FWD_POINTS, PAYMENT_DATE_LONG_PAST, PAYMENT_DATE_PAST);
            MultiCurrencyAmount computed = PRICER.presentValue(product, PROVIDER);

            assertEquals(computed, MultiCurrencyAmount.empty());

            // currency exposure
            MultiCurrencyAmount exposure = PRICER.currencyExposure(product, PROVIDER);

            assertEquals(exposure, computed);
        }
        //-------------------------------------------------------------------------
        /// <summary>
        /// Calculates the currency exposure by discounting each payment in its own currency.
        /// </summary>
        /// <param name="ndf">  the product </param>
        /// <param name="provider">  the rates provider </param>
        /// <returns> the currency exposure </returns>
        public virtual MultiCurrencyAmount currencyExposure(ResolvedFxNdf ndf, RatesProvider provider)
        {
            if (provider.ValuationDate.isAfter(ndf.PaymentDate))
            {
                return(MultiCurrencyAmount.empty());
            }
            Currency       ccySettle      = ndf.SettlementCurrency;
            CurrencyAmount notionalSettle = ndf.SettlementCurrencyNotional;
            double         dfSettle       = provider.discountFactor(ccySettle, ndf.PaymentDate);
            Currency       ccyOther       = ndf.NonDeliverableCurrency;
            double         agreedRate     = ndf.AgreedFxRate.fxRate(ccySettle, ccyOther);
            double         dfOther        = provider.discountFactor(ccyOther, ndf.PaymentDate);

            return(MultiCurrencyAmount.of(notionalSettle.multipliedBy(dfSettle)).plus(CurrencyAmount.of(ccyOther, -notionalSettle.Amount * agreedRate * dfOther)));
        }
        public virtual void test_currentCash_zero()
        {
            MultiCurrencyAmount computed = PRICER.currentCash(FWD, PROVIDER.ValuationDate);

            assertEquals(computed, MultiCurrencyAmount.empty());
        }