/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.pricer.impl.credit.isda;
import static org.testng.AssertJUnit.assertEquals;
import java.time.LocalDate;
import java.time.Month;
import java.time.Period;
import org.testng.annotations.Test;
import com.opengamma.strata.basics.ReferenceData;
import com.opengamma.strata.basics.date.HolidayCalendar;
import com.opengamma.strata.basics.date.HolidayCalendarIds;
/**
* Test.
*/
@Test
public class CdsJapanTest extends IsdaBaseTest {
private static final ReferenceData REF_DATA = ReferenceData.standard();
private static final HolidayCalendar TYO_CAL = HolidayCalendarIds.JPTO.resolve(REF_DATA);
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();
public void test() {
final double coupon = 0.01;
final double tradeLevel = 0.012;
final CdsQuotedSpread qs = new CdsQuotedSpread(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, Month.OCTOBER, 16);
final LocalDate spotDate = TYO_CAL.shift(tradeDate.minusDays(1), 3);
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);
}
}