//------------------------------------------------------------------------- public virtual void test_presentValueDelta() { CurrencyAmount capComputed = PRICER.presentValueDelta(CAP, RATES, VOLS); CurrencyAmount floorComputed = PRICER.presentValueDelta(FLOOR, RATES, VOLS); double capExpected = 0d; double floorExpected = 0d; int nPeriods = CAP.CapletFloorletPeriods.size(); for (int i = 0; i < nPeriods; ++i) { capExpected += PRICER_PERIOD.presentValueDelta(CAP.CapletFloorletPeriods.get(i), RATES, VOLS).Amount; floorExpected += PRICER_PERIOD.presentValueDelta(FLOOR.CapletFloorletPeriods.get(i), RATES, VOLS).Amount; } assertEquals(capComputed.Currency, EUR); assertEquals(capComputed.Amount, capExpected, TOL * NOTIONAL_VALUE); assertEquals(floorComputed.Currency, EUR); assertEquals(floorComputed.Amount, floorExpected, TOL * NOTIONAL_VALUE); }
//------------------------------------------------------------------------- public virtual void test_presentValueDelta_formula() { CurrencyAmount computedCaplet = PRICER.presentValueDelta(CAPLET_LONG, RATES, VOLS); CurrencyAmount computedFloorlet = PRICER.presentValueDelta(FLOORLET_SHORT, RATES, VOLS); double forward = RATES.iborIndexRates(EUR_EURIBOR_3M).rate(RATE_COMP.Observation); double expiry = VOLS.relativeTime(CAPLET_LONG.FixingDateTime); double volatility = VOLS.volatility(expiry, STRIKE, forward); double df = RATES.discountFactor(EUR, CAPLET_LONG.PaymentDate); double expectedCaplet = NOTIONAL * df * CAPLET_LONG.YearFraction * NormalFormulaRepository.delta(forward, STRIKE, expiry, volatility, CALL); double expectedFloorlet = -NOTIONAL *df *CAPLET_LONG.YearFraction *NormalFormulaRepository.delta(forward, STRIKE, expiry, volatility, PUT); assertEquals(computedCaplet.Currency, EUR); assertEquals(computedCaplet.Amount, expectedCaplet, NOTIONAL * TOL); assertEquals(computedFloorlet.Currency, EUR); assertEquals(computedFloorlet.Amount, expectedFloorlet, NOTIONAL * TOL); }