package com.opengamma.financial.analytics.test;
import static org.testng.Assert.assertEquals;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.Resource;
import org.testng.annotations.Test;
import com.opengamma.analytics.financial.interestrate.YieldCurveBundle;
import com.opengamma.analytics.financial.model.interestrate.curve.DayPeriodPreCalculatedDiscountCurve;
import com.opengamma.analytics.financial.model.interestrate.curve.DiscountCurve;
import com.opengamma.analytics.financial.model.interestrate.curve.YieldAndDiscountCurve;
import com.opengamma.analytics.financial.model.interestrate.curve.YieldCurve;
import com.opengamma.analytics.math.curve.DoublesCurve;
import com.opengamma.analytics.math.curve.InterpolatedDoublesCurve;
import com.opengamma.analytics.math.interpolation.CombinedInterpolatorExtrapolatorFactory;
import com.opengamma.analytics.math.interpolation.Interpolator1D;
import com.opengamma.analytics.math.interpolation.Interpolator1DFactory;
import com.opengamma.financial.security.swap.SwapSecurity;
import com.opengamma.util.ResourceUtils;
import com.opengamma.util.test.TestGroup;
@Test(groups = TestGroup.UNIT)
public class IRCurveParserTest {
private static final Logger s_logger = LoggerFactory.getLogger(IRSwapTradeParserTest.class);
public void test() throws Exception {
IRCurveParser curveParser = new IRCurveParser();
Resource resource = ResourceUtils.createResource("classpath:com/opengamma/financial/analytics/test/Base_Curves_20131014_Clean.csv");
List<InterpolatedDoublesCurve> curves = curveParser.parseCSVFile(resource.getURL());
for (InterpolatedDoublesCurve interpolatedDoublesCurve : curves) {
}
s_logger.info("Got {} trades", curves.size());
}
@Test
public void testInterpolation() {
double[] x = { 0.249144422, 0.501026694,0.750171116, 0.999315537, 1.25119781, 1.500342231, 1.749486653};
double[] y = { 0.999297948, 0.998546826, 0.997720761, 0.996770227, 0.995642429, 0.994330655, 0.992795137 };
Interpolator1D interpolator = CombinedInterpolatorExtrapolatorFactory.getInterpolator(
"LogNaturalCubicWithMonotonicity",
"FlatExtrapolator",
"LinearExtrapolator");
DoublesCurve doublesCurve = InterpolatedDoublesCurve.from(x, y, interpolator);
double value0=doublesCurve.getYValue(0.0);
double value=doublesCurve.getYValue(.31);
double[] r = new double[y.length];
for (int i = 0; i < r.length; i++) {
r[i]=-Math.log(y[i])/x[i];
}
final InterpolatedDoublesCurve curve = new InterpolatedDoublesCurve(x,y,
CombinedInterpolatorExtrapolatorFactory.getInterpolator(Interpolator1DFactory.LOG_NATURAL_CUBIC_MONOTONE, Interpolator1DFactory.LOG_LINEAR, Interpolator1DFactory.LINEAR), true, "curve");
double value2=curve.getYValue(.31);
final InterpolatedDoublesCurve curve2 = new InterpolatedDoublesCurve(x,r,
CombinedInterpolatorExtrapolatorFactory.getInterpolator(Interpolator1DFactory.CLAMPED_CUBIC_MONOTONE, Interpolator1DFactory.LOG_LINEAR, Interpolator1DFactory.LINEAR), true, "curve");
double value3=Math.exp(-curve2.getYValue(.31)*.31);
final InterpolatedDoublesCurve curveForYieldCurve = new InterpolatedDoublesCurve(x,y,
CombinedInterpolatorExtrapolatorFactory.getInterpolator(Interpolator1DFactory.LOG_NATURAL_CUBIC_MONOTONE, Interpolator1DFactory.LOG_LINEAR, Interpolator1DFactory.LINEAR), true, "curve");
final YieldAndDiscountCurve yieldcurve= DiscountCurve.from(curveForYieldCurve);
double value4=yieldcurve.getDiscountFactor(.31);
final DayPeriodPreCalculatedDiscountCurve discountCurve= new DayPeriodPreCalculatedDiscountCurve("",curveForYieldCurve);
double value5=discountCurve.getDiscountFactor(.31);
}
}