/** Test explain. */ public void test_explainPresentValue_ISDA() { ExpandedFra fraExp = FRA.expand(); SimpleRatesProvider prov = createProvider(fraExp); DiscountingFraProductPricer test = DiscountingFraProductPricer.DEFAULT; CurrencyAmount fvExpected = test.forecastValue(fraExp, prov); CurrencyAmount pvExpected = test.presentValue(fraExp, prov); ExplainMap explain = test.explainPresentValue(fraExp, prov); Currency currency = fraExp.getCurrency(); int daysBetween = (int) DAYS.between(fraExp.getStartDate(), fraExp.getEndDate()); assertEquals(explain.get(ExplainKey.ENTRY_TYPE).get(), "FRA"); assertEquals(explain.get(ExplainKey.PAYMENT_DATE).get(), fraExp.getPaymentDate()); assertEquals(explain.get(ExplainKey.START_DATE).get(), fraExp.getStartDate()); assertEquals(explain.get(ExplainKey.END_DATE).get(), fraExp.getEndDate()); assertEquals(explain.get(ExplainKey.ACCRUAL_YEAR_FRACTION).get(), fraExp.getYearFraction()); assertEquals(explain.get(ExplainKey.ACCRUAL_DAYS).get(), (Integer) (int) daysBetween); assertEquals(explain.get(ExplainKey.PAYMENT_CURRENCY).get(), currency); assertEquals( explain.get(ExplainKey.NOTIONAL).get().getAmount(), fraExp.getNotional(), TOLERANCE); assertEquals( explain.get(ExplainKey.TRADE_NOTIONAL).get().getAmount(), fraExp.getNotional(), TOLERANCE); assertEquals(explain.get(ExplainKey.OBSERVATIONS).get().size(), 1); ExplainMap explainObs = explain.get(ExplainKey.OBSERVATIONS).get().get(0); IborRateObservation floatingRate = (IborRateObservation) fraExp.getFloatingRate(); assertEquals(explainObs.get(ExplainKey.INDEX).get(), floatingRate.getIndex()); assertEquals(explainObs.get(ExplainKey.FIXING_DATE).get(), floatingRate.getFixingDate()); assertEquals(explainObs.get(ExplainKey.INDEX_VALUE).get(), FORWARD_RATE, TOLERANCE); assertEquals(explain.get(ExplainKey.DISCOUNT_FACTOR).get(), DISCOUNT_FACTOR, TOLERANCE); assertEquals(explain.get(ExplainKey.FIXED_RATE).get(), fraExp.getFixedRate(), TOLERANCE); assertEquals(explain.get(ExplainKey.PAY_OFF_RATE).get(), FORWARD_RATE, TOLERANCE); assertEquals(explain.get(ExplainKey.COMBINED_RATE).get(), FORWARD_RATE, TOLERANCE); assertEquals( explain.get(ExplainKey.UNIT_AMOUNT).get(), fvExpected.getAmount() / fraExp.getNotional(), TOLERANCE); assertEquals(explain.get(ExplainKey.FORECAST_VALUE).get().getCurrency(), currency); assertEquals( explain.get(ExplainKey.FORECAST_VALUE).get().getAmount(), fvExpected.getAmount(), TOLERANCE); assertEquals(explain.get(ExplainKey.PRESENT_VALUE).get().getCurrency(), currency); assertEquals( explain.get(ExplainKey.PRESENT_VALUE).get().getAmount(), pvExpected.getAmount(), TOLERANCE); }
/** Test forecast value for NONE FRA Discounting method. */ public void test_forecastValue_NONE() { ExpandedFra fraExp = FRA_NONE.expand(); SimpleRatesProvider prov = createProvider(fraExp); double fixedRate = FRA_NONE.getFixedRate(); double yearFraction = fraExp.getYearFraction(); double notional = fraExp.getNotional(); double expected = notional * yearFraction * (FORWARD_RATE - fixedRate); DiscountingFraProductPricer test = DiscountingFraProductPricer.DEFAULT; CurrencyAmount computed = test.forecastValue(fraExp, prov); assertEquals(computed.getAmount(), expected, TOLERANCE); }
/** Test forecast value for ISDA FRA Discounting method. */ public void test_forecastValue_ISDA() { ExpandedFra fraExp = FRA.expand(); SimpleRatesProvider prov = createProvider(fraExp); double fixedRate = FRA.getFixedRate(); double yearFraction = fraExp.getYearFraction(); double notional = fraExp.getNotional(); double expected = notional * yearFraction * (FORWARD_RATE - fixedRate) / (1.0 + yearFraction * FORWARD_RATE); DiscountingFraProductPricer test = DiscountingFraProductPricer.DEFAULT; CurrencyAmount computed = test.forecastValue(fraExp, prov); assertEquals(computed.getAmount(), expected, TOLERANCE); // test via FraTrade DiscountingFraTradePricer testTrade = new DiscountingFraTradePricer(test); assertEquals(testTrade.forecastValue(FRA_TRADE, prov), test.forecastValue(fraExp, prov)); }