/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.convention.initializer; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.DEPOSIT; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.DEPOSIT_ON; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.FIXED_LEG; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.FRA; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.FX_FORWARD; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.FX_SPOT; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.IBOR_LEG; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.IMM; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.IRS_IBOR_LEG; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.LIBOR; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.MONTHLY; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.MONTHLY_IMM_DATES; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.OIS_ON_LEG; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.ON_CMP_LEG; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.OVERNIGHT; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.PAY_LAG; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.QUARTERLY; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.QUARTERLY_IMM_DATES; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.SCHEME_NAME; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.SERIAL; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.STIR_FUTURES; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.SWAP; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.TENOR_STR_12M; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.TENOR_STR_1M; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.TENOR_STR_1Y; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.TENOR_STR_3M; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.TENOR_STR_6M; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.getConventionName; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.getIds; import org.threeten.bp.LocalTime; import com.opengamma.analytics.math.interpolation.Interpolator1DFactory; import com.opengamma.core.id.ExternalSchemes; import com.opengamma.financial.convention.DepositConvention; import com.opengamma.financial.convention.FXForwardAndSwapConvention; import com.opengamma.financial.convention.FXSpotConvention; import com.opengamma.financial.convention.IborIndexConvention; import com.opengamma.financial.convention.InterestRateFutureConvention; import com.opengamma.financial.convention.OISLegConvention; import com.opengamma.financial.convention.ONCompoundedLegRollDateConvention; import com.opengamma.financial.convention.OvernightIndexConvention; import com.opengamma.financial.convention.RollDateFRAConvention; import com.opengamma.financial.convention.RollDateSwapConvention; import com.opengamma.financial.convention.StubType; import com.opengamma.financial.convention.SwapFixedLegConvention; import com.opengamma.financial.convention.VanillaIborLegConvention; import com.opengamma.financial.convention.VanillaIborLegRollDateConvention; import com.opengamma.financial.convention.businessday.BusinessDayConvention; import com.opengamma.financial.convention.businessday.BusinessDayConventions; import com.opengamma.financial.convention.daycount.DayCount; import com.opengamma.financial.convention.daycount.DayCounts; import com.opengamma.financial.convention.expirycalc.ExchangeTradedInstrumentExpiryCalculator; import com.opengamma.financial.convention.expirycalc.IMMFutureAndFutureOptionMonthlyExpiryCalculator; import com.opengamma.financial.convention.expirycalc.IMMFutureAndFutureOptionQuarterlyExpiryCalculator; import com.opengamma.id.ExternalId; import com.opengamma.id.ExternalIdBundle; import com.opengamma.master.convention.ConventionMaster; import com.opengamma.util.money.Currency; import com.opengamma.util.time.Tenor; /** * The conventions for Europe. */ public class EUConventions extends ConventionMasterInitializer { /** Singleton. */ public static final ConventionMasterInitializer INSTANCE = new EUConventions(); /** OIS X-Ccy USD/EUR ON leg convention string **/ public static final String OIS_USD_EUR_ON_LEG = "EUR Overnight USD/EUR XCcy Leg"; /** The Euribor string **/ public static final String EURIBOR = "Euribor"; /** The Euribor string **/ public static final String EURIBOR_CONV = "EURIBOR Convention"; /** The IRS Euribor leg string **/ public static final String EURIBOR_LEG = EURIBOR + " Leg"; private static final BusinessDayConvention MODIFIED_FOLLOWING = BusinessDayConventions.MODIFIED_FOLLOWING; private static final BusinessDayConvention FOLLOWING = BusinessDayConventions.FOLLOWING; private static final DayCount ACT_360 = DayCounts.ACT_360; private static final DayCount THIRTY_U_360 = DayCounts.THIRTY_U_360; private static final ExternalId EU = ExternalSchemes.financialRegionId("EU"); private static final ExternalId USEU = ExternalSchemes.financialRegionId("US+EU"); /** * Restricted constructor. */ protected EUConventions() { } //------------------------------------------------------------------------- @Override public void init(final ConventionMaster master) { // Index (Overnight and Ibor-like) final String onIndexName = getConventionName(Currency.EUR, OVERNIGHT); final ExternalId onIndexId = ExternalId.of(SCHEME_NAME, onIndexName); final OvernightIndexConvention onIndex = new OvernightIndexConvention( onIndexName, getIds(Currency.EUR, OVERNIGHT), ACT_360, 0, Currency.EUR, EU); final String liborConventionName = getConventionName(Currency.EUR, LIBOR); final IborIndexConvention liborIndex = new IborIndexConvention( liborConventionName, getIds(Currency.EUR, LIBOR), ACT_360, MODIFIED_FOLLOWING, 2, true, Currency.EUR, LocalTime.of(11, 00), "EU", EU, EU, ""); final ExternalId liborConventionId = ExternalId.of(SCHEME_NAME, liborConventionName); final String euriborConventionName = getConventionName(Currency.EUR, EURIBOR); final IborIndexConvention euriborIndex = new IborIndexConvention( euriborConventionName, getIds(Currency.EUR, EURIBOR), ACT_360, MODIFIED_FOLLOWING, 2, true, Currency.EUR, LocalTime.of(11, 00), "EU", EU, EU, ""); final ExternalId euriborConventionId = ExternalId.of(SCHEME_NAME, euriborConventionName); // Deposit final String depositONConventionName = getConventionName(Currency.EUR, DEPOSIT_ON); final DepositConvention depositONConvention = new DepositConvention( depositONConventionName, getIds(Currency.EUR, DEPOSIT_ON), ACT_360, FOLLOWING, 0, false, Currency.EUR, EU); final String depositConventionName = getConventionName(Currency.EUR, DEPOSIT); final DepositConvention depositConvention = new DepositConvention(depositConventionName, getIds(Currency.EUR, DEPOSIT), ACT_360, FOLLOWING, 2, false, Currency.EUR, EU); // IMM FRA final String fraIMMQuarterlyConventionName = getConventionName(Currency.EUR, FRA + " " + IMM + " " + QUARTERLY); final RollDateFRAConvention immFRAQuarterlyConvention = new RollDateFRAConvention(fraIMMQuarterlyConventionName, ExternalIdBundle.of(ExternalId.of(SCHEME_NAME, fraIMMQuarterlyConventionName)), euriborConventionId, QUARTERLY_IMM_DATES); final String fraIMMMonthlyConventionName = getConventionName(Currency.EUR, FRA + " " + IMM + " " + MONTHLY); final RollDateFRAConvention immFRAMonthlyConvention = new RollDateFRAConvention(fraIMMMonthlyConventionName, ExternalIdBundle.of(ExternalId.of(SCHEME_NAME, fraIMMMonthlyConventionName)), euriborConventionId, MONTHLY_IMM_DATES); // Fixed legs final String oisFixedLegConventionName = getConventionName(Currency.EUR, TENOR_STR_1Y, PAY_LAG + FIXED_LEG); final SwapFixedLegConvention oisFixedLegConvention = new SwapFixedLegConvention( oisFixedLegConventionName, getIds(Currency.EUR, TENOR_STR_1Y, PAY_LAG + FIXED_LEG), Tenor.ONE_YEAR, ACT_360, MODIFIED_FOLLOWING, Currency.EUR, EU, 2, true, StubType.SHORT_START, false, 2); final String irsFixedLegConventionName = getConventionName(Currency.EUR, TENOR_STR_1Y, FIXED_LEG); final SwapFixedLegConvention irsFixedLegConvention = new SwapFixedLegConvention( irsFixedLegConventionName, getIds(Currency.EUR, TENOR_STR_1Y, FIXED_LEG), Tenor.ONE_YEAR, THIRTY_U_360, MODIFIED_FOLLOWING, Currency.EUR, EU, 2, true, StubType.SHORT_START, false, 0); // ON compounded legs final String oisFloatLegConventionName = getConventionName(Currency.EUR, OIS_ON_LEG); final OISLegConvention oisFloatLegConvention = new OISLegConvention( oisFloatLegConventionName, getIds(Currency.EUR, OIS_ON_LEG), onIndexId, Tenor.ONE_YEAR, MODIFIED_FOLLOWING, 2, true, StubType.SHORT_START, false, 2); // ON compounded legs IMM dates final String legON3MIMMQConventionName = getConventionName(Currency.EUR, TENOR_STR_3M, ON_CMP_LEG + " " + IMM + " " + QUARTERLY); final ExternalId legON3MIMMQConventionId = ExternalId.of(SCHEME_NAME, legON3MIMMQConventionName); final ONCompoundedLegRollDateConvention legON3MIMMQConvention = new ONCompoundedLegRollDateConvention(legON3MIMMQConventionName, ExternalIdBundle.of(legON3MIMMQConventionId), onIndexId, Tenor.THREE_MONTHS, StubType.SHORT_START, false, 0); // Ibor legs final String irsLibor6MLegConventionName = getConventionName(Currency.EUR, TENOR_STR_6M, IBOR_LEG); final VanillaIborLegConvention irsLibor6MLegConvention = new VanillaIborLegConvention( irsLibor6MLegConventionName, getIds(Currency.EUR, TENOR_STR_6M, IBOR_LEG), liborConventionId, true, Interpolator1DFactory.LINEAR, Tenor.SIX_MONTHS, 2, true, StubType.NONE, false, 0); final String irsEuribor12MLegConventionName = getConventionName(Currency.EUR, TENOR_STR_12M, EURIBOR_LEG); final VanillaIborLegConvention irsEuribor12MLegConvention = new VanillaIborLegConvention( irsEuribor12MLegConventionName, getIds(Currency.EUR, TENOR_STR_12M, EURIBOR_LEG), euriborConventionId, true, Interpolator1DFactory.LINEAR, Tenor.TWELVE_MONTHS, 2, true, StubType.SHORT_START, false, 0); final String irsEuribor6MLegConventionName = getConventionName(Currency.EUR, TENOR_STR_6M, EURIBOR_LEG); final VanillaIborLegConvention irsEuribor6MLegConvention = new VanillaIborLegConvention( irsEuribor6MLegConventionName, getIds(Currency.EUR, TENOR_STR_6M, EURIBOR_LEG), euriborConventionId, true, Interpolator1DFactory.LINEAR, Tenor.SIX_MONTHS, 2, true, StubType.SHORT_START, false, 0); final String irsEuribor3MLegConventionName = getConventionName(Currency.EUR, TENOR_STR_3M, EURIBOR_LEG); final VanillaIborLegConvention irsEuribor3MLegConvention = new VanillaIborLegConvention( irsEuribor3MLegConventionName, getIds(Currency.EUR, TENOR_STR_3M, EURIBOR_LEG), euriborConventionId, true, Interpolator1DFactory.LINEAR, Tenor.THREE_MONTHS, 2, true, StubType.SHORT_START, false, 0); final String irsEuribor1MLegConventionName = getConventionName(Currency.EUR, TENOR_STR_1M, EURIBOR_LEG); final VanillaIborLegConvention irsEuribor1MLegConvention = new VanillaIborLegConvention( irsEuribor1MLegConventionName, getIds(Currency.EUR, TENOR_STR_1M, EURIBOR_LEG), euriborConventionId, true, Interpolator1DFactory.LINEAR, Tenor.ONE_MONTH, 2, true, StubType.SHORT_START, false, 0); // TODO: Remove - Note: Temporally used to retrieve underlying index convention. final String irsibor12MLegConventionName = getConventionName(Currency.EUR, TENOR_STR_12M, IRS_IBOR_LEG); final VanillaIborLegConvention irsIbor12MLegConvention = new VanillaIborLegConvention( irsibor12MLegConventionName, getIds(Currency.EUR, TENOR_STR_12M, IRS_IBOR_LEG), euriborConventionId, true, Interpolator1DFactory.LINEAR, Tenor.TWELVE_MONTHS, 2, true, StubType.SHORT_START, false, 0); final String irsibor6MLegConventionName = getConventionName(Currency.EUR, TENOR_STR_6M, IRS_IBOR_LEG); final VanillaIborLegConvention irsIbor6MLegConvention = new VanillaIborLegConvention( irsibor6MLegConventionName, getIds(Currency.EUR, TENOR_STR_6M, IRS_IBOR_LEG), euriborConventionId, true, Interpolator1DFactory.LINEAR, Tenor.SIX_MONTHS, 2, true, StubType.SHORT_START, false, 0); final String irsibor3MLegConventionName = getConventionName(Currency.EUR, TENOR_STR_3M, IRS_IBOR_LEG); final VanillaIborLegConvention irsIbor3MLegConvention = new VanillaIborLegConvention( irsibor3MLegConventionName, getIds(Currency.EUR, TENOR_STR_3M, IRS_IBOR_LEG), euriborConventionId, true, Interpolator1DFactory.LINEAR, Tenor.THREE_MONTHS, 2, true, StubType.SHORT_START, false, 0); final String irsibor1MLegConventionName = getConventionName(Currency.EUR, TENOR_STR_1M, IRS_IBOR_LEG); final VanillaIborLegConvention irsIbor1MLegConvention = new VanillaIborLegConvention( irsibor1MLegConventionName, getIds(Currency.EUR, TENOR_STR_1M, IRS_IBOR_LEG), euriborConventionId, true, Interpolator1DFactory.LINEAR, Tenor.ONE_MONTH, 2, true, StubType.SHORT_START, false, 0); // TODO: Remove - Note: Temporally used to retrieve underlying leg convention. // final String fixedLegConverterConventionName = getConventionName(Currency.EUR, TENOR_STR_1Y, FIXED_LEG); // final SwapFixedLegConvention irsFixedLegConvention = new SwapFixedLegConvention( // irsFixedLegConventionName, getIds(Currency.EUR, TENOR_STR_1Y, FIXED_LEG), // Tenor.ONE_YEAR, THIRTY_U_360, MODIFIED_FOLLOWING, Currency.EUR, EU, 2, true, StubType.SHORT_START, false, 0); // Ibor legs - IMM final String legIbor1MIMMQConventionName = getConventionName(Currency.EUR, TENOR_STR_1M, IBOR_LEG + " " + IMM + " " + QUARTERLY); final ExternalId legIbor1MIMMQConventionId = ExternalId.of(SCHEME_NAME, legIbor1MIMMQConventionName); final VanillaIborLegRollDateConvention legIbor1MIMMQConvention = new VanillaIborLegRollDateConvention(legIbor1MIMMQConventionName, ExternalIdBundle.of(legIbor1MIMMQConventionId), euriborConventionId, true, Tenor.ONE_MONTH, StubType.SHORT_START, false, 0); final String legIbor3MIMMQConventionName = getConventionName(Currency.EUR, TENOR_STR_3M, IBOR_LEG + " " + IMM + " " + QUARTERLY); final ExternalId legIbor3MIMMQConventionId = ExternalId.of(SCHEME_NAME, legIbor3MIMMQConventionName); final VanillaIborLegRollDateConvention legIbor3MIMMQConvention = new VanillaIborLegRollDateConvention(legIbor3MIMMQConventionName, ExternalIdBundle.of(legIbor3MIMMQConventionId), euriborConventionId, true, Tenor.THREE_MONTHS, StubType.SHORT_START, false, 0); final String legIbor6MIMMQConventionName = getConventionName(Currency.EUR, TENOR_STR_6M, IBOR_LEG + " " + IMM + " " + QUARTERLY); final ExternalId legIbor6MIMMQConventionId = ExternalId.of(SCHEME_NAME, legIbor6MIMMQConventionName); final VanillaIborLegRollDateConvention legIbor6MIMMQConvention = new VanillaIborLegRollDateConvention(legIbor6MIMMQConventionName, ExternalIdBundle.of(legIbor6MIMMQConventionId), euriborConventionId, true, Tenor.SIX_MONTHS, StubType.SHORT_START, false, 0); // Swap final String bsO3QIMMConventionName = getConventionName(Currency.EUR, SWAP + " " + OVERNIGHT + TENOR_STR_3M + EURIBOR + TENOR_STR_3M + " " + IMM + " " + QUARTERLY); final ExternalId bsO3QIMMConventionId = ExternalId.of(SCHEME_NAME, bsO3QIMMConventionName); final RollDateSwapConvention bsO3QIMMConvention = new RollDateSwapConvention(bsO3QIMMConventionName, ExternalIdBundle.of(bsO3QIMMConventionId), legON3MIMMQConventionId, legIbor3MIMMQConventionId, QUARTERLY_IMM_DATES); final String bs13QIMMConventionName = getConventionName(Currency.EUR, SWAP + " " + EURIBOR + TENOR_STR_1M + EURIBOR + TENOR_STR_3M + " " + IMM + " " + QUARTERLY); final ExternalId bs13QIMMConventionId = ExternalId.of(SCHEME_NAME, bs13QIMMConventionName); final RollDateSwapConvention bs13QIMMConvention = new RollDateSwapConvention(bs13QIMMConventionName, ExternalIdBundle.of(bs13QIMMConventionId), legIbor1MIMMQConventionId, legIbor3MIMMQConventionId, QUARTERLY_IMM_DATES); final String bs36QIMMConventionName = getConventionName(Currency.EUR, SWAP + " " + EURIBOR + TENOR_STR_3M + EURIBOR + TENOR_STR_6M + " " + IMM + " " + QUARTERLY); final ExternalId bs36QIMMConventionId = ExternalId.of(SCHEME_NAME, bs36QIMMConventionName); final RollDateSwapConvention bs36QIMMConvention = new RollDateSwapConvention(bs36QIMMConventionName, ExternalIdBundle.of(bs36QIMMConventionId), legIbor3MIMMQConventionId, legIbor6MIMMQConventionId, QUARTERLY_IMM_DATES); // Futures final String quarterlySTIRFutureConventionName = getConventionName(Currency.EUR, STIR_FUTURES + QUARTERLY); final InterestRateFutureConvention quarterlySTIRFutureConvention = new InterestRateFutureConvention( quarterlySTIRFutureConventionName, ExternalIdBundle.of(ExternalId.of(SCHEME_NAME, quarterlySTIRFutureConventionName)), ExternalId.of(ExchangeTradedInstrumentExpiryCalculator.SCHEME, IMMFutureAndFutureOptionQuarterlyExpiryCalculator.NAME), EU, euriborConventionId); final String serialFutureConventionName = getConventionName(Currency.EUR, STIR_FUTURES + SERIAL); final InterestRateFutureConvention serialSTIRFutureConvention = new InterestRateFutureConvention( serialFutureConventionName, ExternalIdBundle.of(ExternalId.of(SCHEME_NAME, serialFutureConventionName)), ExternalId.of(ExchangeTradedInstrumentExpiryCalculator.SCHEME, IMMFutureAndFutureOptionMonthlyExpiryCalculator.NAME), EU, euriborConventionId); // Forex final String fxSpotEURUSDName = FX_SPOT + " EUR/USD"; final FXSpotConvention fxSpotEURUSD = new FXSpotConvention(fxSpotEURUSDName, ExternalIdBundle.of(ExternalId.of(SCHEME_NAME, fxSpotEURUSDName)), 2, USEU); final String fxFwdEURUSDName = FX_FORWARD + " EUR/USD"; final FXForwardAndSwapConvention fxForwardEURUSD = new FXForwardAndSwapConvention( fxFwdEURUSDName, ExternalIdBundle.of(ExternalId.of(SCHEME_NAME, fxFwdEURUSDName)), ExternalId.of(SCHEME_NAME, fxSpotEURUSDName), FOLLOWING, false, USEU); // X-Ccy OIS final OISLegConvention oisXCcyUSDLegConvention = new OISLegConvention( OIS_USD_EUR_ON_LEG, getIds(OIS_USD_EUR_ON_LEG), onIndexId, Tenor.THREE_MONTHS, MODIFIED_FOLLOWING, 2, true, StubType.NONE, false, 2); // Convention add addConvention(master, onIndex); addConvention(master, liborIndex); addConvention(master, euriborIndex); addConvention(master, depositONConvention); addConvention(master, depositConvention); addConvention(master, immFRAQuarterlyConvention); addConvention(master, immFRAMonthlyConvention); addConvention(master, oisFixedLegConvention); addConvention(master, oisFloatLegConvention); addConvention(master, legON3MIMMQConvention); addConvention(master, irsFixedLegConvention); addConvention(master, irsLibor6MLegConvention); addConvention(master, irsEuribor12MLegConvention); addConvention(master, irsEuribor6MLegConvention); addConvention(master, irsEuribor3MLegConvention); addConvention(master, irsEuribor1MLegConvention); addConvention(master, irsIbor12MLegConvention); addConvention(master, irsIbor6MLegConvention); addConvention(master, irsIbor3MLegConvention); addConvention(master, irsIbor1MLegConvention); addConvention(master, legIbor1MIMMQConvention); addConvention(master, legIbor3MIMMQConvention); addConvention(master, legIbor6MIMMQConvention); addConvention(master, bsO3QIMMConvention); addConvention(master, bs13QIMMConvention); addConvention(master, bs36QIMMConvention); addConvention(master, quarterlySTIRFutureConvention); addConvention(master, serialSTIRFutureConvention); addConvention(master, fxSpotEURUSD); addConvention(master, fxForwardEURUSD); addConvention(master, oisXCcyUSDLegConvention); } }