/** * 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.IRS_IBOR_LEG; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.LIBOR; import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.LIBOR_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.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.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.IborIndexConvention; import com.opengamma.financial.convention.InterestRateFutureConvention; import com.opengamma.financial.convention.OISLegConvention; import com.opengamma.financial.convention.OvernightIndexConvention; import com.opengamma.financial.convention.StubType; import com.opengamma.financial.convention.SwapFixedLegConvention; import com.opengamma.financial.convention.VanillaIborLegConvention; 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 Great Britain. */ public class GBConventions extends ConventionMasterInitializer { /** Singleton. */ public static final ConventionMasterInitializer INSTANCE = new GBConventions(); private static final BusinessDayConvention MODIFIED_FOLLOWING = BusinessDayConventions.MODIFIED_FOLLOWING; private static final BusinessDayConvention FOLLOWING = BusinessDayConventions.FOLLOWING; private static final DayCount ACT_365 = DayCounts.ACT_365; private static final ExternalId GB = ExternalSchemes.financialRegionId("GB"); /** * Restricted constructor. */ protected GBConventions() { } //------------------------------------------------------------------------- @Override public void init(final ConventionMaster master) { addConventions(master); } protected void addConventions(final ConventionMaster master) { // Index (Overnight and Ibor-like) final String onIndexName = getConventionName(Currency.GBP, OVERNIGHT); final ExternalId onIndexId = ExternalId.of(SCHEME_NAME, onIndexName); final OvernightIndexConvention onIndex = new OvernightIndexConvention( onIndexName, getIds(Currency.GBP, OVERNIGHT), ACT_365, 0, Currency.GBP, GB); final String liborConventionName = getConventionName(Currency.GBP, LIBOR); final IborIndexConvention liborIndex = new IborIndexConvention( liborConventionName, getIds(Currency.GBP, LIBOR), ACT_365, MODIFIED_FOLLOWING, 0, true, Currency.GBP, LocalTime.of(11, 00), "GB", GB, GB, ""); final ExternalId liborConventionId = ExternalId.of(SCHEME_NAME, liborConventionName); // Deposit final String depositONConventionName = getConventionName(Currency.GBP, DEPOSIT_ON); final DepositConvention depositONConvention = new DepositConvention( depositONConventionName, getIds(Currency.GBP, DEPOSIT_ON), ACT_365, FOLLOWING, 0, false, Currency.GBP, GB); final String depositConventionName = getConventionName(Currency.GBP, DEPOSIT); final DepositConvention depositConvention = new DepositConvention(depositConventionName, getIds(Currency.GBP, DEPOSIT), ACT_365, MODIFIED_FOLLOWING, 0, true, Currency.GBP, GB); // Fixed legs final String oisFixedLegConventionName = getConventionName(Currency.GBP, TENOR_STR_1Y, PAY_LAG + FIXED_LEG); final SwapFixedLegConvention oisFixedLegConvention = new SwapFixedLegConvention( oisFixedLegConventionName, getIds(Currency.GBP, TENOR_STR_1Y, PAY_LAG + FIXED_LEG), Tenor.ONE_YEAR, ACT_365, MODIFIED_FOLLOWING, Currency.GBP, GB, 0, true, StubType.SHORT_START, false, 1); final String irsFixedLeg12MConventionName = getConventionName(Currency.GBP, TENOR_STR_1Y, FIXED_LEG); final SwapFixedLegConvention irsFixed12MLegConvention = new SwapFixedLegConvention( irsFixedLeg12MConventionName, getIds(Currency.GBP, TENOR_STR_1Y, FIXED_LEG), Tenor.ONE_YEAR, ACT_365, MODIFIED_FOLLOWING, Currency.GBP, GB, 0, true, StubType.SHORT_START, false, 0); final String irsFixedLeg6MConventionName = getConventionName(Currency.GBP, TENOR_STR_6M, FIXED_LEG); final SwapFixedLegConvention irsFixed6MLegConvention = new SwapFixedLegConvention( irsFixedLeg6MConventionName, getIds(Currency.GBP, TENOR_STR_6M, FIXED_LEG), Tenor.SIX_MONTHS, ACT_365, MODIFIED_FOLLOWING, Currency.GBP, GB, 0, true, StubType.SHORT_START, false, 0); final String irsFixedLeg3MConventionName = getConventionName(Currency.GBP, TENOR_STR_3M, FIXED_LEG); final SwapFixedLegConvention irsFixed3MLegConvention = new SwapFixedLegConvention( irsFixedLeg3MConventionName, getIds(Currency.GBP, TENOR_STR_3M, FIXED_LEG), Tenor.THREE_MONTHS, ACT_365, MODIFIED_FOLLOWING, Currency.GBP, GB, 0, true, StubType.SHORT_START, false, 0); // ON compounded legs final String oisFloatLegConventionName = getConventionName(Currency.GBP, ON_CMP_LEG); final OISLegConvention oisFloatLegConvention = new OISLegConvention( oisFloatLegConventionName, getIds(Currency.GBP, ON_CMP_LEG), onIndexId, Tenor.ONE_YEAR, MODIFIED_FOLLOWING, 0, true, StubType.SHORT_START, false, 1); // Ibor legs final String irsLibor6MLegConventionName = getConventionName(Currency.GBP, TENOR_STR_6M, LIBOR_LEG); final VanillaIborLegConvention irsLibor6MLegConvention = new VanillaIborLegConvention( irsLibor6MLegConventionName, getIds(Currency.GBP, TENOR_STR_6M, LIBOR_LEG), liborConventionId, true, Interpolator1DFactory.LINEAR, Tenor.SIX_MONTHS, 0, true, StubType.SHORT_START, false, 0); final String irsLibor3MLegConventionName = getConventionName(Currency.GBP, TENOR_STR_3M, LIBOR_LEG); final VanillaIborLegConvention irsLibor3MLegConvention = new VanillaIborLegConvention( irsLibor3MLegConventionName, getIds(Currency.GBP, TENOR_STR_3M, LIBOR_LEG), liborConventionId, true, Interpolator1DFactory.LINEAR, Tenor.THREE_MONTHS, 0, true, StubType.SHORT_START, false, 0); final String irsLibor1MLegConventionName = getConventionName(Currency.GBP, TENOR_STR_1M, LIBOR_LEG); final VanillaIborLegConvention irsLibor1MLegConvention = new VanillaIborLegConvention( irsLibor1MLegConventionName, getIds(Currency.GBP, TENOR_STR_1M, LIBOR_LEG), liborConventionId, true, Interpolator1DFactory.LINEAR, Tenor.ONE_MONTH, 0, true, StubType.SHORT_START, false, 0); // TODO: Note: Temporally used to retrieve underlying index convention. - To be removed final String irsLibor6MLegConventionName2 = getConventionName(Currency.GBP, TENOR_STR_6M, IRS_IBOR_LEG); final VanillaIborLegConvention irsLibor6MLegConvention2 = new VanillaIborLegConvention( irsLibor6MLegConventionName2, getIds(Currency.GBP, TENOR_STR_6M, IRS_IBOR_LEG), liborConventionId, true, Interpolator1DFactory.LINEAR, Tenor.SIX_MONTHS, 0, true, StubType.SHORT_START, false, 0); final String irsLibor3MLegConventionName2 = getConventionName(Currency.GBP, TENOR_STR_3M, IRS_IBOR_LEG); final VanillaIborLegConvention irsLibor3MLegConvention2 = new VanillaIborLegConvention( irsLibor3MLegConventionName2, getIds(Currency.GBP, TENOR_STR_3M, IRS_IBOR_LEG), liborConventionId, true, Interpolator1DFactory.LINEAR, Tenor.THREE_MONTHS, 0, true, StubType.SHORT_START, false, 0); final String irsLibor1MLegConventionName2 = getConventionName(Currency.GBP, TENOR_STR_1M, IRS_IBOR_LEG); final VanillaIborLegConvention irsLibor1MLegConvention2 = new VanillaIborLegConvention( irsLibor1MLegConventionName2, getIds(Currency.GBP, TENOR_STR_1M, IRS_IBOR_LEG), liborConventionId, true, Interpolator1DFactory.LINEAR, Tenor.ONE_MONTH, 0, true, StubType.SHORT_START, false, 0); // Futures final String quarterlySTIRFutureConventionName = getConventionName(Currency.GBP, STIR_FUTURES + QUARTERLY); final InterestRateFutureConvention quarterlySTIRFutureConvention = new InterestRateFutureConvention( quarterlySTIRFutureConventionName, ExternalIdBundle.of(ExternalId.of(SCHEME_NAME, quarterlySTIRFutureConventionName)), ExternalId.of(ExchangeTradedInstrumentExpiryCalculator.SCHEME, IMMFutureAndFutureOptionQuarterlyExpiryCalculator.NAME), GB, liborConventionId); final String serialFutureConventionName = getConventionName(Currency.GBP, STIR_FUTURES + SERIAL); final InterestRateFutureConvention serialSTIRFutureConvention = new InterestRateFutureConvention( serialFutureConventionName, ExternalIdBundle.of(ExternalId.of(SCHEME_NAME, serialFutureConventionName)), ExternalId.of(ExchangeTradedInstrumentExpiryCalculator.SCHEME, IMMFutureAndFutureOptionMonthlyExpiryCalculator.NAME), GB, liborConventionId); addConvention(master, liborIndex); addConvention(master, onIndex); addConvention(master, depositONConvention); addConvention(master, depositConvention); addConvention(master, oisFixedLegConvention); addConvention(master, irsFixed12MLegConvention); addConvention(master, irsFixed6MLegConvention); addConvention(master, irsFixed3MLegConvention); addConvention(master, oisFloatLegConvention); addConvention(master, irsLibor6MLegConvention); addConvention(master, irsLibor3MLegConvention); addConvention(master, irsLibor1MLegConvention); addConvention(master, irsLibor6MLegConvention2); addConvention(master, irsLibor3MLegConvention2); addConvention(master, irsLibor1MLegConvention2); addConvention(master, quarterlySTIRFutureConvention); addConvention(master, serialSTIRFutureConvention); } }