/**
* 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.IRS_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.OIS_FIXED_LEG;
import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.OIS_ON_LEG;
import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.OVERNIGHT;
import static com.opengamma.financial.convention.initializer.PerCurrencyConventionHelper.SCHEME_NAME;
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.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.id.ExternalId;
import com.opengamma.master.convention.ConventionMaster;
import com.opengamma.util.money.Currency;
import com.opengamma.util.time.Tenor;
/**
* The conventions for Japan.
*/
public class JPConventions extends ConventionMasterInitializer {
/** Singleton. */
public static final ConventionMasterInitializer INSTANCE = new JPConventions();
/** OIS X-Ccy USD/JPY ON leg convention string **/
public static final String OIS_USD_JPY_ON_LEG = "JPY Overnight USD/JPY XCcy Leg";
/** The Tibor string **/
public static final String TIBOR = "Tibor";
/** The Tibor - Japanese Yen (domestic) string **/
public static final String TIBOR_JAPANESE = TIBOR + " Japanese Yen";
/** The Tibor - Euroyen string **/
public static final String TIBOR_EUROYEN = TIBOR + " Euroyen";
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 ACT_365 = DayCounts.ACT_365;
private static final ExternalId JP = ExternalSchemes.financialRegionId("JP");
private static final ExternalId JPGB = ExternalSchemes.financialRegionId("JP+GB");
/**
* Restricted constructor.
*/
protected JPConventions() {
}
//-------------------------------------------------------------------------
@Override
public void init(final ConventionMaster master) {
final String tenorString = "6M";
// Index (Overnight and Ibor-like)
final String onIndexName = getConventionName(Currency.JPY, OVERNIGHT);
final ExternalId onIndexId = ExternalId.of(SCHEME_NAME, onIndexName);
final OvernightIndexConvention onIndex = new OvernightIndexConvention(
onIndexName, getIds(Currency.JPY, OVERNIGHT), ACT_365, 1, Currency.JPY, JP);
final String iborConventionName = getConventionName(Currency.JPY, LIBOR);
final IborIndexConvention liborIndex = new IborIndexConvention(
iborConventionName, getIds(Currency.JPY, LIBOR), ACT_360, MODIFIED_FOLLOWING, 2, true, Currency.JPY,
LocalTime.of(11, 00), "JP", JPGB, JP, "");
final ExternalId liborConventionId = ExternalId.of(SCHEME_NAME, iborConventionName);
final IborIndexConvention tiborJPIndex = new IborIndexConvention(
getConventionName(Currency.JPY, TIBOR_JAPANESE), getIds(Currency.JPY, TIBOR_JAPANESE), ACT_365, MODIFIED_FOLLOWING, 2, true, Currency.JPY,
LocalTime.of(11, 00), "JP", JP, JP, "");
final IborIndexConvention tiborEuIndex = new IborIndexConvention(
getConventionName(Currency.JPY, TIBOR_EUROYEN), getIds(Currency.JPY, TIBOR_EUROYEN), ACT_360, MODIFIED_FOLLOWING, 2, true, Currency.JPY,
LocalTime.of(11, 00), "JP", JP, JP, "");
// Deposit
final String depositONConventionName = getConventionName(Currency.JPY, DEPOSIT_ON);
final DepositConvention depositONConvention = new DepositConvention(
depositONConventionName, getIds(Currency.JPY, DEPOSIT_ON), ACT_365, FOLLOWING, 0, false, Currency.JPY, JP);
final String depositConventionName = getConventionName(Currency.JPY, DEPOSIT);
final DepositConvention depositConvention = new DepositConvention(
depositConventionName, getIds(Currency.JPY, DEPOSIT), ACT_365, FOLLOWING, 2, false, Currency.JPY, JP);
// OIS legs
final String oisFixedLegConventionName = getConventionName(Currency.JPY, OIS_FIXED_LEG);
final String oisFloatLegConventionName = getConventionName(Currency.JPY, OIS_ON_LEG);
final SwapFixedLegConvention oisFixedLegConvention = new SwapFixedLegConvention(
oisFixedLegConventionName, getIds(Currency.JPY, OIS_FIXED_LEG),
Tenor.ONE_YEAR, ACT_365, MODIFIED_FOLLOWING, Currency.JPY, JP, 2, true, StubType.SHORT_START, false, 2);
final OISLegConvention oisFloatLegConvention = new OISLegConvention(
oisFloatLegConventionName, getIds(Currency.JPY, OIS_ON_LEG), onIndexId,
Tenor.ONE_YEAR, MODIFIED_FOLLOWING, 2, true, StubType.NONE, false, 2);
// Ibor swap legs
final String irsFixedLegConventionName = getConventionName(Currency.JPY, IRS_FIXED_LEG);
final String irsIborLegConventionName = getConventionName(Currency.JPY, tenorString, IRS_IBOR_LEG);
final SwapFixedLegConvention irsFixedLegConvention = new SwapFixedLegConvention(
irsFixedLegConventionName, getIds(Currency.JPY, IRS_FIXED_LEG),
Tenor.SIX_MONTHS, ACT_365, MODIFIED_FOLLOWING, Currency.JPY, JP, 2, true, StubType.SHORT_START, false, 2);
final VanillaIborLegConvention irsIborLegConvention = new VanillaIborLegConvention(
irsIborLegConventionName, getIds(Currency.JPY, tenorString, IRS_IBOR_LEG),
liborConventionId, true, Interpolator1DFactory.LINEAR, Tenor.SIX_MONTHS, 2, true, StubType.NONE, false, 2);
// X-Ccy OIS
final OISLegConvention oisXCcyUSDLegConvention = new OISLegConvention(
OIS_USD_JPY_ON_LEG, getIds(OIS_USD_JPY_ON_LEG), onIndexId,
Tenor.THREE_MONTHS, MODIFIED_FOLLOWING, 2, true, StubType.NONE, false, 2);
// Convention add
addConvention(master, onIndex);
addConvention(master, liborIndex);
addConvention(master, tiborJPIndex);
addConvention(master, tiborEuIndex);
addConvention(master, depositONConvention);
addConvention(master, depositConvention);
addConvention(master, oisFixedLegConvention);
addConvention(master, oisFloatLegConvention);
addConvention(master, irsFixedLegConvention);
addConvention(master, irsIborLegConvention);
addConvention(master, oisXCcyUSDLegConvention);
}
}