private double[] priceDiff( final CDSAnalytic cds, final ISDACompliantCreditCurve creditCurve, final double coupon, final ISDACompliantYieldCurve[] bumpedYC, final ISDACompliantYieldCurve baseYC) { final double basePV = _pricer.pv(cds, baseYC, creditCurve, coupon, PriceType.DIRTY); final int n = bumpedYC.length; final double[] res = new double[n]; for (int i = 0; i < n; i++) { final double pv = _pricer.pv(cds, bumpedYC[i], creditCurve, coupon, PriceType.DIRTY); res[i] = pv - basePV; } return res; }
private double priceDiff( final CDSAnalytic cds, final ISDACompliantCreditCurve creditCurve, final double coupon, final ISDACompliantYieldCurve yc1, final ISDACompliantYieldCurve yc2) { final double pv1 = _pricer.pv(cds, yc1, creditCurve, coupon, PriceType.DIRTY); final double pv2 = _pricer.pv(cds, yc2, creditCurve, coupon, PriceType.DIRTY); return pv1 - pv2; }
@Test public void test() { final ISDACompliantCreditCurveBuilder curveBuilder = new FastCreditCurveBuilder(MARKIT_FIX, ArbitrageHandling.ZeroHazardRate); final AnalyticCDSPricer pricer = new AnalyticCDSPricer(MARKIT_FIX); final int nPillars = PILLAR_DATES.length; final CDSAnalytic[] pillarCDSS = new CDSAnalytic[nPillars]; for (int i = 0; i < nPillars; i++) { pillarCDSS[i] = new CDSAnalytic( TODAY, EFFECTIVE_DATE, CASH_SETTLE_DATE, STARTDATE, PILLAR_DATES[i], PAY_ACC_ON_DEFAULT, PAYMENT_INTERVAL, STUB, PROCTECTION_START, RECOVERY_RATE); } final ISDACompliantCreditCurve creditCurve = curveBuilder.calibrateCreditCurve(pillarCDSS, SPREADS, YIELD_CURVE); final int nMat = MATURITIES.length; for (int i = 0; i < nMat; i++) { final CDSAnalytic cds = new CDSAnalytic( TODAY, EFFECTIVE_DATE, CASH_SETTLE_DATE, STARTDATE, MATURITIES[i], PAY_ACC_ON_DEFAULT, PAYMENT_INTERVAL, STUB, PROCTECTION_START, RECOVERY_RATE); final double dPV = pricer.pv(cds, YIELD_CURVE, creditCurve, COUPON, PriceType.DIRTY); // System.out.println(MATURITIES[i] + "\t" + dPV); assertEquals(MATURITIES[i].toString(), EXPECTED_UPFRONT_CHARGE[i], dPV, 1e-15); } }