/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.interestrate.capletstripping;
import static org.testng.AssertJUnit.assertEquals;
import java.util.List;
import org.testng.annotations.Test;
import com.opengamma.analytics.financial.model.volatility.discrete.DiscreteVolatilityFunction;
import com.opengamma.analytics.financial.model.volatility.discrete.DiscreteVolatilityFunctionProviderDirect;
import com.opengamma.analytics.math.matrix.DoubleMatrix1D;
import com.opengamma.analytics.math.matrix.IdentityMatrix;
import com.opengamma.analytics.math.statistics.leastsquare.LeastSquareResults;
import com.opengamma.analytics.util.AssertMatrix;
import com.opengamma.util.test.TestGroup;
/**
*
*/
@Test(groups = TestGroup.UNIT)
public class CapletStrippingResultTest extends CapletStrippingSetup {
private static final MultiCapFloorPricer s_pricer;
private static final DiscreteVolatilityFunction s_dvf;
static {
DiscreteVolatilityFunctionProviderDirect p = new DiscreteVolatilityFunctionProviderDirect();
List<CapFloor> caps = getCaps(0);
s_pricer = new MultiCapFloorPricer(caps, getYieldCurves());
s_dvf = p.from(s_pricer.getExpiryStrikeArray());
}
@Test
public void rootFindTest() {
int nCaps = s_pricer.getNumCaps();
int nCaplets = s_pricer.getNumCaplets();
DoubleMatrix1D fitParms = new DoubleMatrix1D(nCaplets, 0.4);
double[] prices = s_pricer.priceFromCapletVols(fitParms.getData());
CapletStrippingResult results = new CapletStrippingResultRootFind(fitParms, s_dvf, s_pricer);
AssertMatrix.assertEqualsVectors(fitParms, results.getCapletVols(), 1e-15);
assertEquals(0.0, results.getChiSqr());
AssertMatrix.assertEqualsVectors(fitParms, results.getFitParameters(), 1e-15);
double[] mCapPrices = results.getModelCapPrices();
double[] mCapVols = results.getModelCapVols();
assertEquals(nCaps, mCapVols.length);
for (int i = 0; i < nCaps; i++) {
assertEquals(prices[i], mCapPrices[i], 1e-14);
assertEquals(0.4, mCapVols[i], 1e-9);
}
}
@Test
public void leastSquareTest() {
int nCaps = s_pricer.getNumCaps();
int nCaplets = s_pricer.getNumCaplets();
DoubleMatrix1D fitParms = new DoubleMatrix1D(nCaplets, 0.4);
IdentityMatrix cov = new IdentityMatrix(nCaplets);
double chi2 = 0.456;
double[] prices = s_pricer.priceFromCapletVols(fitParms.getData());
LeastSquareResults res = new LeastSquareResults(chi2, fitParms, cov);
CapletStrippingResult results = new CapletStrippingResultLeastSquare(res, s_dvf, s_pricer);
AssertMatrix.assertEqualsVectors(fitParms, results.getCapletVols(), 1e-15);
assertEquals(chi2, results.getChiSqr());
AssertMatrix.assertEqualsVectors(fitParms, results.getFitParameters(), 1e-15);
double[] mCapPrices = results.getModelCapPrices();
double[] mCapVols = results.getModelCapVols();
assertEquals(nCaps, mCapVols.length);
for (int i = 0; i < nCaps; i++) {
assertEquals(prices[i], mCapPrices[i], 1e-14);
assertEquals(0.4, mCapVols[i], 1e-9);
}
}
}