@Override
public ZeroRateSensitivity zeroRatePointSensitivityWithSpread(
double yearFraction,
Currency sensitivityCurrency,
double zSpread,
CompoundedRateType compoundedRateType,
int periodPerYear) {
if (Math.abs(yearFraction) < EFFECTIVE_ZERO) {
return ZeroRateSensitivity.of(currency, yearFraction, sensitivityCurrency, 0);
}
if (compoundedRateType.equals(CompoundedRateType.CONTINUOUS)) {
double discountFactor = discountFactorWithSpread(yearFraction, zSpread, compoundedRateType, periodPerYear);
return ZeroRateSensitivity.of(currency, yearFraction, sensitivityCurrency, -discountFactor * yearFraction);
}
double df = discountFactor(yearFraction);
double df2 = Math.pow(df, -1.0 / (yearFraction * periodPerYear));
double df3 = df2 + zSpread / periodPerYear;
double ddfSdz = -yearFraction * Math.pow(df3, -yearFraction * periodPerYear - 1) * df2;
return ZeroRateSensitivity.of(currency, yearFraction, sensitivityCurrency, ddfSdz);
}