private double compositionFactorCutoff() { if (!nextFixing.isAfter(lastFixingNonCutoff)) { OvernightIndexObservation obs = computation.observeOn(lastFixingNonCutoff); double rate = rates.rate(obs); double compositionFactor = 1.0d; for (int i = 0; i < cutoffOffset - 1; i++) { compositionFactor *= 1.0d + accrualFactorCutoff[i] * rate; } return compositionFactor; } return 1.0d; }
private double compositionFactorNonCutoff() { if (!nextFixing.isAfter(lastFixingNonCutoff)) { OvernightIndexObservation obs = computation.observeOn(nextFixing); LocalDate startDate = obs.getEffectiveDate(); LocalDate endDate = computation.calculateMaturityFromFixing(lastFixingNonCutoff); double accrualFactor = dayCount.yearFraction(startDate, endDate); double rate = rates.periodRate(obs, endDate); return 1.0d + accrualFactor * rate; } return 1.0d; }
public void test_observeOn() { OvernightCompoundedRateComputation test = OvernightCompoundedRateComputation.of(USD_FED_FUND, date(2016, 2, 24), date(2016, 3, 24), REF_DATA); assertEquals(test.observeOn(date(2016, 2, 24)), OvernightIndexObservation.of(USD_FED_FUND, date(2016, 2, 24), REF_DATA)); }
private ObjDoublePair<PointSensitivityBuilder> compositionFactorAndSensitivityCutoff() { OvernightIndexObservation obs = computation.observeOn(lastFixingNonCutoff); if (!nextFixing.isAfter(lastFixingNonCutoff)) { double rate = rates.rate(obs); double compositionFactor = 1.0d; double compositionFactorDerivative = 0.0; for (int i = 0; i < cutoffOffset - 1; i++) { compositionFactor *= 1.0d + accrualFactorCutoff[i] * rate; compositionFactorDerivative += accrualFactorCutoff[i] / (1.0d + accrualFactorCutoff[i] * rate); } compositionFactorDerivative *= compositionFactor; PointSensitivityBuilder rateSensitivity = cutoffOffset <= 1 ? PointSensitivityBuilder.none() : rates.ratePointSensitivity(obs); rateSensitivity = rateSensitivity.multipliedBy(compositionFactorDerivative); return ObjDoublePair.of(rateSensitivity, compositionFactor); } return ObjDoublePair.of(PointSensitivityBuilder.none(), 1.0d); }
private ObjDoublePair<PointSensitivityBuilder> compositionFactorAndSensitivityNonCutoff() { if (!nextFixing.isAfter(lastFixingNonCutoff)) { OvernightIndexObservation obs = computation.observeOn(nextFixing); LocalDate startDate = obs.getEffectiveDate(); LocalDate endDate = computation.calculateMaturityFromFixing(lastFixingNonCutoff); double accrualFactor = dayCount.yearFraction(startDate, endDate); double rate = rates.periodRate(obs, endDate); PointSensitivityBuilder rateSensitivity = rates.periodRatePointSensitivity(obs, endDate); rateSensitivity = rateSensitivity.multipliedBy(accrualFactor); return ObjDoublePair.of(rateSensitivity, 1.0d + accrualFactor * rate); } return ObjDoublePair.of(PointSensitivityBuilder.none(), 1.0d); }