/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.sesame.credit;
import static com.opengamma.sesame.config.ConfigBuilder.argument;
import static com.opengamma.sesame.config.ConfigBuilder.arguments;
import static com.opengamma.sesame.config.ConfigBuilder.config;
import static com.opengamma.sesame.config.ConfigBuilder.function;
import static com.opengamma.sesame.config.ConfigBuilder.implementations;
import java.math.BigDecimal;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import org.threeten.bp.LocalDate;
import org.threeten.bp.OffsetTime;
import org.threeten.bp.Period;
import org.threeten.bp.ZonedDateTime;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSortedMap;
import com.google.common.collect.Sets;
import com.opengamma.analytics.financial.credit.RestructuringClause;
import com.opengamma.analytics.financial.credit.isdastandardmodel.AccrualOnDefaultFormulae;
import com.opengamma.analytics.financial.credit.isdastandardmodel.PriceType;
import com.opengamma.analytics.financial.credit.isdastandardmodel.StubType;
import com.opengamma.core.holiday.HolidaySource;
import com.opengamma.core.holiday.impl.WeekendHolidaySource;
import com.opengamma.core.id.ExternalSchemes;
import com.opengamma.core.legalentity.SeniorityLevel;
import com.opengamma.core.link.ConventionLink;
import com.opengamma.core.link.SecurityLink;
import com.opengamma.core.position.Counterparty;
import com.opengamma.core.position.Trade;
import com.opengamma.core.position.impl.SimpleCounterparty;
import com.opengamma.core.position.impl.SimpleTrade;
import com.opengamma.core.region.impl.SimpleRegion;
import com.opengamma.financial.analytics.isda.credit.CdsQuote;
import com.opengamma.financial.analytics.isda.credit.CreditCurveData;
import com.opengamma.financial.analytics.isda.credit.CreditCurveDataKey;
import com.opengamma.financial.analytics.isda.credit.CreditCurveDataSnapshot;
import com.opengamma.financial.analytics.isda.credit.CreditDefaultSwapType;
import com.opengamma.financial.analytics.isda.credit.ParSpreadQuote;
import com.opengamma.financial.analytics.isda.credit.PointsUpFrontQuote;
import com.opengamma.financial.analytics.isda.credit.YieldCurveData;
import com.opengamma.financial.analytics.isda.credit.YieldCurveDataSnapshot;
import com.opengamma.financial.convention.IsdaCreditCurveConvention;
import com.opengamma.financial.convention.businessday.BusinessDayConventions;
import com.opengamma.financial.convention.daycount.DayCounts;
import com.opengamma.financial.convention.frequency.SimpleFrequency;
import com.opengamma.financial.security.cds.CDSIndexTerms;
import com.opengamma.financial.security.credit.IndexCDSDefinitionSecurity;
import com.opengamma.financial.security.credit.IndexCDSSecurity;
import com.opengamma.financial.security.credit.LegacyCDSSecurity;
import com.opengamma.financial.security.credit.StandardCDSSecurity;
import com.opengamma.financial.security.swap.InterestRateNotional;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.UniqueId;
import com.opengamma.master.region.RegionDocument;
import com.opengamma.master.region.RegionMaster;
import com.opengamma.master.region.impl.InMemoryRegionMaster;
import com.opengamma.master.region.impl.MasterRegionSource;
import com.opengamma.sesame.config.FunctionModelConfig;
import com.opengamma.sesame.credit.config.CreditCurveDataKeyMap;
import com.opengamma.sesame.credit.config.RestructuringSettings;
import com.opengamma.sesame.credit.converter.DefaultIndexCdsConverterFn;
import com.opengamma.sesame.credit.converter.DefaultLegacyCdsConverterFn;
import com.opengamma.sesame.credit.converter.DefaultStandardCdsConverterFn;
import com.opengamma.sesame.credit.converter.IndexCdsConverterFn;
import com.opengamma.sesame.credit.converter.LegacyCdsConverterFn;
import com.opengamma.sesame.credit.converter.StandardCdsConverterFn;
import com.opengamma.sesame.credit.curve.CreditCurveDataProviderFn;
import com.opengamma.sesame.credit.curve.DefaultCreditCurveDataProviderFn;
import com.opengamma.sesame.credit.curve.DefaultYieldCurveDataProviderFn;
import com.opengamma.sesame.credit.curve.YieldCurveDataProviderFn;
import com.opengamma.sesame.credit.market.CreditKeyMapperFn;
import com.opengamma.sesame.credit.market.DefaultCreditKeyMapperFn;
import com.opengamma.sesame.credit.market.DefaultIndexCdsMarketDataResolverFn;
import com.opengamma.sesame.credit.market.DefaultLegacyCdsMarketDataResolverFn;
import com.opengamma.sesame.credit.market.DefaultStandardCdsMarketDataResolverFn;
import com.opengamma.sesame.credit.market.IndexCdsMarketDataResolverFn;
import com.opengamma.sesame.credit.market.LegacyCdsMarketDataResolverFn;
import com.opengamma.sesame.credit.market.StandardCdsMarketDataResolverFn;
import com.opengamma.sesame.credit.measures.CreditCs01Fn;
import com.opengamma.sesame.credit.measures.CreditPvFn;
import com.opengamma.sesame.credit.measures.DefaultCreditBucketedCs01Fn;
import com.opengamma.sesame.credit.measures.DefaultCreditCs01Fn;
import com.opengamma.sesame.credit.measures.DefaultCreditPvFn;
import com.opengamma.sesame.marketdata.CreditCurveDataSnapshotId;
import com.opengamma.sesame.marketdata.IsdaYieldCurveDataSnapshotId;
import com.opengamma.sesame.marketdata.MarketDataEnvironment;
import com.opengamma.sesame.marketdata.MarketDataEnvironmentBuilder;
import com.opengamma.sesame.trade.IndexCDSTrade;
import com.opengamma.sesame.trade.LegacyCDSTrade;
import com.opengamma.sesame.trade.StandardCDSTrade;
import com.opengamma.util.money.Currency;
import com.opengamma.util.time.Tenor;
/**
* Sample credit data - curves, securities and mappings.
*/
public class CreditPricingSampleData {
private static final String PEPSICO_INC = "Pepsico Inc";
private static final String JCP = "JCP";
public static final String IG_INDEX_5Y = "CDX.NA.IG.23-V1 5Y";
public static final String IG_INDEX = "CDX.NA.IG.23-V1";
private static final String INDEX_NAME = "10M." + IG_INDEX;
private static final String SAMPLE_CREDIT_CURVE = "Sample Credit Curve";
private static final String SAMPLE_YIELD_CURVE = "Sample Yield Curve";
private static final SeniorityLevel SNRFOR = SeniorityLevel.SNRFOR;
private static final RestructuringClause XR = RestructuringClause.XR;
private static final Currency USD = Currency.USD;
private static final ExternalIdBundle SCDS_BUNDLE = ExternalIdBundle.of("Sample", PEPSICO_INC);
private static final ExternalIdBundle PUFSCDS_BUNDLE = ExternalIdBundle.of("Sample", JCP);
private static final ExternalIdBundle LCDS_BUNDLE = ExternalIdBundle.of("Sample", PEPSICO_INC);
private static final ExternalIdBundle CDX_BUNDLE = ExternalIdBundle.of("Sample", INDEX_NAME);
private static final ExternalIdBundle CDXD_BUNDLE = ExternalIdBundle.of("Sample", IG_INDEX);
private static final ExternalId REF_ID = ExternalId.of("SHORT-NAME", PEPSICO_INC);
private static final ExternalId PUF_REF_ID = ExternalId.of("SHORT-NAME", JCP);
private static final Set<ExternalId> USNY = Sets.newHashSet(ExternalId.of(ExternalSchemes.ISDA_HOLIDAY, "USNY"));
private static final ExternalId REGION_US = ExternalId.of("FINANCIAL_REGION", "US");
/**
* Create an instance of a Standard CDS with points up front
* @return StandardCDSSecurity
*/
public static StandardCDSTrade createPointsUpFrontStandardCDSSecurity() {
StandardCDSSecurity cds = new StandardCDSSecurity(
PUFSCDS_BUNDLE, //id
JCP, //name
LocalDate.of(2014, 10, 16), //trade date
LocalDate.of(2019, 12, 20), //maturity date
PUF_REF_ID, //reference id
new InterestRateNotional(USD, 1_000_000), //notional
true, //buy/sell
0.05, //coupon
SNRFOR); //seniority
Trade trade = new SimpleTrade(cds,
BigDecimal.ONE,
new SimpleCounterparty(ExternalId.of(Counterparty.DEFAULT_SCHEME, "CPARTY")),
LocalDate.now(),
OffsetTime.now());
return new StandardCDSTrade(trade);
}
/**
* Create an instance of a Standard CDS
* This StandardCDSSecurity is structured to create the same CDSAnalytic as the LegacyCDSSecurity below
* @return StandardCDSSecurity
*/
public static StandardCDSTrade createStandardCDSSecurity() {
StandardCDSSecurity cds = new StandardCDSSecurity(
SCDS_BUNDLE, //id
PEPSICO_INC, //name
LocalDate.of(2014, 10, 16), //trade date
LocalDate.of(2019, 12, 20), //maturity date
REF_ID, //reference id
new InterestRateNotional(USD, 1_000_000), //notional
true, //buy/sell
0.01, //coupon
SNRFOR); //seniority
Trade trade = new SimpleTrade(cds,
BigDecimal.ONE,
new SimpleCounterparty(ExternalId.of(Counterparty.DEFAULT_SCHEME, "CPARTY")),
LocalDate.now(),
OffsetTime.now());
return new StandardCDSTrade(trade);
}
/**
* Create an instance of a Legacy CDS
* This LegacyCDSSecurity is structured to create the same CDSAnalytic as the StandardCDSSecurity above
* @return LegacyCDSSecurity
*/
public static LegacyCDSTrade createLegacyCDSSecurity() {
LegacyCDSSecurity cds = new LegacyCDSSecurity(
LCDS_BUNDLE,
LocalDate.of(2014, 10, 16),
LocalDate.of(2014, 7, 16),
LocalDate.of(2019, 12, 20),
REF_ID,
new InterestRateNotional(Currency.USD, 1_000_000),
true,
0.01,
SNRFOR,
SimpleFrequency.QUARTERLY,
DayCounts.ACT_360,
BusinessDayConventions.FOLLOWING,
USNY,
XR,
new InterestRateNotional(USD, 1_000_000),
LocalDate.of(2019, 12, 20),
true);
Trade trade = new SimpleTrade(cds,
BigDecimal.ONE,
new SimpleCounterparty(ExternalId.of(Counterparty.DEFAULT_SCHEME, "CPARTY")),
LocalDate.now(),
OffsetTime.now());
return new LegacyCDSTrade(trade);
}
public static IndexCDSTrade createIndexCDSSecurity() {
return createIndexCDSSecurity(IG_INDEX_5Y);
}
public static IndexCDSTrade createMultiPointIndexCDSSecurity() {
return createIndexCDSSecurity(IG_INDEX);
}
private static IndexCDSTrade createIndexCDSSecurity(String definitionName) {
IndexCDSDefinitionSecurity definition =
new IndexCDSDefinitionSecurity(CDXD_BUNDLE, //id
definitionName, //name
LocalDate.of(2014, 9, 20), //start date
"V1", //version
"23", //series
"IG", //family
USD, //currency
0.4, //recovery rate
SimpleFrequency.QUARTERLY, //coupon frequency
0.01, //coupon
CDSIndexTerms.of(Tenor.FIVE_YEARS), //terms
USNY, //calendar
BusinessDayConventions.MODIFIED_FOLLOWING, //business day conventions
1d); //index factor
IndexCDSSecurity cds = new IndexCDSSecurity(
CDX_BUNDLE, //id
INDEX_NAME, //name
true, //buy/sell
SecurityLink.resolved(definition), //definition
LocalDate.of(2014, 10, 16), //trade date
LocalDate.of(2019, 12, 20), //maturity date
new InterestRateNotional(USD, 1_000_000)); //notional
Trade trade = new SimpleTrade(cds,
BigDecimal.ONE,
new SimpleCounterparty(ExternalId.of(Counterparty.DEFAULT_SCHEME, "CPARTY")),
LocalDate.now(),
OffsetTime.now());
return new IndexCDSTrade(trade);
}
public static CreditCurveDataSnapshotId getCreditCurveDataSnapshotId() {
return CreditCurveDataSnapshotId.of(SAMPLE_CREDIT_CURVE);
}
public static IsdaYieldCurveDataSnapshotId getYieldCurveDataId() {
return IsdaYieldCurveDataSnapshotId.of(SAMPLE_YIELD_CURVE);
}
public static MarketDataEnvironment getCreditMarketDataEnvironment(ZonedDateTime valuation) {
MarketDataEnvironmentBuilder builder = new MarketDataEnvironmentBuilder();
builder.add(getCreditCurveDataSnapshotId(), createCreditCurveDataSnapshot());
builder.add(getYieldCurveDataId(), createYieldCurveDataSnapshot());
builder.valuationTime(valuation);
return builder.build();
}
public static RestructuringSettings createRestructuringSettings() {
Map<Currency, RestructuringClause> mappings = ImmutableMap.of(USD, XR);
return RestructuringSettings.builder().restructuringMappings(mappings).build();
}
public static CreditCurveDataSnapshot createCreditCurveDataSnapshot() {
ImmutableMap.Builder<CreditCurveDataKey, CreditCurveData> builder = ImmutableMap.builder();
builder.put(curveCreditCurveDataKey(PEPSICO_INC), createSingleNameCreditCurveData());
builder.put(curveCreditCurveDataKey(JCP), createPUFSingleNameCreditCurveData());
builder.put(curveIndexCreditCurveDataKey(IG_INDEX_5Y), createIndexCreditCurveData());
builder.put(curveIndexCreditCurveDataKey(IG_INDEX), createMultiPointIndexCreditCurveData());
return CreditCurveDataSnapshot.builder().name(SAMPLE_CREDIT_CURVE).creditCurves(builder.build()).build();
}
public static YieldCurveDataSnapshot createYieldCurveDataSnapshot() {
Map<Currency, YieldCurveData> map = ImmutableMap.of(USD, createYieldCurveData());
return YieldCurveDataSnapshot.builder().name(SAMPLE_YIELD_CURVE).yieldCurves(map).build();
}
public static FunctionModelConfig createFunctionModelConfig() {
CreditCurveDataKeyMap configKeyMap = CreditCurveDataKeyMap.builder()
.securityCurveMappings(ImmutableMap.<CreditCurveDataKey, CreditCurveDataKey>of())
.build();
RestructuringSettings restructuringSettings = createRestructuringSettings();
return config(
arguments(
function(
DefaultCreditBucketedCs01Fn.class,
argument("accrualOnDefaultFormulae", AccrualOnDefaultFormulae.OrignalISDA)),
function(
DefaultCreditCs01Fn.class,
argument("accrualOnDefaultFormulae", AccrualOnDefaultFormulae.OrignalISDA)),
function(
DefaultCreditPvFn.class,
argument("priceType", PriceType.DIRTY),
argument("accrualOnDefaultFormulae", AccrualOnDefaultFormulae.OrignalISDA)),
function(
DefaultCreditKeyMapperFn.class,
argument("keyMap", configKeyMap)),
function(
DefaultStandardCdsMarketDataResolverFn.class,
argument("restructuringSettings", restructuringSettings)),
function(
DefaultCreditCurveDataProviderFn.class,
argument("creditCurveDataName", SAMPLE_CREDIT_CURVE)),
function(
DefaultYieldCurveDataProviderFn.class,
argument("yieldCurveDataName", SAMPLE_YIELD_CURVE))),
implementations(
CreditPvFn.class, DefaultCreditPvFn.class,
CreditCs01Fn.class, DefaultCreditCs01Fn.class,
IsdaCompliantYieldCurveFn.class, DefaultIsdaCompliantYieldCurveFn.class,
YieldCurveDataProviderFn.class, DefaultYieldCurveDataProviderFn.class,
CreditCurveDataProviderFn.class, DefaultCreditCurveDataProviderFn.class,
IsdaCompliantCreditCurveFn.class, StandardIsdaCompliantCreditCurveFn.class,
LegacyCdsConverterFn.class, DefaultLegacyCdsConverterFn.class,
IndexCdsConverterFn.class, DefaultIndexCdsConverterFn.class,
StandardCdsConverterFn.class, DefaultStandardCdsConverterFn.class,
StandardCdsMarketDataResolverFn.class, DefaultStandardCdsMarketDataResolverFn.class,
IndexCdsMarketDataResolverFn.class, DefaultIndexCdsMarketDataResolverFn.class,
LegacyCdsMarketDataResolverFn.class, DefaultLegacyCdsMarketDataResolverFn.class,
CreditKeyMapperFn.class, DefaultCreditKeyMapperFn.class));
}
public static FunctionModelConfig createYCMappingFunctionModelConfig() {
CreditCurveDataKeyMap configKeyMap = CreditCurveDataKeyMap.builder()
.securityCurveMappings(ImmutableMap.<CreditCurveDataKey, CreditCurveDataKey>of())
.build();
RestructuringSettings restructuringSettings = createRestructuringSettings();
return config(
arguments(
function(
DefaultCreditCs01Fn.class,
argument("accrualOnDefaultFormulae", AccrualOnDefaultFormulae.OrignalISDA)),
function(
DefaultCreditPvFn.class,
argument("priceType", PriceType.CLEAN),
argument("accrualOnDefaultFormulae", AccrualOnDefaultFormulae.OrignalISDA)),
function(
DefaultCreditKeyMapperFn.class,
argument("keyMap", configKeyMap)),
function(
DefaultStandardCdsMarketDataResolverFn.class,
argument("restructuringSettings", restructuringSettings)),
function(
MappingIsdaCompliantYieldCurveFn.class,
argument("multicurveName", "Curve Bundle")),
function(
DefaultCreditCurveDataProviderFn.class,
argument("creditCurveDataName", SAMPLE_CREDIT_CURVE))),
implementations(
CreditPvFn.class, DefaultCreditPvFn.class,
CreditCs01Fn.class, DefaultCreditCs01Fn.class,
IsdaCompliantYieldCurveFn.class, MappingIsdaCompliantYieldCurveFn.class,
CreditCurveDataProviderFn.class, DefaultCreditCurveDataProviderFn.class,
IsdaCompliantCreditCurveFn.class, StandardIsdaCompliantCreditCurveFn.class,
LegacyCdsConverterFn.class, DefaultLegacyCdsConverterFn.class,
IndexCdsConverterFn.class, DefaultIndexCdsConverterFn.class,
StandardCdsConverterFn.class, DefaultStandardCdsConverterFn.class,
StandardCdsMarketDataResolverFn.class, DefaultStandardCdsMarketDataResolverFn.class,
IndexCdsMarketDataResolverFn.class, DefaultIndexCdsMarketDataResolverFn.class,
LegacyCdsMarketDataResolverFn.class, DefaultLegacyCdsMarketDataResolverFn.class,
CreditKeyMapperFn.class, DefaultCreditKeyMapperFn.class));
}
private static YieldCurveData createYieldCurveData() {
SortedMap<Tenor, Double> cashData = ImmutableSortedMap.<Tenor, Double>naturalOrder()
.put(Tenor.ONE_MONTH, 0.001535)
.put(Tenor.TWO_MONTHS, 0.001954)
.put(Tenor.THREE_MONTHS, 0.002281)
.put(Tenor.SIX_MONTHS, 0.003217)
.put(Tenor.ONE_YEAR, 0.005444)
.build();
SortedMap<Tenor, Double> swapData = ImmutableSortedMap.<Tenor, Double>naturalOrder()
.put(Tenor.TWO_YEARS,0.005905)
.put(Tenor.THREE_YEARS,0.009555)
.put(Tenor.FOUR_YEARS,0.012775)
.put(Tenor.FIVE_YEARS,0.015395)
.put(Tenor.SIX_YEARS,0.017445)
.put(Tenor.SEVEN_YEARS,0.019205)
.put(Tenor.EIGHT_YEARS,0.02066)
.put(Tenor.NINE_YEARS,0.021885)
.put(Tenor.TEN_YEARS,0.02294)
.put(Tenor.ofYears(12),0.024615)
.put(Tenor.ofYears(15),0.0263)
.put(Tenor.ofYears(20),0.02795)
.put(Tenor.ofYears(25),0.028715)
.put(Tenor.ofYears(30),0.02916)
.build();
return YieldCurveData.builder()
.currency(USD)
.curveDayCount(DayCounts.ACT_365)
.curveBusinessDayConvention(BusinessDayConventions.MODIFIED_FOLLOWING)
.cashDayCount(DayCounts.ACT_360)
.swapDayCount(DayCounts.THIRTY_U_360)
.spotDate(LocalDate.of(2014, 10, 20))
.regionId(REGION_US)
.swapFixedLegInterval(Tenor.SIX_MONTHS)
.cashData(cashData)
.swapData(swapData)
.build();
}
private static CreditCurveDataKey curveCreditCurveDataKey(String code) {
return CreditCurveDataKey.builder()
.currency(USD)
.curveName(code)
.seniority(SNRFOR)
.restructuring(XR)
.cdsType(CreditDefaultSwapType.SINGLE_NAME) // not needed as key defaults to SINGLE_NAME
.build();
}
private static CreditCurveDataKey curveIndexCreditCurveDataKey(String code) {
return CreditCurveDataKey.builder()
.currency(USD)
.curveName(code)
.cdsType(CreditDefaultSwapType.INDEX)
.build();
}
public static IsdaCreditCurveConvention createUsdIsdaCreditCurveConvention() {
return createIsdaCreditCurveConvention(REGION_US);
}
private static IsdaCreditCurveConvention createIsdaCreditCurveConvention(ExternalId region) {
IsdaCreditCurveConvention convention = new IsdaCreditCurveConvention();
convention.setName("USD Isda Credit Curve Convention");
convention.setStepIn(1);
convention.setCashSettle(3);
convention.setPayAccOnDefault(true);
convention.setCouponInterval(Period.ofMonths(3));
convention.setStubType(StubType.FRONTSHORT);
convention.setBusinessDayConvention(BusinessDayConventions.FOLLOWING);
convention.setRegionId(region);
convention.setAccrualDayCount(DayCounts.ACT_360);
convention.setCurveDayCount(DayCounts.ACT_365);
convention.setProtectFromStartOfDay(true);
return convention;
}
public static CreditCurveData createSingleNameCreditCurveData() {
ConventionLink<IsdaCreditCurveConvention> conventionLink = ConventionLink.resolved(
createUsdIsdaCreditCurveConvention());
SortedMap<Tenor, CdsQuote> spreadData = ImmutableSortedMap.<Tenor, CdsQuote>naturalOrder()
.put(Tenor.SIX_MONTHS, ParSpreadQuote.from(0.0028))
.put(Tenor.ONE_YEAR, ParSpreadQuote.from(0.0028))
.put(Tenor.TWO_YEARS, ParSpreadQuote.from(0.0028))
.put(Tenor.THREE_YEARS, ParSpreadQuote.from(0.0028))
.put(Tenor.FOUR_YEARS, ParSpreadQuote.from(0.0028))
.put(Tenor.FIVE_YEARS, ParSpreadQuote.from(0.0028))
.put(Tenor.SEVEN_YEARS, ParSpreadQuote.from(0.0028))
.put(Tenor.TEN_YEARS, ParSpreadQuote.from(0.0028))
.put(Tenor.ofYears(20), ParSpreadQuote.from(0.0028))
.put(Tenor.ofYears(30), ParSpreadQuote.from(0.0028))
.build();
return CreditCurveData.builder()
.curveConventionLink(conventionLink)
.recoveryRate(0.4)
.cdsQuotes(spreadData)
.build();
}
public static CreditCurveData createPUFSingleNameCreditCurveData() {
ConventionLink<IsdaCreditCurveConvention> conventionLink = ConventionLink.resolved(
createUsdIsdaCreditCurveConvention());
SortedMap<Tenor, CdsQuote> spreadData = ImmutableSortedMap.<Tenor, CdsQuote>naturalOrder()
.put(Tenor.FIVE_YEARS, PointsUpFrontQuote.from(0.05, -0.01))
.build();
return CreditCurveData.builder()
.curveConventionLink(conventionLink)
.recoveryRate(0.4)
.cdsQuotes(spreadData)
.build();
}
private static CreditCurveData createIndexCreditCurveData() {
ConventionLink<IsdaCreditCurveConvention> conventionLink = ConventionLink.resolved(
createUsdIsdaCreditCurveConvention());
SortedMap<Tenor, CdsQuote> spreadData = ImmutableSortedMap.<Tenor, CdsQuote>naturalOrder()
.put(Tenor.FIVE_YEARS, ParSpreadQuote.from(0.006))
.build();
return CreditCurveData.builder()
.curveConventionLink(conventionLink)
.recoveryRate(0.4)
.cdsQuotes(spreadData)
.build();
}
private static CreditCurveData createMultiPointIndexCreditCurveData() {
ConventionLink<IsdaCreditCurveConvention> conventionLink = ConventionLink.resolved(
createUsdIsdaCreditCurveConvention());
SortedMap<Tenor, CdsQuote> spreadData = ImmutableSortedMap.<Tenor, CdsQuote>naturalOrder()
.put(Tenor.TWO_YEARS, ParSpreadQuote.from(0.006))
.put(Tenor.THREE_YEARS, ParSpreadQuote.from(0.006))
.put(Tenor.FIVE_YEARS, ParSpreadQuote.from(0.006))
.put(Tenor.TEN_YEARS, ParSpreadQuote.from(0.006))
.build();
return CreditCurveData.builder()
.curveConventionLink(conventionLink)
.recoveryRate(0.4)
.cdsQuotes(spreadData)
.build();
}
public static ImmutableMap<Class<?>, Object> generateBaseComponents() {
ImmutableMap.Builder<Class<?>, Object> builder = ImmutableMap.builder();
HolidaySource holidaySource = new WeekendHolidaySource();
builder.put(holidaySource.getClass().getInterfaces()[0], holidaySource);
RegionMaster regionMaster = new InMemoryRegionMaster();
SimpleRegion regionUs = new SimpleRegion();
regionUs.addExternalId(ExternalSchemes.financialRegionId("US"));
regionUs.addExternalId(ExternalSchemes.currencyRegionId(USD));
regionUs.setUniqueId(UniqueId.of("REGION", "1"));
regionMaster.add(new RegionDocument(regionUs));
MasterRegionSource regionSource = new MasterRegionSource(regionMaster);
builder.put(regionSource.getClass().getInterfaces()[0], regionSource);
return builder.build();
}
}