/// <summary> /// Test par spread for ISDA FRA Discounting method. /// </summary> public virtual void test_parSpread_ISDA() { ResolvedFra fraExp = RFRA; SimpleRatesProvider prov = createProvider(fraExp); DiscountingFraProductPricer test = DiscountingFraProductPricer.DEFAULT; double parSpread = test.parSpread(fraExp, prov); ResolvedFra fra = createNewFra(FRA, FRA.FixedRate + parSpread); CurrencyAmount pv = test.presentValue(fra, prov); assertEquals(pv.Amount, 0.0, TOLERANCE); // test via FraTrade DiscountingFraTradePricer testTrade = new DiscountingFraTradePricer(test); assertEquals(testTrade.parSpread(RFRA_TRADE, prov), test.parSpread(RFRA, prov)); }
/// <summary> /// Test par spread for AFMA FRA Discounting method. /// </summary> public virtual void test_parSpread_AFMA() { ResolvedFra fraExp = RFRA_AFMA; SimpleRatesProvider prov = createProvider(fraExp); DiscountingFraProductPricer test = DiscountingFraProductPricer.DEFAULT; double parSpread = test.parSpread(fraExp, prov); ResolvedFra fra = createNewFra(FRA_AFMA, FRA_AFMA.FixedRate + parSpread); CurrencyAmount pv = test.presentValue(fra, prov); assertEquals(pv.Amount, 0.0, TOLERANCE); }
/// <summary> /// Calculates the par spread of the FRA trade. /// <para> /// This is spread to be added to the fixed rate to have a present value of 0. /// /// </para> /// </summary> /// <param name="trade"> the trade </param> /// <param name="provider"> the rates provider </param> /// <returns> the par spread </returns> public virtual double parSpread(ResolvedFraTrade trade, RatesProvider provider) { return(productPricer.parSpread(trade.Product, provider)); }
/// <summary> /// Test par spread sensitivity for ISDA FRA Discounting method. /// </summary> public virtual void test_parSpreadSensitivity_ISDA() { PointSensitivities sensiSpread = DEFAULT_PRICER.parSpreadSensitivity(RFRA, IMM_PROV); CurrencyParameterSensitivities sensiComputed = IMM_PROV.parameterSensitivity(sensiSpread); CurrencyParameterSensitivities sensiExpected = CAL_FD.sensitivity(IMM_PROV, (p) => CurrencyAmount.of(FRA.Currency, DEFAULT_PRICER.parSpread(RFRA, (p)))); assertTrue(sensiComputed.equalWithTolerance(sensiExpected, EPS_FD)); PointSensitivities sensiRate = DEFAULT_PRICER.parRateSensitivity(RFRA, IMM_PROV); assertTrue(sensiSpread.equalWithTolerance(sensiRate, EPS_FD)); // test via FraTrade assertEquals(DEFAULT_TRADE_PRICER.parRateSensitivity(RFRA_TRADE, IMM_PROV), DEFAULT_PRICER.parRateSensitivity(RFRA, IMM_PROV)); assertEquals(DEFAULT_TRADE_PRICER.parSpreadSensitivity(RFRA_TRADE, IMM_PROV), DEFAULT_PRICER.parSpreadSensitivity(RFRA, IMM_PROV)); }