// price function private System.Func <DoubleArray, DoubleArray> createPriceFunction(SabrIborCapletFloorletVolatilityCalibrationDefinition sabrDefinition, RatesProvider ratesProvider, SabrParametersIborCapletFloorletVolatilities volatilities, IList <ResolvedIborCapFloorLeg> capList, IList <double> priceList) { System.Func <DoubleArray, DoubleArray> priceFunction = (DoubleArray x) => { SabrParametersIborCapletFloorletVolatilities volsNew = updateParameters(sabrDefinition, volatilities, x); return(DoubleArray.of(capList.Count, n => sabrPricer.presentValue(capList[n], ratesProvider, volsNew).Amount / priceList[n])); }; return(priceFunction); }
public virtual void test_presentValue() { CurrencyAmount capComputed = PRICER.presentValue(CAP, RATES, VOLS); CurrencyAmount floorComputed = PRICER.presentValue(FLOOR, RATES, VOLS); double capExpected = 0d; double floorExpected = 0d; int nPeriods = CAP.CapletFloorletPeriods.size(); for (int i = 0; i < nPeriods; ++i) { capExpected += PRICER_PERIOD.presentValue(CAP.CapletFloorletPeriods.get(i), RATES, VOLS).Amount; floorExpected += PRICER_PERIOD.presentValue(FLOOR.CapletFloorletPeriods.get(i), RATES, VOLS).Amount; } assertEquals(capComputed.Currency, EUR); assertEquals(capComputed.Amount, capExpected); assertEquals(floorComputed.Currency, EUR); assertEquals(floorComputed.Amount, floorExpected); }
public virtual void test_presentValue() { MultiCurrencyAmount computed1 = PRICER.presentValue(CAP_ONE_LEG, RATES, VOLS); MultiCurrencyAmount computed2 = PRICER.presentValue(CAP_TWO_LEGS, RATES, VOLS); CurrencyAmount cap = PRICER_CAP_LEG.presentValue(CAP_LEG, RATES, VOLS); CurrencyAmount pay = PRICER_PAY_LEG.presentValue(PAY_LEG, RATES); assertEquals(computed1, MultiCurrencyAmount.of(cap)); assertEquals(computed2, MultiCurrencyAmount.of(cap.plus(pay))); }