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); }
//------------------------------------------------------------------------- protected internal virtual void testCalibrationAgainstISDA(IsdaCompliantCreditCurveCalibrator builder, DayCount dayCount, Currency currency, double tol) { IsdaCdsProductPricer pricer = new IsdaCdsProductPricer(builder.AccrualOnDefaultFormula); for (int i = 0; i < NUM_TESTS; i++) { LegalEntitySurvivalProbabilities creditCurve = builder.calibrate(ImmutableList.copyOf(NODE_CDS[i]), CurveName.of("credit"), CDS_MARKET_DATA[i], YIELD_CURVES[i], dayCount, currency, false, false, REF_DATA); ResolvedCdsTrade[] expectedCds = EXP_NODE_CDS[i]; ImmutableCreditRatesProvider provider = YIELD_CURVES[i].toBuilder().creditCurves(ImmutableMap.of(Pair.of(LEGAL_ENTITY, EUR), creditCurve)).build(); double[] expected = builder.AccrualOnDefaultFormula == AccrualOnDefaultFormula.MARKIT_FIX ? EXP_PROB_MARKIT_FIX[i] : EXP_PROB_ISDA[i]; for (int k = 0; k < N_OBS; k++) { assertEquals(creditCurve.SurvivalProbabilities.discountFactor(OBS_TIMES[k]), expected[k], tol); } int m = expectedCds.Length; for (int j = 0; j < m; j++) { ResolvedCdsTrade cdsFromNode = NODE_CDS[i][j].trade(1d, CDS_MARKET_DATA[i], REF_DATA).UnderlyingTrade.resolve(REF_DATA); assertEquals(cdsFromNode.Product, expectedCds[j].Product); double price1 = pricer.price(cdsFromNode.Product, provider, SPREADS[i][j], cdsFromNode.Info.SettlementDate.get(), PriceType.CLEAN, REF_DATA); assertEquals(price1, 0.0, 5e-16); } } }
//------------------------------------------------------------------------- /// <summary> /// Calculates the price of the CDS index product, which is the minus of 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> /// </summary> /// <param name="cdsIndex"> the product </param> /// <param name="ratesProvider"> the rates provider </param> /// <param name="referenceDate"> the reference date </param> /// <param name="priceType"> the price type </param> /// <param name="refData"> the reference data </param> /// <returns> the price </returns> public virtual double price(ResolvedCdsIndex cdsIndex, CreditRatesProvider ratesProvider, LocalDate referenceDate, PriceType priceType, ReferenceData refData) { ResolvedCds cds = cdsIndex.toSingleNameCds(); return(underlyingPricer.price(cds, ratesProvider, referenceDate, priceType, refData)); }
// internal price computation with specified coupon rate internal virtual double price(ResolvedCdsTrade trade, CreditRatesProvider ratesProvider, double fractionalSpread, PriceType priceType, ReferenceData refData) { LocalDate settlementDate = calculateSettlementDate(trade, ratesProvider, refData); return(productPricer.price(trade.Product, ratesProvider, fractionalSpread, settlementDate, priceType, refData)); }