/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.credit.isdastandardmodel;
import static com.opengamma.financial.convention.businessday.BusinessDayDateUtils.addWorkDays;
import static org.testng.AssertJUnit.assertEquals;
import static org.threeten.bp.Month.OCTOBER;
import org.testng.annotations.Test;
import org.threeten.bp.LocalDate;
import org.threeten.bp.Period;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class JPYTest extends ISDABaseTest {
private static final TYOCalendar TYO_CAL = new TYOCalendar("TYO");
private static final MarketQuoteConverter CONVERTER = new MarketQuoteConverter();
private static final CDSAnalyticFactory FACTORY = new CDSAnalyticFactory(0.35).with(TYO_CAL);
private static final FiniteDifferenceSpreadSensitivityCalculator CS01_CAL = new FiniteDifferenceSpreadSensitivityCalculator();
@Test
public void test() {
final double coupon = 0.01;
final double tradeLevel = 0.012;
final QuotedSpread qs = new QuotedSpread(coupon, tradeLevel);
final double notional = 1e13;
final String[] yieldCurvePoints = new String[] {"1M", "2M", "3M", "6M", "1Y", "2Y", "3Y", "4Y", "5Y", "6Y", "7Y", "8Y", "9Y", "10Y", "12Y", "15Y", "20Y", "30Y" };
final String[] yieldCurveInstruments = new String[] {"M", "M", "M", "M", "M", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S" };
final double[] rates = new double[] {0.001107, 0.001279, 0.001429, 0.002111, 0.003943, 0.002163, 0.002525, 0.003075, 0.003763, 0.004575, 0.00545, 0.006375, 0.007288, 0.008213, 0.010088, 0.012763,
0.01585, 0.017925 };
final LocalDate tradeDate = LocalDate.of(2013, OCTOBER, 16);
final LocalDate spotDate = addWorkDays(tradeDate.minusDays(1), 3, TYO_CAL);
final ISDACompliantYieldCurve yieldCurve = makeYieldCurve(tradeDate, spotDate, yieldCurvePoints, yieldCurveInstruments, rates, ACT360, ACT_ACT_ISDA, Period.ofMonths(6), TYO_CAL);
final CDSAnalytic cds = FACTORY.makeIMMCDS(tradeDate, Period.ofYears(5));
final PointsUpFront puf = CONVERTER.convert(cds, qs, yieldCurve);
final double accAmt = notional * cds.getAccruedPremium(coupon);
final double cashSettle = notional * puf.getPointsUpFront() - accAmt;
final double cs01 = notional * ONE_BP * CS01_CAL.parallelCS01(cds, qs, yieldCurve, ONE_BP);
assertEquals(27, cds.getAccuredDays());
assertEquals(7.5e9, accAmt);
assertEquals("cashSettle", 91814571779.0, cashSettle, 1);
assertEquals("CS01", 4924458158.0, cs01, 1);
// System.out.println("Accrued Days: " + cds.getAccuredDays());
// System.out.println("Accrued Amt: " + accAmt);
// System.out.println("PUF: " + 100 * puf.getPointsUpFront() + "%");
// System.out.println("clean price: " + 100 * (1 - puf.getPointsUpFront()) + "%");
// System.out.println("Cash Settlement: " + cashSettle);
// System.out.println("CS01: " + cs01);
}
}