@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case -843784602: // fixings return ((IborAveragedRateComputation) bean).getFixings(); } return super.propertyGet(bean, propertyName, quiet); }
@Override public double rate( IborAveragedRateComputation computation, LocalDate startDate, LocalDate endDate, RatesProvider provider) { IborIndexRates rates = provider.iborIndexRates(computation.getIndex()); // take (rate * weight) for each fixing and divide by total weight double weightedRate = computation.getFixings().stream() .mapToDouble(fixing -> weightedRate(fixing, rates)) .sum(); return weightedRate / computation.getTotalWeight(); }
@Override public PointSensitivityBuilder rateSensitivity( IborAveragedRateComputation computation, LocalDate startDate, LocalDate endDate, RatesProvider provider) { IborIndexRates rates = provider.iborIndexRates(computation.getIndex()); // combine the weighted sensitivity to each fixing // omit fixed rates as they have no sensitivity to a curve return computation.getFixings().stream() .filter(fixing -> !fixing.getFixedRate().isPresent()) .map(fixing -> weightedSensitivity(fixing, computation.getTotalWeight(), rates)) .reduce(PointSensitivityBuilder.none(), PointSensitivityBuilder::combinedWith); }
public void test_of_List() { IborAveragedRateComputation test = IborAveragedRateComputation.of(FIXINGS); assertEquals(test.getFixings(), FIXINGS); assertEquals(test.getTotalWeight(), 2d, 0d); }
@Override public double explainRate( IborAveragedRateComputation computation, LocalDate startDate, LocalDate endDate, RatesProvider provider, ExplainMapBuilder builder) { IborIndexRates rates = provider.iborIndexRates(computation.getIndex()); for (IborAveragedFixing fixing : computation.getFixings()) { rates.explainRate(fixing.getObservation(), builder, child -> child.put(ExplainKey.WEIGHT, fixing.getWeight())); } double rate = rate(computation, startDate, endDate, provider); builder.put(ExplainKey.COMBINED_RATE, rate); return rate; }