public void test_of() { SchedulePeriod sched = SchedulePeriod.of(DATE_2014_03_30, DATE_2014_09_30); KnownAmountSwapPaymentPeriod test = KnownAmountSwapPaymentPeriod.of(PAYMENT_2014_10_03, sched); assertEquals(test.getPayment(), PAYMENT_2014_10_03); assertEquals(test.getStartDate(), DATE_2014_03_30); assertEquals(test.getUnadjustedStartDate(), DATE_2014_03_30); assertEquals(test.getEndDate(), DATE_2014_09_30); assertEquals(test.getUnadjustedEndDate(), DATE_2014_09_30); assertEquals(test.getPaymentDate(), DATE_2014_10_03); assertEquals(test.getCurrency(), GBP); }
public void test_builder_defaultDates() { KnownAmountSwapPaymentPeriod test = KnownAmountSwapPaymentPeriod.builder() .payment(PAYMENT_2014_10_03) .startDate(DATE_2014_03_30) .endDate(DATE_2014_10_01) .build(); assertEquals(test.getPayment(), PAYMENT_2014_10_03); assertEquals(test.getStartDate(), DATE_2014_03_30); assertEquals(test.getUnadjustedStartDate(), DATE_2014_03_30); assertEquals(test.getEndDate(), DATE_2014_10_01); assertEquals(test.getUnadjustedEndDate(), DATE_2014_10_01); assertEquals(test.getPaymentDate(), DATE_2014_10_03); assertEquals(test.getCurrency(), GBP); }
/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(KnownAmountSwapPaymentPeriod beanToCopy) { this.payment = beanToCopy.getPayment(); this.startDate = beanToCopy.getStartDate(); this.endDate = beanToCopy.getEndDate(); this.unadjustedStartDate = beanToCopy.getUnadjustedStartDate(); this.unadjustedEndDate = beanToCopy.getUnadjustedEndDate(); }
@Override public double accruedInterest(KnownAmountSwapPaymentPeriod period, RatesProvider provider) { // no day count available, so return the simple day-based fraction LocalDate valDate = provider.getValuationDate(); if (valDate.compareTo(period.getStartDate()) <= 0 || valDate.compareTo(period.getEndDate()) > 0) { return 0d; } double fv = forecastValue(period, provider); double totalDays = period.getStartDate().until(period.getEndDate(), DAYS); double partialDays = period.getStartDate().until(valDate, DAYS); return fv * (partialDays / totalDays); }
@Override public void explainPresentValue(KnownAmountSwapPaymentPeriod period, RatesProvider provider, ExplainMapBuilder builder) { Currency currency = period.getCurrency(); LocalDate paymentDate = period.getPaymentDate(); builder.put(ExplainKey.ENTRY_TYPE, "KnownAmountPaymentPeriod"); builder.put(ExplainKey.PAYMENT_DATE, paymentDate); builder.put(ExplainKey.PAYMENT_CURRENCY, currency); builder.put(ExplainKey.START_DATE, period.getStartDate()); builder.put(ExplainKey.UNADJUSTED_START_DATE, period.getUnadjustedStartDate()); builder.put(ExplainKey.END_DATE, period.getEndDate()); builder.put(ExplainKey.UNADJUSTED_END_DATE, period.getUnadjustedEndDate()); builder.put(ExplainKey.DAYS, (int) DAYS.between(period.getStartDate(), period.getEndDate())); if (paymentDate.isBefore(provider.getValuationDate())) { builder.put(ExplainKey.COMPLETED, Boolean.TRUE); builder.put(ExplainKey.FORECAST_VALUE, CurrencyAmount.zero(currency)); builder.put(ExplainKey.PRESENT_VALUE, CurrencyAmount.zero(currency)); } else { builder.put(ExplainKey.DISCOUNT_FACTOR, provider.discountFactor(currency, paymentDate)); builder.put(ExplainKey.FORECAST_VALUE, CurrencyAmount.of(currency, forecastValue(period, provider))); builder.put(ExplainKey.PRESENT_VALUE, CurrencyAmount.of(currency, presentValue(period, provider))); } }
public void test_builder_invalid() { assertThrowsIllegalArg(() -> KnownAmountSwapPaymentPeriod.builder() .payment(PAYMENT_2014_10_03) .endDate(DATE_2014_10_01) .build()); assertThrowsIllegalArg(() -> KnownAmountSwapPaymentPeriod.builder() .payment(PAYMENT_2014_10_03) .startDate(DATE_2014_10_01) .build()); assertThrowsIllegalArg(() -> KnownAmountSwapPaymentPeriod.builder() .payment(PAYMENT_2014_10_03) .startDate(DATE_2014_10_01) .endDate(DATE_2014_10_01) .build()); }
public void test_accruedInterest_valDateBeforePeriod() { SimpleRatesProvider prov = createProvider(PERIOD.getStartDate()); double computed = PRICER.accruedInterest(PERIOD, prov); assertEquals(computed, 0, TOLERANCE_PV); }
@Override public double forecastValue(KnownAmountSwapPaymentPeriod period, RatesProvider provider) { return paymentPricer.forecastValueAmount(period.getPayment(), provider); }
public void test_collectIndices_simple() { KnownAmountSwapPaymentPeriod test = KnownAmountSwapPaymentPeriod.builder() .payment(PAYMENT_2014_10_03) .startDate(DATE_2014_03_30) .unadjustedStartDate(DATE_2014_03_30) .endDate(DATE_2014_10_01) .unadjustedEndDate(DATE_2014_09_30) .build(); ImmutableSet.Builder<Index> builder = ImmutableSet.builder(); test.collectIndices(builder); assertEquals(builder.build(), ImmutableSet.of()); }
public void test_accruedInterest_valDateAfterPeriod() { SimpleRatesProvider prov = createProvider(PERIOD.getEndDate().plusDays(1)); double computed = PRICER.accruedInterest(PERIOD, prov); assertEquals(computed, 0, TOLERANCE_PV); }
public void test_adjustPaymentDate() { KnownAmountSwapPaymentPeriod test = KnownAmountSwapPaymentPeriod.builder() .payment(PAYMENT_2014_10_01) .startDate(DATE_2014_03_30) .unadjustedStartDate(DATE_2014_03_30) .endDate(DATE_2014_10_01) .unadjustedEndDate(DATE_2014_09_30) .build(); KnownAmountSwapPaymentPeriod expected = KnownAmountSwapPaymentPeriod.builder() .payment(PAYMENT_2014_10_03) .startDate(DATE_2014_03_30) .unadjustedStartDate(DATE_2014_03_30) .endDate(DATE_2014_10_01) .unadjustedEndDate(DATE_2014_09_30) .build(); assertEquals(test.adjustPaymentDate(TemporalAdjusters.ofDateAdjuster(d -> d.plusDays(0))), test); assertEquals(test.adjustPaymentDate(TemporalAdjusters.ofDateAdjuster(d -> d.plusDays(2))), expected); }
@Override public double currentCash(KnownAmountSwapPaymentPeriod period, RatesProvider provider) { if (provider.getValuationDate().isEqual(period.getPaymentDate())) { return forecastValue(period, provider); } return 0d; } }
@Override public MultiCurrencyAmount currencyExposure(KnownAmountSwapPaymentPeriod period, RatesProvider provider) { return MultiCurrencyAmount.of(CurrencyAmount.of(period.getCurrency(), presentValue(period, provider))); }
private List<SwapPaymentPeriod> createPaymentPeriods(Schedule resolvedPayments, ReferenceData refData) { // resolve amount schedule against payment schedule DoubleArray amounts = amount.resolveValues(resolvedPayments); // resolve against reference data once DateAdjuster paymentDateAdjuster = paymentSchedule.getPaymentDateOffset().resolve(refData); // build up payment periods using schedule ImmutableList.Builder<SwapPaymentPeriod> paymentPeriods = ImmutableList.builder(); for (int index = 0; index < resolvedPayments.size(); index++) { SchedulePeriod paymentPeriod = resolvedPayments.getPeriod(index); LocalDate baseDate = paymentSchedule.getPaymentRelativeTo().selectBaseDate(paymentPeriod); LocalDate paymentDate = paymentDateAdjuster.adjust(baseDate); double amount = payReceive.normalize(amounts.get(index)); Payment payment = Payment.of(CurrencyAmount.of(currency, amount), paymentDate); paymentPeriods.add(KnownAmountSwapPaymentPeriod.of(payment, paymentPeriod)); } return paymentPeriods.build(); }
public void test_explainPresentValue_inPast() { RatesProvider prov = createProvider(VAL_DATE); ExplainMapBuilder builder = ExplainMap.builder(); PRICER.explainPresentValue(PERIOD_PAST, prov, builder); ExplainMap explain = builder.build(); assertEquals(explain.get(ExplainKey.ENTRY_TYPE).get(), "KnownAmountPaymentPeriod"); assertEquals(explain.get(ExplainKey.PAYMENT_DATE).get(), PERIOD_PAST.getPaymentDate()); assertEquals(explain.get(ExplainKey.PAYMENT_CURRENCY).get(), PERIOD_PAST.getCurrency()); int daysBetween = (int) DAYS.between(DATE_1, DATE_2); assertEquals(explain.get(ExplainKey.START_DATE).get(), PERIOD_PAST.getStartDate()); assertEquals(explain.get(ExplainKey.UNADJUSTED_START_DATE).get(), PERIOD_PAST.getUnadjustedStartDate()); assertEquals(explain.get(ExplainKey.END_DATE).get(), PERIOD_PAST.getEndDate()); assertEquals(explain.get(ExplainKey.UNADJUSTED_END_DATE).get(), PERIOD_PAST.getUnadjustedEndDate()); assertEquals(explain.get(ExplainKey.DAYS).get(), (Integer) daysBetween); assertEquals(explain.get(ExplainKey.FORECAST_VALUE).get().getCurrency(), PERIOD_PAST.getCurrency()); assertEquals(explain.get(ExplainKey.FORECAST_VALUE).get().getAmount(), 0, TOLERANCE_PV); assertEquals(explain.get(ExplainKey.PRESENT_VALUE).get().getCurrency(), PERIOD_PAST.getCurrency()); assertEquals(explain.get(ExplainKey.PRESENT_VALUE).get().getAmount(), 0 * DISCOUNT_FACTOR, TOLERANCE_PV); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case -786681338: // payment return ((KnownAmountSwapPaymentPeriod) bean).getPayment(); case -2129778896: // startDate return ((KnownAmountSwapPaymentPeriod) bean).getStartDate(); case -1607727319: // endDate return ((KnownAmountSwapPaymentPeriod) bean).getEndDate(); case 1457691881: // unadjustedStartDate return ((KnownAmountSwapPaymentPeriod) bean).getUnadjustedStartDate(); case 31758114: // unadjustedEndDate return ((KnownAmountSwapPaymentPeriod) bean).getUnadjustedEndDate(); } return super.propertyGet(bean, propertyName, quiet); }
/** * Obtains an instance based on a payment and schedule period. * * @param payment the payment * @param period the schedule period * @return the period */ public static KnownAmountSwapPaymentPeriod of(Payment payment, SchedulePeriod period) { return KnownAmountSwapPaymentPeriod.builder() .payment(payment) .startDate(period.getStartDate()) .endDate(period.getEndDate()) .unadjustedStartDate(period.getUnadjustedStartDate()) .unadjustedEndDate(period.getUnadjustedEndDate()) .build(); }
public void test_accruedInterest() { LocalDate valDate = PERIOD.getStartDate().plusDays(7); SimpleRatesProvider prov = createProvider(valDate); double expected = AMOUNT_1000 * (7d / (7 + 28 + 31 + 25)); double computed = PRICER.accruedInterest(PERIOD, prov); assertEquals(computed, expected, TOLERANCE_PV); }
@Override public PointSensitivityBuilder presentValueSensitivity(KnownAmountSwapPaymentPeriod period, RatesProvider provider) { return paymentPricer.presentValueSensitivity(period.getPayment(), provider); }
public void test_currentCash_onPayment() { ImmutableRatesProvider prov = ImmutableRatesProvider.builder(PERIOD.getPaymentDate()) .discountCurve(GBP, DISCOUNT_CURVE_GBP) .build(); double computed = PRICER.currentCash(PERIOD, prov); assertEquals(computed, AMOUNT_1000); }