/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.tutorial.analysis.swap;
import org.testng.annotations.Test;
import org.threeten.bp.ZonedDateTime;
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.financial.provider.curve.CurveBuildingBlockBundle;
import com.opengamma.analytics.financial.provider.description.interestrate.MulticurveProviderDiscount;
import com.opengamma.analytics.math.curve.Curve;
import com.opengamma.analytics.tutorial.datasets.UsdDatasetAug21;
import com.opengamma.financial.convention.daycount.DayCounts;
import com.opengamma.util.test.TestGroup;
import com.opengamma.util.time.DateUtils;
import com.opengamma.util.tuple.Pair;
/**
* Examples of risk analysis for different swaps in USD.
* Those examples can be used for tutorials.
*/
@Test(groups = TestGroup.UNIT)
public class SwapRiskAnalysisAug21Usd {
public SwapRiskAnalysisAug21Usd() {
}
@Test
public void FraCurveCalibration() {
ZonedDateTime evalDate = DateUtils.getUTCDate(2014, 8, 21);
Pair<MulticurveProviderDiscount, CurveBuildingBlockBundle> curveBundle =
UsdDatasetAug21.getFraCurve(evalDate, true,
UsdDatasetAug21.INTERPOLATOR_LINEAR);
MulticurveProviderDiscount curves = curveBundle.getFirst();
for (String yieldCurveName : curves.getAllCurveNames()) {
YieldAndDiscountCurve yieldAndDiscountCurve = curves.getCurve(yieldCurveName);
Curve<Double, Double> yieldCurveValues = null;
if (yieldAndDiscountCurve instanceof YieldCurve) {
yieldCurveValues = ((YieldCurve)yieldAndDiscountCurve).getCurve();
} else if (yieldAndDiscountCurve instanceof DiscountCurve) {
yieldCurveValues = ((DiscountCurve)yieldAndDiscountCurve).getCurve();
}
Double[] dateFractions = yieldCurveValues.getXData();
Double[] zeroRates = yieldCurveValues.getYData();
System.out.println("Curve name,Curve X,Curve Y,Start date,End date,Forward");
for(int i = 0; i < dateFractions.length; ++i) {
System.out.println(
yieldCurveName + "," +
String.valueOf(dateFractions[i]) + "," +
String.valueOf(100. * zeroRates[i]) + "," +
UsdDatasetAug21.s_startDates[i].toLocalDate().toString() + "," +
UsdDatasetAug21.s_endDates[i].toLocalDate().toString() + "," +
String.valueOf(100. * yieldAndDiscountCurve.getForwardRate(
dateFractions[i])) + "," +
String.valueOf(100. * yieldAndDiscountCurve.getForwardRate(
DayCounts.ACT_360.getDayCountFraction(evalDate, UsdDatasetAug21.s_endDates[i]))) + "," +
String.valueOf(100. * yieldAndDiscountCurve.getForwardRate(
DayCounts.ACT_360.getDayCountFraction(evalDate, UsdDatasetAug21.s_startDates[i].plusMonths(6)))) + "," +
String.valueOf(100. * yieldAndDiscountCurve.getForwardRate(
DayCounts.ACT_360.getDayCountFraction(evalDate, UsdDatasetAug21.s_startDates[i]))));
}
double t1 = DayCounts.ACT_360.getDayCountFraction(evalDate, DateUtils.getUTCDate(2015, 7, 9));
double t2 = DayCounts.ACT_360.getDayCountFraction(evalDate, DateUtils.getUTCDate(2016, 1, 9));
System.out.println("t1,t2,forward");
System.out.println(String.valueOf(t1) + "," + String.valueOf(t2) + "," + String.valueOf(yieldAndDiscountCurve.getForwardRate(t1) * 100));
}
}
}