/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.sesame.credit;
import java.util.Arrays;
import java.util.List;
import java.util.SortedMap;
import org.threeten.bp.LocalDate;
import org.threeten.bp.Period;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSortedMap;
import com.google.common.primitives.Doubles;
import com.opengamma.analytics.financial.credit.isdastandardmodel.ISDACompliantYieldCurve;
import com.opengamma.analytics.financial.credit.isdastandardmodel.ISDACompliantYieldCurveBuild;
import com.opengamma.analytics.financial.credit.isdastandardmodel.ISDAInstrumentTypes;
import com.opengamma.financial.analytics.isda.credit.YieldCurveData;
import com.opengamma.financial.convention.businessday.BusinessDayConventions;
import com.opengamma.financial.convention.calendar.MondayToFridayCalendar;
import com.opengamma.financial.convention.daycount.DayCounts;
import com.opengamma.util.money.Currency;
import com.opengamma.util.time.Tenor;
/**
* Helper class to produce standard objects for credit testing.
*
* Objects here are based on those in /sesame-function/src/test/resources/credit/YC Test Data.xls
*/
public final class CreditCurveCalibrationSampleData {
private static final LocalDate VALUATION_DATE = LocalDate.of(2014, 3, 27);
private static final LocalDate SPOT_DATE = LocalDate.of(2014, 4, 1);
private static int MONEY_MARKET_INSTS = 6;
private static List<Period> TENORS = ImmutableList.of(Period.ofMonths(1),
Period.ofMonths(2),
Period.ofMonths(3),
Period.ofMonths(6),
Period.ofMonths(9),
Period.ofYears(1),
Period.ofYears(2),
Period.ofYears(3),
Period.ofYears(4),
Period.ofYears(5),
Period.ofYears(6),
Period.ofYears(7),
Period.ofYears(8),
Period.ofYears(9),
Period.ofYears(10),
Period.ofYears(11),
Period.ofYears(12),
Period.ofYears(15),
Period.ofYears(20),
Period.ofYears(25),
Period.ofYears(30));
private static List<Double> RATES = ImmutableList.of(0.00445,
0.009488,
0.012337,
0.017762,
0.01935,
0.020838,
0.01652,
0.02018,
0.023033,
0.02525,
0.02696,
0.02825,
0.02931,
0.03017,
0.03092,
0.0316,
0.03231,
0.03367,
0.03419,
0.03411,
0.03412);
private CreditCurveCalibrationSampleData() {}
public static ISDACompliantYieldCurve createYieldCurve() {
ISDAInstrumentTypes[] instrumentTypes = new ISDAInstrumentTypes[TENORS.size()];
Arrays.fill(instrumentTypes, 0, MONEY_MARKET_INSTS, ISDAInstrumentTypes.MoneyMarket);
Arrays.fill(instrumentTypes, MONEY_MARKET_INSTS, TENORS.size(), ISDAInstrumentTypes.Swap);
ISDACompliantYieldCurveBuild builder = new ISDACompliantYieldCurveBuild(
VALUATION_DATE,
SPOT_DATE,
instrumentTypes,
TENORS.toArray(new Period[TENORS.size()]),
DayCounts.ACT_360,
DayCounts.THIRTY_360,
Period.ofYears(1),
DayCounts.ACT_365,
BusinessDayConventions.MODIFIED_FOLLOWING,
new MondayToFridayCalendar("test")
);
return builder.build(Doubles.toArray(RATES));
}
public static YieldCurveData createYieldCurveData() {
SortedMap<Tenor, Double> cashData = ImmutableSortedMap.<Tenor, Double>naturalOrder()
.put(Tenor.ONE_MONTH, 0.00445)
.put(Tenor.TWO_MONTHS, 0.009488)
.put(Tenor.THREE_MONTHS, 0.012337)
.put(Tenor.SIX_MONTHS, 0.017762)
.put(Tenor.NINE_MONTHS, 0.01935)
.put(Tenor.ONE_YEAR, 0.020838)
.build();
SortedMap<Tenor, Double> swapData = ImmutableSortedMap.<Tenor, Double>naturalOrder()
.put(Tenor.TWO_YEARS, 0.01652)
.put(Tenor.THREE_YEARS, 0.02018)
.put(Tenor.FOUR_YEARS, 0.023033)
.put(Tenor.FIVE_YEARS, 0.02525)
.put(Tenor.SIX_YEARS, 0.02696)
.put(Tenor.SEVEN_YEARS, 0.02825)
.put(Tenor.EIGHT_YEARS, 0.02931)
.put(Tenor.NINE_YEARS, 0.03017)
.put(Tenor.TEN_YEARS, 0.03092)
.put(Tenor.ofYears(11), 0.0316)
.put(Tenor.ofYears(12), 0.03231)
.put(Tenor.ofYears(15), 0.03367)
.put(Tenor.ofYears(20), 0.03419)
.put(Tenor.ofYears(25), 0.03411)
.put(Tenor.ofYears(30), 0.03412)
.build();
return YieldCurveData.builder()
.cashData(cashData)
.swapData(swapData)
.cashDayCount(DayCounts.ACT_360)
.currency(Currency.USD)
.curveBusinessDayConvention(BusinessDayConventions.MODIFIED_FOLLOWING)
.curveDayCount(DayCounts.ACT_365)
.regionId(null) //weekend only calendar
.spotDate(SPOT_DATE)
.swapDayCount(DayCounts.THIRTY_360)
.swapFixedLegInterval(Tenor.ONE_YEAR)
.build();
}
}