/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.credit.isdastandardmodel;
import com.opengamma.analytics.financial.credit.isdastandardmodel.fastcalibration.CreditCurveCalibrator;
/**
*/
public class AnnuityForSpreadISDAFunction extends AnnuityForSpreadFunction {
private static final AnalyticCDSPricer PRICER = new AnalyticCDSPricer();
private final CDSAnalytic _cds;
private final ISDACompliantYieldCurve _yieldCurve;
private final CreditCurveCalibrator _calibrator;
/**
* For a given quoted spread (aka 'flat' spread), this function returns the risky annuity (aka risky PV01, RPV01 or risky duration).
* This works by first calibrating a constant hazard rate that recovers the given spread, then computing the value of the annuity from this
* constant hazard rate. The ISDA standard CDS model is used for these calculations.
* @param cds analytic description of a CDS traded at a certain time
* @param yieldCurve Calibrated yield curve
*/
public AnnuityForSpreadISDAFunction(final CDSAnalytic cds, final ISDACompliantYieldCurve yieldCurve) {
_cds = cds;
_yieldCurve = yieldCurve;
_calibrator = new CreditCurveCalibrator(new CDSAnalytic[] {cds }, yieldCurve);
}
@Override
public Double evaluate(final Double spread) {
final ISDACompliantCreditCurve cc = _calibrator.calibrate(new double[] {spread });
return PRICER.annuity(_cds, _yieldCurve, cc, PriceType.CLEAN);
}
}