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()); }
/// <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()); }
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()); } }
//------------------------------------------------------------------------- /// <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()); }