/** * Copyright (C) 2016 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.pricer.fx; import static com.opengamma.strata.basics.date.HolidayCalendarIds.USNY; import static org.testng.Assert.assertEquals; import java.time.LocalDate; import org.testng.annotations.Test; import com.opengamma.strata.basics.ReferenceData; import com.opengamma.strata.basics.currency.Currency; import com.opengamma.strata.basics.currency.CurrencyAmount; import com.opengamma.strata.basics.currency.CurrencyPair; import com.opengamma.strata.basics.currency.FxRate; import com.opengamma.strata.basics.date.DaysAdjustment; import com.opengamma.strata.basics.index.FxIndex; import com.opengamma.strata.basics.index.FxIndexObservation; import com.opengamma.strata.basics.index.ImmutableFxIndex; import com.opengamma.strata.pricer.rate.RatesProvider; import com.opengamma.strata.product.TradeInfo; import com.opengamma.strata.product.fx.ResolvedFxNdf; import com.opengamma.strata.product.fx.ResolvedFxNdfTrade; /** * Test {@link DiscountingFxNdfProductPricer}. */ @Test public class DiscountingFxNdfTradePricerTest { private static final ReferenceData REF_DATA = ReferenceData.standard(); private static final RatesProvider PROVIDER = RatesProviderFxDataSets.createProvider(); private static final Currency KRW = Currency.KRW; private static final Currency USD = Currency.USD; private static final LocalDate PAYMENT_DATE = RatesProviderFxDataSets.VAL_DATE_2014_01_22.plusWeeks(8); private static final double NOMINAL_USD = 100_000_000; private static final CurrencyAmount CURRENCY_NOTIONAL = CurrencyAmount.of(USD, NOMINAL_USD); private static final double FX_RATE = 1123.45; private static final FxIndex INDEX = ImmutableFxIndex.builder() .name("USD/KRW") .currencyPair(CurrencyPair.of(USD, KRW)) .fixingCalendar(USNY) .maturityDateOffset(DaysAdjustment.ofBusinessDays(2, USNY)) .build(); private static final LocalDate FIXING_DATE = INDEX.calculateFixingFromMaturity(PAYMENT_DATE, REF_DATA); private static final ResolvedFxNdf PRODUCT = ResolvedFxNdf.builder() .settlementCurrencyNotional(CURRENCY_NOTIONAL) .agreedFxRate(FxRate.of(USD, KRW, FX_RATE)) .observation(FxIndexObservation.of(INDEX, FIXING_DATE, REF_DATA)) .paymentDate(PAYMENT_DATE) .build(); private static final ResolvedFxNdfTrade TRADE = ResolvedFxNdfTrade.of(TradeInfo.empty(), PRODUCT); private static final DiscountingFxNdfProductPricer PRODUCT_PRICER = DiscountingFxNdfProductPricer.DEFAULT; private static final DiscountingFxNdfTradePricer TRADE_PRICER = DiscountingFxNdfTradePricer.DEFAULT; //------------------------------------------------------------------------- public void test_presentValue() { assertEquals( TRADE_PRICER.presentValue(TRADE, PROVIDER), PRODUCT_PRICER.presentValue(PRODUCT, PROVIDER)); } public void test_presentValueSensitivity() { assertEquals( TRADE_PRICER.presentValueSensitivity(TRADE, PROVIDER), PRODUCT_PRICER.presentValueSensitivity(PRODUCT, PROVIDER)); } public void test_currencyExposure() { assertEquals( TRADE_PRICER.currencyExposure(TRADE, PROVIDER), PRODUCT_PRICER.currencyExposure(PRODUCT, PROVIDER)); } public void test_currentCash() { assertEquals( TRADE_PRICER.currentCash(TRADE, PROVIDER), PRODUCT_PRICER.currentCash(PRODUCT, PROVIDER)); } public void test_forwardFxRate() { assertEquals( TRADE_PRICER.forwardFxRate(TRADE, PROVIDER), PRODUCT_PRICER.forwardFxRate(PRODUCT, PROVIDER)); } }