@Override public ResolvedFxNdf resolve(ReferenceData refData) { LocalDate fixingDate = index.calculateFixingFromMaturity(paymentDate, refData); return ResolvedFxNdf.builder() .settlementCurrencyNotional(settlementCurrencyNotional) .agreedFxRate(agreedFxRate) .observation(FxIndexObservation.of(index, fixingDate, refData)) .paymentDate(paymentDate) .build(); }
public void test_ecb_eur_gbp_dates() { FxIndex test = FxIndices.EUR_GBP_ECB; assertEquals(test.getFixingDateOffset(), DaysAdjustment.ofBusinessDays(-2, EUTA.combinedWith(GBLO))); assertEquals(test.getMaturityDateOffset(), DaysAdjustment.ofBusinessDays(2, EUTA.combinedWith(GBLO))); assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 13), REF_DATA), date(2014, 10, 15)); assertEquals(test.calculateFixingFromMaturity(date(2014, 10, 15), REF_DATA), date(2014, 10, 13)); // weekend assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 16), REF_DATA), date(2014, 10, 20)); assertEquals(test.calculateFixingFromMaturity(date(2014, 10, 20), REF_DATA), date(2014, 10, 16)); assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 17), REF_DATA), date(2014, 10, 21)); assertEquals(test.calculateFixingFromMaturity(date(2014, 10, 21), REF_DATA), date(2014, 10, 17)); // input date is Sunday assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 19), REF_DATA), date(2014, 10, 22)); assertEquals(test.calculateFixingFromMaturity(date(2014, 10, 19), REF_DATA), date(2014, 10, 16)); // skip maturity over EUR (1st May) and GBP (5th May) holiday assertEquals(test.calculateMaturityFromFixing(date(2014, 4, 30), REF_DATA), date(2014, 5, 6)); assertEquals(test.calculateFixingFromMaturity(date(2014, 5, 6), REF_DATA), date(2014, 4, 30)); // resolve assertEquals(test.resolve(REF_DATA).apply(date(2014, 5, 6)), FxIndexObservation.of(test, date(2014, 5, 6), REF_DATA)); }
public void test_dates() { FxIndex test = ImmutableFxIndex.builder() .name("Test") .currencyPair(CurrencyPair.of(EUR, GBP)) .fixingCalendar(NO_HOLIDAYS) .maturityDateOffset(DaysAdjustment.ofCalendarDays(2)) .build(); assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 13), REF_DATA), date(2014, 10, 15)); assertEquals(test.calculateFixingFromMaturity(date(2014, 10, 15), REF_DATA), date(2014, 10, 13)); // weekend assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 16), REF_DATA), date(2014, 10, 18)); assertEquals(test.calculateFixingFromMaturity(date(2014, 10, 18), REF_DATA), date(2014, 10, 16)); assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 17), REF_DATA), date(2014, 10, 19)); assertEquals(test.calculateFixingFromMaturity(date(2014, 10, 19), REF_DATA), date(2014, 10, 17)); // input date is Sunday assertEquals(test.calculateMaturityFromFixing(date(2014, 10, 19), REF_DATA), date(2014, 10, 21)); assertEquals(test.calculateFixingFromMaturity(date(2014, 10, 19), REF_DATA), date(2014, 10, 17)); }
/** * Create a yield curve bundle with three curves. * One called "Discounting EUR" with a constant rate of 2.50%, one called "Discounting USD" * with a constant rate of 1.00% and one called "Discounting GBP" with a constant rate of 2.00%; * "Discounting KRW" with a constant rate of 3.21%; * * @param valuationDate the valuation date * @param fxIndex the FX index * @param spotRate the spot rate for the index * @return the provider */ public static RatesProvider createProvider(LocalDate valuationDate, FxIndex fxIndex, double spotRate) { return ImmutableRatesProvider.builder(valuationDate) .discountCurve(EUR, EUR_DSC) .discountCurve(USD, USD_DSC) .discountCurve(GBP, GBP_DSC) .discountCurve(KRW, KRW_DSC) .fxRateProvider(FX_MATRIX) .timeSeries( fxIndex, LocalDateDoubleTimeSeries.of(fxIndex.calculateFixingFromMaturity(valuationDate, REF_DATA), spotRate)) .build(); }