/** * Gets the fixing date. * * @return the fixing date */ public LocalDate getFixingDate() { return observation.getFixingDate(); }
/** * Gets the fixing date. * * @return the fixing date */ public LocalDate getFixingDate() { // fixing date is the same for both observations return shortObservation.getFixingDate(); }
@Override public int compareKey(PointSensitivity other) { if (other instanceof IborRateSensitivity) { IborRateSensitivity otherIbor = (IborRateSensitivity) other; return ComparisonChain.start() .compare(getIndex().toString(), otherIbor.getIndex().toString()) .compare(currency, otherIbor.currency) .compare(observation.getFixingDate(), otherIbor.observation.getFixingDate()) .result(); } return getClass().getSimpleName().compareTo(other.getClass().getSimpleName()); }
@ImmutableValidator private void validate() { IborIndex shortIndex = shortObservation.getIndex(); IborIndex longIndex = longObservation.getIndex(); if (!shortIndex.getCurrency().equals(longIndex.getCurrency())) { throw new IllegalArgumentException("Interpolation requires two indices in the same currency"); } if (shortIndex.equals(longIndex)) { throw new IllegalArgumentException("Interpolation requires two different indices"); } if (!shortObservation.getFixingDate().equals(longObservation.getFixingDate())) { throw new IllegalArgumentException("Interpolation requires observations with same fixing date"); } if (!indicesInOrder(shortIndex, longIndex, shortObservation.getFixingDate())) { throw new IllegalArgumentException(Messages.format( "Interpolation indices passed in wrong order: {} {}", shortIndex, longIndex)); } }
@Override public double rate(IborIndexObservation observation) { if (!observation.getFixingDate().isAfter(getValuationDate())) { return historicRate(observation); } return rateIgnoringFixings(observation); }
@Override public double rate(IborIndexObservation observation) { if (!observation.getFixingDate().isAfter(getValuationDate())) { return historicRate(observation); } return rateIgnoringFixings(observation); }
@Override public double rate(IborIndexObservation observation) { if (!observation.getFixingDate().isAfter(getValuationDate())) { return historicRate(observation); } return rateIgnoringFixings(observation); }
private double historicRate(IborIndexObservation observation) { LocalDate fixingDate = observation.getFixingDate(); OptionalDouble fixedRate = fixings.get(fixingDate); if (fixedRate.isPresent()) { return fixedRate.getAsDouble(); } else if (fixingDate.isBefore(getValuationDate())) { // the fixing is required if (fixings.isEmpty()) { throw new IllegalArgumentException( Messages.format("Unable to get fixing for {} on date {}, no time-series supplied", index, fixingDate)); } throw new IllegalArgumentException(Messages.format("Unable to get fixing for {} on date {}", index, fixingDate)); } else { return rateIgnoringFixings(observation); } }
private double historicRate(IborIndexObservation observation) { LocalDate fixingDate = observation.getFixingDate(); OptionalDouble fixedRate = fixings.get(fixingDate); if (fixedRate.isPresent()) { return fixedRate.getAsDouble(); } else if (fixingDate.isBefore(getValuationDate())) { // the fixing is required if (fixings.isEmpty()) { throw new IllegalArgumentException( Messages.format("Unable to get fixing for {} on date {}, no time-series supplied", index, fixingDate)); } throw new IllegalArgumentException(Messages.format("Unable to get fixing for {} on date {}", index, fixingDate)); } else { return rateIgnoringFixings(observation); } }
private double historicRate(IborIndexObservation observation) { LocalDate fixingDate = observation.getFixingDate(); OptionalDouble fixedRate = fixings.get(fixingDate); if (fixedRate.isPresent()) { return fixedRate.getAsDouble(); } else if (fixingDate.isBefore(getValuationDate())) { // the fixing is required if (fixings.isEmpty()) { throw new IllegalArgumentException( Messages.format("Unable to get fixing for {} on date {}, no time-series supplied", index, fixingDate)); } throw new IllegalArgumentException(Messages.format("Unable to get fixing for {} on date {}", index, fixingDate)); } else { return rateIgnoringFixings(observation); } }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 100346066: // index return ((IborIndexObservation) bean).getIndex(); case 1255202043: // fixingDate return ((IborIndexObservation) bean).getFixingDate(); case -930389515: // effectiveDate return ((IborIndexObservation) bean).getEffectiveDate(); case -414641441: // maturityDate return ((IborIndexObservation) bean).getMaturityDate(); case -1731780257: // yearFraction return ((IborIndexObservation) bean).getYearFraction(); } return super.propertyGet(bean, propertyName, quiet); }
@Override public double rate(IborIndexObservation observation) { LocalDate fixingDate = observation.getFixingDate(); if (fixingDate.equals(valuationDate) && fixings.containsDate(fixingDate)) { return fixings.get(fixingDate).getAsDouble(); } return rates.get(fixingDate).getAsDouble(); }
@Override public PointSensitivityBuilder ratePointSensitivity(IborIndexObservation observation) { LocalDate fixingDate = observation.getFixingDate(); LocalDate valuationDate = getValuationDate(); if (fixingDate.isBefore(valuationDate) || (fixingDate.equals(valuationDate) && fixings.get(fixingDate).isPresent())) { return PointSensitivityBuilder.none(); } throw new MarketDataNotFoundException("Unable to query forward rate sensitivity for historic index " + index); }
private DoublesPair weights(IborIndexObservation obs1, IborIndexObservation obs2, LocalDate endDate) { // weights: linear interpolation on the number of days between the fixing date and the maturity dates of the // actual coupons on one side and the maturity dates of the underlying deposit on the other side. long fixingEpochDay = obs1.getFixingDate().toEpochDay(); double days1 = obs1.getMaturityDate().toEpochDay() - fixingEpochDay; double days2 = obs2.getMaturityDate().toEpochDay() - fixingEpochDay; double daysN = endDate.toEpochDay() - fixingEpochDay; double weight1 = (days2 - daysN) / (days2 - days1); double weight2 = (daysN - days1) / (days2 - days1); return DoublesPair.of(weight1, weight2); }
@Override public PointSensitivityBuilder ratePointSensitivity(IborIndexObservation observation) { LocalDate fixingDate = observation.getFixingDate(); LocalDate valuationDate = getValuationDate(); if (fixingDate.isBefore(valuationDate) || (fixingDate.equals(valuationDate) && fixings.get(fixingDate).isPresent())) { return PointSensitivityBuilder.none(); } return IborRateSensitivity.of(observation, 1d); }
@Override public PointSensitivityBuilder ratePointSensitivity(IborIndexObservation observation) { LocalDate fixingDate = observation.getFixingDate(); LocalDate valuationDate = getValuationDate(); if (fixingDate.isBefore(valuationDate) || (fixingDate.equals(valuationDate) && fixings.get(fixingDate).isPresent())) { return PointSensitivityBuilder.none(); } return IborRateSensitivity.of(observation, 1d); }
/** * Test forecast value sensitivity for NONE FRA discounting method. */ public void test_forecastValueSensitivity_NONE() { SimpleRatesProvider prov = createProvider(RFRA_NONE); DiscountingFraProductPricer test = DiscountingFraProductPricer.DEFAULT; PointSensitivities sensitivity = test.forecastValueSensitivity(RFRA_NONE, prov); double eps = 1.e-7; double fdSense = forecastValueFwdSensitivity(RFRA_NONE, FORWARD_RATE, eps); ImmutableList<PointSensitivity> sensitivities = sensitivity.getSensitivities(); assertEquals(sensitivities.size(), 1); IborRateSensitivity sensitivity0 = (IborRateSensitivity) sensitivities.get(0); assertEquals(sensitivity0.getIndex(), FRA_NONE.getIndex()); assertEquals(sensitivity0.getObservation().getFixingDate(), FRA_NONE.getStartDate()); assertEquals(sensitivity0.getSensitivity(), fdSense, FRA_NONE.getNotional() * eps); }
/** * Test forecast value sensitivity for AFMA FRA discounting method. */ public void test_forecastValueSensitivity_AFMA() { SimpleRatesProvider prov = createProvider(RFRA_AFMA); DiscountingFraProductPricer test = DiscountingFraProductPricer.DEFAULT; PointSensitivities sensitivity = test.forecastValueSensitivity(RFRA_AFMA, prov); double eps = 1.e-7; double fdSense = forecastValueFwdSensitivity(RFRA_AFMA, FORWARD_RATE, eps); ImmutableList<PointSensitivity> sensitivities = sensitivity.getSensitivities(); assertEquals(sensitivities.size(), 1); IborRateSensitivity sensitivity0 = (IborRateSensitivity) sensitivities.get(0); assertEquals(sensitivity0.getIndex(), FRA_AFMA.getIndex()); assertEquals(sensitivity0.getObservation().getFixingDate(), FRA_AFMA.getStartDate()); assertEquals(sensitivity0.getSensitivity(), fdSense, FRA_AFMA.getNotional() * eps); }
public void test_of() { IborRateComputation test = IborRateComputation.of(USD_LIBOR_3M, date(2016, 2, 18), REF_DATA); IborIndexObservation obs = IborIndexObservation.of(USD_LIBOR_3M, date(2016, 2, 18), REF_DATA); IborRateComputation expected = IborRateComputation.of(obs); assertEquals(test, expected); assertEquals(test.getCurrency(), USD); assertEquals(test.getIndex(), obs.getIndex()); assertEquals(test.getFixingDate(), obs.getFixingDate()); assertEquals(test.getEffectiveDate(), obs.getEffectiveDate()); assertEquals(test.getMaturityDate(), obs.getMaturityDate()); assertEquals(test.getYearFraction(), obs.getYearFraction()); }
/** * Test forecast value sensitivity for ISDA FRA discounting method. */ public void test_forecastValueSensitivity_ISDA() { SimpleRatesProvider prov = createProvider(RFRA); DiscountingFraProductPricer test = DiscountingFraProductPricer.DEFAULT; PointSensitivities sensitivity = test.forecastValueSensitivity(RFRA, prov); double eps = 1.e-7; double fdSense = forecastValueFwdSensitivity(RFRA, FORWARD_RATE, eps); ImmutableList<PointSensitivity> sensitivities = sensitivity.getSensitivities(); assertEquals(sensitivities.size(), 1); IborRateSensitivity sensitivity0 = (IborRateSensitivity) sensitivities.get(0); assertEquals(sensitivity0.getIndex(), FRA.getIndex()); assertEquals(sensitivity0.getObservation().getFixingDate(), FRA.getStartDate()); assertEquals(sensitivity0.getSensitivity(), fdSense, FRA.getNotional() * eps); // test via FraTrade DiscountingFraTradePricer testTrade = new DiscountingFraTradePricer(test); assertEquals(testTrade.forecastValueSensitivity(RFRA_TRADE, prov), test.forecastValueSensitivity(RFRA, prov)); }