/** * Converts this swap leg to the equivalent {@code ResolvedSwapLeg}. * <p> * An {@link ResolvedSwapLeg} represents the same data as this leg, but with * the schedules resolved to be {@link SwapPaymentPeriod} instances. * * @return the equivalent resolved swap leg * @throws ReferenceDataNotFoundException if an identifier cannot be resolved in the reference data * @throws RuntimeException if unable to resolve due to an invalid definition */ @Override public ResolvedSwapLeg resolve(ReferenceData refData) { DateAdjuster paymentDateAdjuster = paymentBusinessDayAdjustment.resolve(refData); ImmutableList<NotionalPaymentPeriod> adjusted = paymentPeriods.stream() .map(pp -> pp.adjustPaymentDate(paymentDateAdjuster)) .collect(toImmutableList()); ImmutableList<SwapPaymentEvent> payEvents = createEvents(adjusted, paymentDateAdjuster, refData); return new ResolvedSwapLeg(type, payReceive, adjusted, payEvents, currency); }
@Override public ResolvedFxSingle resolve(ReferenceData refData) { if (paymentDateAdjustment == null) { return ResolvedFxSingle.of(baseCurrencyPayment, counterCurrencyPayment); } DateAdjuster adjuster = paymentDateAdjustment.resolve(refData); return ResolvedFxSingle.of(baseCurrencyPayment.adjustDate(adjuster), counterCurrencyPayment.adjustDate(adjuster)); }
@Test(dataProvider = "convention", dataProviderClass = BusinessDayConventionTest.class) public void test_adjustDate(BusinessDayConvention convention, LocalDate input, LocalDate expected) { BusinessDayAdjustment test = BusinessDayAdjustment.of(convention, SAT_SUN); assertEquals(test.adjust(input, REF_DATA), expected); assertEquals(test.resolve(REF_DATA).adjust(input), expected); }
@Override public ResolvedTermDeposit resolve(ReferenceData refData) { DateAdjuster bda = getBusinessDayAdjustment().orElse(BusinessDayAdjustment.NONE).resolve(refData); LocalDate start = bda.adjust(startDate); LocalDate end = bda.adjust(endDate); double yearFraction = dayCount.yearFraction(start, end); return ResolvedTermDeposit.builder() .startDate(start) .endDate(end) .yearFraction(yearFraction) .currency(getCurrency()) .notional(buySell.normalize(notional)) .rate(rate) .build(); }
@Override public FraTrade createTrade( LocalDate tradeDate, Period periodToStart, Period periodToEnd, BuySell buySell, double notional, double fixedRate, ReferenceData refData) { LocalDate spotValue = calculateSpotDateFromTradeDate(tradeDate, refData); LocalDate startDate = spotValue.plus(periodToStart); LocalDate endDate = spotValue.plus(periodToEnd); DateAdjuster bda = getBusinessDayAdjustment().resolve(refData); // start/end dates are adjusted when FRA trade is created and not adjusted later // payment date is adjusted when FRA trade is created and potentially adjusted again when resolving LocalDate adjustedStart = bda.adjust(startDate); LocalDate adjustedEnd = bda.adjust(endDate); LocalDate adjustedPay = getPaymentDateOffset().adjust(adjustedStart, refData); return toTrade(tradeDate, adjustedStart, adjustedEnd, adjustedPay, buySell, notional, fixedRate); }
@Override public ResolvedIborFixingDeposit resolve(ReferenceData refData) { DateAdjuster bda = getBusinessDayAdjustment().orElse(BusinessDayAdjustment.NONE).resolve(refData); LocalDate start = bda.adjust(startDate); LocalDate end = bda.adjust(endDate); double yearFraction = dayCount.yearFraction(start, end); LocalDate fixingDate = fixingDateOffset.adjust(startDate, refData); return ResolvedIborFixingDeposit.builder() .startDate(start) .endDate(end) .yearFraction(yearFraction) .currency(getCurrency()) .notional(buySell.normalize(notional)) .floatingRate(IborRateComputation.of(index, fixingDate, refData)) .fixedRate(fixedRate) .build(); }
@Override public ResolvedFra resolve(ReferenceData refData) { DateAdjuster bda = getBusinessDayAdjustment().orElse(BusinessDayAdjustment.NONE).resolve(refData); LocalDate start = bda.adjust(startDate); LocalDate end = bda.adjust(endDate); LocalDate pay = paymentDate.adjusted(refData); return ResolvedFra.builder() .paymentDate(pay) .startDate(start) .endDate(end) .yearFraction(dayCount.yearFraction(start, end)) .fixedRate(fixedRate) .floatingRate(createRateComputation(refData)) .currency(currency) .notional(buySell.normalize(notional)) .discounting(discounting) .build(); }
return paySchedule.toAdjusted(businessDayAdjustment.resolve(refData));