/** * Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.pricer.datasets; import static com.opengamma.strata.basics.currency.Currency.EUR; import static com.opengamma.strata.basics.currency.Currency.USD; import static com.opengamma.strata.basics.date.DayCounts.ACT_ACT_ISDA; import java.time.LocalDate; import com.google.common.collect.ImmutableMap; import com.opengamma.strata.basics.StandardId; import com.opengamma.strata.collect.array.DoubleArray; import com.opengamma.strata.collect.tuple.Pair; import com.opengamma.strata.market.curve.CurveMetadata; import com.opengamma.strata.market.curve.CurveName; import com.opengamma.strata.market.curve.Curves; import com.opengamma.strata.market.curve.InterpolatedNodalCurve; import com.opengamma.strata.market.curve.interpolator.CurveInterpolator; import com.opengamma.strata.market.curve.interpolator.CurveInterpolators; import com.opengamma.strata.pricer.DiscountFactors; import com.opengamma.strata.pricer.SimpleDiscountFactors; import com.opengamma.strata.pricer.ZeroRateDiscountFactors; import com.opengamma.strata.pricer.bond.ImmutableLegalEntityDiscountingProvider; import com.opengamma.strata.pricer.bond.LegalEntityDiscountingProvider; import com.opengamma.strata.pricer.bond.LegalEntityGroup; import com.opengamma.strata.pricer.bond.RepoGroup; /** * LegalEntityDiscountingProvider data sets for testing. */ public class LegalEntityDiscountingProviderDataSets { private static final CurveInterpolator INTERPOLATOR = CurveInterpolators.LINEAR; // ===== issuer curve + repo curve in USD ===== private static final LocalDate VAL_DATE_USD = LocalDate.of(2011, 6, 20); private static final StandardId ISSUER_ID_USD = StandardId.of("OG-Ticker", "GOVT1"); private static final CurveName NAME_REPO_USD = CurveName.of("TestRepoCurve"); private static final CurveName NAME_ISSUER_USD = CurveName.of("TestIssuerCurve"); /** time data for repo rate curve */ public static final DoubleArray REPO_TIME_USD = DoubleArray.of(0.0, 0.5, 1.0, 2.0, 5.0, 10.0); /** zero rate data for repo rate curve */ public static final DoubleArray REPO_RATE_USD = DoubleArray.of(0.0120, 0.0120, 0.0120, 0.0140, 0.0140, 0.0140); /** discount factor data for repo rate curve */ public static final DoubleArray REPO_FACTOR_USD = DoubleArray.of(1.0, 0.9940, 0.9881, 0.9724, 0.9324, 0.8694); /** meta data of repo zero rate curve*/ public static final CurveMetadata META_ZERO_REPO_USD = Curves.zeroRates(NAME_REPO_USD, ACT_ACT_ISDA); /** meta data of repo discount factor curve */ public static final CurveMetadata META_SIMPLE_REPO_USD = Curves.discountFactors(NAME_REPO_USD, ACT_ACT_ISDA); /** time data for issuer curve */ public static final DoubleArray ISSUER_TIME_USD = DoubleArray.of(0.0, 0.5, 1.0, 2.0, 5.0, 10.0); /** zero rate data for issuer curve */ public static final DoubleArray ISSUER_RATE_USD = DoubleArray.of(0.0100, 0.0100, 0.0100, 0.0120, 0.0120, 0.0120); /** discount factor data for issuer curve */ public static final DoubleArray ISSUER_FACTOR_USD = DoubleArray.of(1.0, 0.9950, 0.9900, 0.9763, 0.9418, 0.8869); /** meta data of issuer zero rate curve*/ public static final CurveMetadata META_ZERO_ISSUER_USD = Curves.zeroRates(NAME_ISSUER_USD, ACT_ACT_ISDA); /** meta data of issuer discount factor curve */ public static final CurveMetadata META_SIMPLE_ISSUER_USD = Curves.discountFactors(NAME_ISSUER_USD, ACT_ACT_ISDA); private static final RepoGroup GROUP_REPO_USD = RepoGroup.of("GOVT1 BONDS"); private static final LegalEntityGroup GROUP_ISSUER_USD = LegalEntityGroup.of("GOVT1"); // zero rate curves private static final InterpolatedNodalCurve CURVE_ZERO_REPO_USD = InterpolatedNodalCurve.of(META_ZERO_REPO_USD, REPO_TIME_USD, REPO_RATE_USD, INTERPOLATOR); private static final DiscountFactors DSC_FACTORS_ZERO_REPO_USD = ZeroRateDiscountFactors.of(USD, VAL_DATE_USD, CURVE_ZERO_REPO_USD); private static final InterpolatedNodalCurve CURVE_ZERO_ISSUER_USD = InterpolatedNodalCurve.of(META_ZERO_ISSUER_USD, ISSUER_TIME_USD, ISSUER_RATE_USD, INTERPOLATOR); private static final DiscountFactors DSC_FACTORS_ZERO_ISSUER_USD = ZeroRateDiscountFactors.of(USD, VAL_DATE_USD, CURVE_ZERO_ISSUER_USD); // discount factor curves private static final InterpolatedNodalCurve CURVE_SIMPLE_REPO = InterpolatedNodalCurve.of(META_SIMPLE_REPO_USD, REPO_TIME_USD, REPO_FACTOR_USD, INTERPOLATOR); private static final DiscountFactors DSC_FACTORS_SIMPLE_REPO = SimpleDiscountFactors.of(USD, VAL_DATE_USD, CURVE_SIMPLE_REPO); private static final InterpolatedNodalCurve CURVE_SIMPLE_ISSUER_USD = InterpolatedNodalCurve.of(META_SIMPLE_ISSUER_USD, ISSUER_TIME_USD, ISSUER_FACTOR_USD, INTERPOLATOR); private static final DiscountFactors DSC_FACTORS_SIMPLE_ISSUER_USD = SimpleDiscountFactors.of(USD, VAL_DATE_USD, CURVE_SIMPLE_ISSUER_USD); // ===== issuer curve + repo curve in EUR ===== private static final LocalDate VAL_DATE_EUR = LocalDate.of(2014, 3, 31); private static final StandardId ISSUER_ID_EUR = StandardId.of("OG-Ticker", "GOVT2"); private static final CurveName NAME_REPO_EUR = CurveName.of("TestRepoCurve2"); private static final CurveName NAME_ISSUER_EUR = CurveName.of("TestIssuerCurve2"); /** time data for repo rate curve */ public static final DoubleArray REPO_TIME_EUR = DoubleArray.of(0.0, 0.5, 1.0, 2.0, 5.0, 10.0); /** zero rate data for repo rate curve */ public static final DoubleArray REPO_RATE_EUR = DoubleArray.of(0.0150, 0.0125, 0.0150, 0.0175, 0.0150, 0.0150); /** meta data of repo zero rate curve*/ public static final CurveMetadata META_ZERO_REPO_EUR = Curves.zeroRates(NAME_REPO_EUR, ACT_ACT_ISDA); /** meta data of repo discount factor curve */ public static final CurveMetadata META_SIMPLE_REPO_EUR = Curves.discountFactors(NAME_REPO_EUR, ACT_ACT_ISDA); /** time data for issuer curve */ public static final DoubleArray ISSUER_TIME_EUR = DoubleArray.of(0.0, 0.5, 1.0, 2.0, 5.0, 10.0); /** zero rate data for issuer curve */ public static final DoubleArray ISSUER_RATE_EUR = DoubleArray.of(0.0250, 0.0225, 0.0250, 0.0275, 0.0250, 0.0250); /** meta data of issuer zero rate curve*/ public static final CurveMetadata META_ZERO_ISSUER_EUR = Curves.zeroRates(NAME_ISSUER_EUR, ACT_ACT_ISDA); /** meta data of issuer discount factor curve */ public static final CurveMetadata META_SIMPLE_ISSUER_EUR = Curves.discountFactors(NAME_ISSUER_EUR, ACT_ACT_ISDA); private static final RepoGroup GROUP_REPO_EUR = RepoGroup.of("GOVT2 BONDS"); private static final LegalEntityGroup GROUP_ISSUER_EUR = LegalEntityGroup.of("GOVT2"); // zero rate curves private static final InterpolatedNodalCurve CURVE_ZERO_REPO_EUR = InterpolatedNodalCurve.of(META_ZERO_REPO_EUR, REPO_TIME_EUR, REPO_RATE_EUR, INTERPOLATOR); private static final DiscountFactors DSC_FACTORS_ZERO_REPO_EUR = ZeroRateDiscountFactors.of(EUR, VAL_DATE_EUR, CURVE_ZERO_REPO_EUR); private static final InterpolatedNodalCurve CURVE_ZERO_ISSUER_EUR = InterpolatedNodalCurve.of(META_ZERO_ISSUER_EUR, ISSUER_TIME_EUR, ISSUER_RATE_EUR, INTERPOLATOR); private static final DiscountFactors DSC_FACTORS_ZERO_ISSUER_EUR = ZeroRateDiscountFactors.of(EUR, VAL_DATE_EUR, CURVE_ZERO_ISSUER_EUR); /** provider with zero rate curves, USD */ public static final LegalEntityDiscountingProvider ISSUER_REPO_ZERO = ImmutableLegalEntityDiscountingProvider.builder() .issuerCurves(ImmutableMap.of(Pair.of(GROUP_ISSUER_USD, USD), DSC_FACTORS_ZERO_ISSUER_USD)) .issuerCurveGroups(ImmutableMap.of(ISSUER_ID_USD, GROUP_ISSUER_USD)) .repoCurves(ImmutableMap.of(Pair.of(GROUP_REPO_USD, USD), DSC_FACTORS_ZERO_REPO_USD)) .repoCurveGroups(ImmutableMap.of(ISSUER_ID_USD, GROUP_REPO_USD)) .build(); /** provider with zero rate curves, EUR */ public static final LegalEntityDiscountingProvider ISSUER_REPO_ZERO_EUR = ImmutableLegalEntityDiscountingProvider.builder() .issuerCurves(ImmutableMap.of(Pair.of(GROUP_ISSUER_EUR, EUR), DSC_FACTORS_ZERO_ISSUER_EUR)) .issuerCurveGroups(ImmutableMap.of(ISSUER_ID_EUR, GROUP_ISSUER_EUR)) .repoCurves(ImmutableMap.of(Pair.of(GROUP_REPO_EUR, EUR), DSC_FACTORS_ZERO_REPO_EUR)) .repoCurveGroups(ImmutableMap.of(ISSUER_ID_EUR, GROUP_REPO_EUR)) .build(); /** provider with discount factor curve, USD */ public static final LegalEntityDiscountingProvider ISSUER_REPO_SIMPLE = ImmutableLegalEntityDiscountingProvider.builder() .issuerCurves(ImmutableMap.of(Pair.of(GROUP_ISSUER_USD, USD), DSC_FACTORS_SIMPLE_ISSUER_USD)) .issuerCurveGroups(ImmutableMap.of(ISSUER_ID_USD, GROUP_ISSUER_USD)) .repoCurves(ImmutableMap.of(Pair.of(GROUP_REPO_USD, USD), DSC_FACTORS_SIMPLE_REPO)) .repoCurveGroups(ImmutableMap.of(ISSUER_ID_USD, GROUP_REPO_USD)) .build(); }