public virtual void endedTest() { LocalDate valuationDate = PRODUCT.ProtectionEndDate.plusDays(1); CreditRatesProvider provider = createCreditRatesProviderSingle(valuationDate, false); double price = PRICER.price(PRODUCT, provider, SETTLEMENT_STD, CLEAN, REF_DATA); assertEquals(price, 0d); CurrencyAmount pv = PRICER.presentValue(PRODUCT, provider, SETTLEMENT_STD, CLEAN, REF_DATA); assertEquals(pv, CurrencyAmount.zero(USD)); assertThrowsIllegalArg(() => PRICER.parSpread(PRODUCT, provider, SETTLEMENT_STD, REF_DATA)); CurrencyAmount rpv01 = PRICER.rpv01(PRODUCT, provider, SETTLEMENT_STD, CLEAN, REF_DATA); assertEquals(rpv01, CurrencyAmount.zero(USD)); CurrencyAmount recovery01 = PRICER.recovery01(PRODUCT, provider, SETTLEMENT_STD, REF_DATA); assertEquals(recovery01, CurrencyAmount.zero(USD)); PointSensitivityBuilder sensi = PRICER.presentValueSensitivity(PRODUCT, provider, SETTLEMENT_STD, REF_DATA); assertEquals(sensi, PointSensitivityBuilder.none()); PointSensitivityBuilder sensiPrice = PRICER.priceSensitivity(PRODUCT, provider, SETTLEMENT_STD, REF_DATA); assertEquals(sensiPrice, PointSensitivityBuilder.none()); assertThrowsIllegalArg(() => PRICER.parSpreadSensitivity(PRODUCT, provider, SETTLEMENT_STD, REF_DATA)); JumpToDefault jumpToDefault = PRICER.jumpToDefault(PRODUCT, provider, SETTLEMENT_STD, REF_DATA); assertEquals(jumpToDefault, JumpToDefault.of(USD, ImmutableMap.of(INDEX_ID, 0d))); CurrencyAmount expectedLoss = PRICER.expectedLoss(PRODUCT, provider); assertEquals(expectedLoss, CurrencyAmount.zero(USD)); }
public virtual void test_regression() { CurrencyAmount cleanPvOg = PRICER_OG.presentValue(PRODUCT, RATES_PROVIDER_SINGLE, SETTLEMENT_STD, CLEAN, REF_DATA); assertEquals(cleanPvOg.Amount, -7305773.195876285, NOTIONAL * TOL); assertEquals(cleanPvOg.Currency, USD); CurrencyAmount dirtyPvOg = PRICER_OG.presentValue(PRODUCT, RATES_PROVIDER_SINGLE, SETTLEMENT_STD, DIRTY, REF_DATA); assertEquals(dirtyPvOg.Amount, -8051477.663230239, NOTIONAL * TOL); assertEquals(dirtyPvOg.Currency, USD); double cleanPriceOg = PRICER_OG.price(PRODUCT, RATES_PROVIDER_SINGLE, SETTLEMENT_STD, CLEAN, REF_DATA); assertEquals(cleanPriceOg, -0.07619999999999996, TOL); double dirtyPriceOg = PRICER_OG.price(PRODUCT, RATES_PROVIDER_SINGLE, SETTLEMENT_STD, DIRTY, REF_DATA); assertEquals(dirtyPriceOg, -0.08397777777777776, TOL); }
public virtual void test_price() { double computed = PRICER.price(TRADE, RATES_PROVIDER, PriceType.CLEAN, REF_DATA); double expected = PRICER_PRODUCT.price(PRODUCT, RATES_PROVIDER, SETTLEMENT_DATE, PriceType.CLEAN, REF_DATA); double computedMf = PRICER_MF.price(TRADE_NO_SETTLE_DATE, RATES_PROVIDER, PriceType.CLEAN, REF_DATA); double expectedMf = PRICER_PRODUCT_MF.price(PRODUCT, RATES_PROVIDER, SETTLEMENT_DATE, PriceType.CLEAN, REF_DATA); assertEquals(computed, expected, TOL); assertEquals(computedMf, expectedMf, TOL); }
public virtual void priceSensitivityTest() { PointSensitivityBuilder point = PRICER.priceSensitivity(PRODUCT, RATES_PROVIDER, SETTLEMENT_STD, REF_DATA); CurrencyParameterSensitivities res = RATES_PROVIDER.parameterSensitivity(point.build()); CurrencyParameterSensitivities exp = CALC_FD.sensitivity(RATES_PROVIDER, p => CurrencyAmount.of(USD, PRICER.price(PRODUCT, p, SETTLEMENT_STD, CLEAN, REF_DATA))); equalWithRelativeTolerance(res, exp, NOTIONAL * EPS); PointSensitivityBuilder pointMarkit = PRICER_MARKIT.priceSensitivity(PRODUCT, RATES_PROVIDER, SETTLEMENT_STD, REF_DATA); CurrencyParameterSensitivities resMarkit = RATES_PROVIDER.parameterSensitivity(pointMarkit.build()); CurrencyParameterSensitivities expMarkit = CALC_FD.sensitivity(RATES_PROVIDER, p => CurrencyAmount.of(USD, PRICER_MARKIT.price(PRODUCT, p, SETTLEMENT_STD, CLEAN, REF_DATA))); equalWithRelativeTolerance(resMarkit, expMarkit, NOTIONAL * EPS); PointSensitivityBuilder pointOg = PRICER_OG.priceSensitivity(PRODUCT, RATES_PROVIDER, SETTLEMENT_STD, REF_DATA); CurrencyParameterSensitivities resOg = RATES_PROVIDER.parameterSensitivity(pointOg.build()); CurrencyParameterSensitivities expOg = CALC_FD.sensitivity(RATES_PROVIDER, p => CurrencyAmount.of(USD, PRICER_OG.price(PRODUCT, p, SETTLEMENT_STD, CLEAN, REF_DATA))); equalWithRelativeTolerance(resOg, expOg, NOTIONAL * EPS); }
//------------------------------------------------------------------------- /// <summary> /// Calculates the price of the underlying product, which is the present value per unit notional. /// <para> /// This method can calculate the clean or dirty price, see <seealso cref="PriceType"/>. /// If calculating the clean price, the accrued interest is calculated based on the step-in date. /// </para> /// <para> /// This is coherent to <seealso cref="#presentValueOnSettle(ResolvedCdsIndexTrade, CreditRatesProvider, PriceType, ReferenceData)"/>. /// /// </para> /// </summary> /// <param name="trade"> the trade </param> /// <param name="ratesProvider"> the rates provider </param> /// <param name="priceType"> the price type </param> /// <param name="refData"> the reference data </param> /// <returns> the price </returns> public virtual double price(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, PriceType priceType, ReferenceData refData) { LocalDate settlementDate = calculateSettlementDate(trade, ratesProvider, refData); return(productPricer.price(trade.Product, ratesProvider, settlementDate, priceType, refData)); }