public void test_presentValueSensitivityWithSpread_df_spread_ended() { PointSensitivities computed = PRICER.presentValueSensitivityWithSpread(PAYMENT_PAST, DISCOUNT_FACTORS, Z_SPREAD, PERIODIC, 3).build(); assertEquals(computed, PointSensitivities.empty()); }
private PointSensitivityBuilder presentValueSensitivityNominalFromZSpread( ResolvedFixedCouponBond bond, IssuerCurveDiscountFactors discountFactors, double zSpread, CompoundedRateType compoundedRateType, int periodsPerYear) { Payment nominal = bond.getNominalPayment(); PointSensitivityBuilder pt = nominalPricer.presentValueSensitivityWithSpread( nominal, discountFactors.getDiscountFactors(), zSpread, compoundedRateType, periodsPerYear); if (pt instanceof ZeroRateSensitivity) { return IssuerCurveZeroRateSensitivity.of((ZeroRateSensitivity) pt, discountFactors.getLegalEntityGroup()); } return pt; // NoPointSensitivity }
public void test_presentValueSensitivityWithSpread_df_spread_continuous() { PointSensitivities point = PRICER.presentValueSensitivityWithSpread( PAYMENT, DISCOUNT_FACTORS, Z_SPREAD, CONTINUOUS, 0).build(); double relativeYearFraction = ACT_365F.relativeYearFraction(VAL_DATE_2014_01_22, PAYMENT_DATE); double expected = -DF * relativeYearFraction * NOTIONAL_USD * Math.exp(-Z_SPREAD * relativeYearFraction); ZeroRateSensitivity actual = (ZeroRateSensitivity) point.getSensitivities().get(0); assertEquals(actual.getCurrency(), USD); assertEquals(actual.getCurveCurrency(), USD); assertEquals(actual.getYearFraction(), relativeYearFraction); assertEquals(actual.getSensitivity(), expected, NOTIONAL_USD * TOL); }
public void test_presentValueSensitivityWithSpread_df_spread_periodic() { PointSensitivities point = PRICER.presentValueSensitivityWithSpread( PAYMENT, DISCOUNT_FACTORS, Z_SPREAD, PERIODIC, PERIOD_PER_YEAR).build(); double relativeYearFraction = ACT_365F.relativeYearFraction(VAL_DATE_2014_01_22, PAYMENT_DATE); double discountFactorUp = DF * Math.exp(-EPS * relativeYearFraction); double discountFactorDw = DF * Math.exp(EPS * relativeYearFraction); double rateUp = (Math.pow(discountFactorUp, -1d / PERIOD_PER_YEAR / relativeYearFraction) - 1d) * PERIOD_PER_YEAR; double rateDw = (Math.pow(discountFactorDw, -1d / PERIOD_PER_YEAR / relativeYearFraction) - 1d) * PERIOD_PER_YEAR; double expected = 0.5 * NOTIONAL_USD / EPS * ( discountFactorFromPeriodicallyCompoundedRate(rateUp + Z_SPREAD, PERIOD_PER_YEAR, relativeYearFraction) - discountFactorFromPeriodicallyCompoundedRate(rateDw + Z_SPREAD, PERIOD_PER_YEAR, relativeYearFraction)); ZeroRateSensitivity actual = (ZeroRateSensitivity) point.getSensitivities().get(0); assertEquals(actual.getCurrency(), USD); assertEquals(actual.getCurveCurrency(), USD); assertEquals(actual.getYearFraction(), relativeYearFraction); assertEquals(actual.getSensitivity(), expected, NOTIONAL_USD * EPS); }