/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.provider.curve; import org.threeten.bp.Period; import org.threeten.bp.ZonedDateTime; import com.opengamma.analytics.financial.curve.inflation.generator.GeneratorPriceIndexCurve; import com.opengamma.analytics.financial.curve.inflation.generator.GeneratorPriceIndexCurveInterpolated; import com.opengamma.analytics.financial.curve.interestrate.generator.GeneratorCurveYieldInterpolated; import com.opengamma.analytics.financial.curve.interestrate.generator.GeneratorYDCurve; import com.opengamma.analytics.financial.datasets.CalendarGBP; import com.opengamma.analytics.financial.datasets.CalendarUSD; import com.opengamma.analytics.financial.instrument.future.InterestRateFutureSecurityDefinition; import com.opengamma.analytics.financial.instrument.index.GeneratorAttribute; import com.opengamma.analytics.financial.instrument.index.GeneratorDepositIbor; import com.opengamma.analytics.financial.instrument.index.GeneratorDepositON; import com.opengamma.analytics.financial.instrument.index.GeneratorFRA; import com.opengamma.analytics.financial.instrument.index.GeneratorInstrument; import com.opengamma.analytics.financial.instrument.index.GeneratorInterestRateFutures; import com.opengamma.analytics.financial.instrument.index.GeneratorLegIborMaster; import com.opengamma.analytics.financial.instrument.index.GeneratorLegONArithmeticAverageSimplified; import com.opengamma.analytics.financial.instrument.index.GeneratorSwapFixedIbor; import com.opengamma.analytics.financial.instrument.index.GeneratorSwapFixedIborMaster; import com.opengamma.analytics.financial.instrument.index.GeneratorSwapFixedInflationMaster; import com.opengamma.analytics.financial.instrument.index.GeneratorSwapFixedInflationZeroCoupon; import com.opengamma.analytics.financial.instrument.index.GeneratorSwapFixedON; import com.opengamma.analytics.financial.instrument.index.GeneratorSwapFixedONMaster; import com.opengamma.analytics.financial.instrument.index.GeneratorSwapIborIbor; import com.opengamma.analytics.financial.instrument.index.GeneratorSwapIborIborMaster; import com.opengamma.analytics.financial.instrument.index.GeneratorSwapSingleCurrency; import com.opengamma.analytics.financial.instrument.index.IborIndex; import com.opengamma.analytics.financial.instrument.index.IndexON; import com.opengamma.analytics.financial.provider.calculator.generic.LastFixingEndTimeCalculator; import com.opengamma.analytics.financial.provider.calculator.generic.LastTimeCalculator; import com.opengamma.analytics.financial.provider.curve.hullwhite.HullWhiteProviderDiscountBuildingRepository; import com.opengamma.analytics.financial.provider.curve.inflation.InflationDiscountBuildingRepository; import com.opengamma.analytics.financial.provider.curve.inflationissuer.InflationIssuerDiscountBuildingRepository; import com.opengamma.analytics.financial.provider.curve.issuer.IssuerDiscountBuildingRepository; import com.opengamma.analytics.financial.provider.curve.multicurve.MulticurveDiscountBuildingRepository; import com.opengamma.analytics.financial.schedule.ScheduleCalculator; import com.opengamma.analytics.math.interpolation.CombinedInterpolatorExtrapolatorFactory; import com.opengamma.analytics.math.interpolation.Interpolator1D; import com.opengamma.analytics.math.interpolation.Interpolator1DFactory; import com.opengamma.financial.convention.StubType; import com.opengamma.financial.convention.businessday.BusinessDayConventions; import com.opengamma.financial.convention.calendar.Calendar; import com.opengamma.financial.convention.calendar.MondayToFridayCalendar; import com.opengamma.financial.convention.rolldate.QuarterlyIMMRollDateAdjuster; import com.opengamma.financial.convention.rolldate.RollDateAdjuster; import com.opengamma.financial.convention.rolldate.RollDateAdjusterUtils; import com.opengamma.util.money.Currency; /** * Generators and indexes used in curve calibration tests. */ public class CurveCalibrationConventionDataSets { private static final double TOLERANCE_ROOT = 1.0E-10; private static final int STEP_MAX = 100; private static final MulticurveDiscountBuildingRepository CURVE_BUILDING_REPOSITORY_MC = new MulticurveDiscountBuildingRepository(TOLERANCE_ROOT, TOLERANCE_ROOT, STEP_MAX); private static final IssuerDiscountBuildingRepository CURVE_BUILDING_REPOSITORY_IS = new IssuerDiscountBuildingRepository(TOLERANCE_ROOT, TOLERANCE_ROOT, STEP_MAX); private static final HullWhiteProviderDiscountBuildingRepository CURVE_BUILDING_REPOSITORY_HW = new HullWhiteProviderDiscountBuildingRepository(TOLERANCE_ROOT, TOLERANCE_ROOT, STEP_MAX); private static final InflationDiscountBuildingRepository CURVE_BUILDING_REPOSITORY_INFL = new InflationDiscountBuildingRepository(TOLERANCE_ROOT, TOLERANCE_ROOT, STEP_MAX); private static final InflationIssuerDiscountBuildingRepository CURVE_BUILDING_REPOSITORY_INFL_IS = new InflationIssuerDiscountBuildingRepository(TOLERANCE_ROOT, TOLERANCE_ROOT, STEP_MAX); private static final RollDateAdjuster IMM_QUARTERLY_ADJUSTER = QuarterlyIMMRollDateAdjuster.getAdjuster(); public static MulticurveDiscountBuildingRepository curveBuildingRepositoryMulticurve() { return CURVE_BUILDING_REPOSITORY_MC; } public static IssuerDiscountBuildingRepository curveBuildingRepositoryIssuer() { return CURVE_BUILDING_REPOSITORY_IS; } public static HullWhiteProviderDiscountBuildingRepository curveBuildingRepositoryHullWhite() { return CURVE_BUILDING_REPOSITORY_HW; } public static InflationDiscountBuildingRepository curveBuildingRepositoryInflation() { return CURVE_BUILDING_REPOSITORY_INFL; } public static InflationIssuerDiscountBuildingRepository curveBuildingRepositoryInflationIssuer() { return CURVE_BUILDING_REPOSITORY_INFL_IS; } private static final Interpolator1D INTERPOLATOR_LINEAR = CombinedInterpolatorExtrapolatorFactory.getInterpolator(Interpolator1DFactory.LINEAR, Interpolator1DFactory.FLAT_EXTRAPOLATOR, Interpolator1DFactory.FLAT_EXTRAPOLATOR); private static final Interpolator1D INTERPOLATOR_DQ = CombinedInterpolatorExtrapolatorFactory.getInterpolator(Interpolator1DFactory.DOUBLE_QUADRATIC, Interpolator1DFactory.FLAT_EXTRAPOLATOR, Interpolator1DFactory.FLAT_EXTRAPOLATOR); private static final Interpolator1D INTERPOLATOR_NCS = CombinedInterpolatorExtrapolatorFactory.getInterpolator(Interpolator1DFactory.NATURAL_CUBIC_SPLINE, Interpolator1DFactory.FLAT_EXTRAPOLATOR, Interpolator1DFactory.FLAT_EXTRAPOLATOR); private static final Interpolator1D INTERPOLATOR_CCS = CombinedInterpolatorExtrapolatorFactory.getInterpolator(Interpolator1DFactory.CLAMPED_CUBIC, Interpolator1DFactory.FLAT_EXTRAPOLATOR, Interpolator1DFactory.FLAT_EXTRAPOLATOR); private static final Interpolator1D INTERPOLATOR_EXP = CombinedInterpolatorExtrapolatorFactory.getInterpolator(Interpolator1DFactory.EXPONENTIAL, Interpolator1DFactory.FLAT_EXTRAPOLATOR, Interpolator1DFactory.FLAT_EXTRAPOLATOR); // private static final Interpolator1D INTERPOLATOR_LL = CombinedInterpolatorExtrapolatorFactory.getInterpolator(Interpolator1DFactory.LOG_LINEAR, Interpolator1DFactory.EXPONENTIAL_EXTRAPOLATOR, // Interpolator1DFactory.EXPONENTIAL_EXTRAPOLATOR); // Log-linear on the discount factor = step on the instantaneous rates private static final LastTimeCalculator LAST_TIME_CALCULATOR = LastTimeCalculator.getInstance(); private static final LastFixingEndTimeCalculator LAST_FIXING_END_CALCULATOR = LastFixingEndTimeCalculator.getInstance(); private static final GeneratorYDCurve GENERATOR_YD_MAT_LIN = new GeneratorCurveYieldInterpolated(LAST_TIME_CALCULATOR, INTERPOLATOR_LINEAR); private static final GeneratorYDCurve GENERATOR_YD_MAT_DQ = new GeneratorCurveYieldInterpolated(LAST_TIME_CALCULATOR, INTERPOLATOR_DQ); private static final GeneratorYDCurve GENERATOR_YD_MAT_NCS = new GeneratorCurveYieldInterpolated(LAST_TIME_CALCULATOR, INTERPOLATOR_NCS); private static final GeneratorYDCurve GENERATOR_YD_MAT_CCS = new GeneratorCurveYieldInterpolated(LAST_TIME_CALCULATOR, INTERPOLATOR_CCS); private static final GeneratorPriceIndexCurve GENERATOR_PI_FIX_EXP = new GeneratorPriceIndexCurveInterpolated(LAST_FIXING_END_CALCULATOR, INTERPOLATOR_EXP); // TODO: Review exponential interpolator private static final GeneratorPriceIndexCurve GENERATOR_PI_FIX_LIN = new GeneratorPriceIndexCurveInterpolated(LAST_FIXING_END_CALCULATOR, INTERPOLATOR_LINEAR); private static final GeneratorSwapFixedIborMaster GENERATOR_IRS_MASTER = GeneratorSwapFixedIborMaster.getInstance(); private static final GeneratorSwapIborIborMaster GENERATOR_BS_MASTER = GeneratorSwapIborIborMaster.getInstance(); private static final GeneratorSwapFixedInflationMaster GENERATOR_INFL_MASTER = GeneratorSwapFixedInflationMaster.getInstance(); /** EUR **/ private static final Calendar TARGET = new MondayToFridayCalendar("TARGET"); private static final Currency EUR = Currency.EUR; private static final GeneratorSwapFixedON GENERATOR_OIS_EUR = GeneratorSwapFixedONMaster.getInstance().getGenerator("EUR1YEONIA", TARGET); private static final IndexON EONIA = GENERATOR_OIS_EUR.getIndex(); private static final GeneratorDepositON GENERATOR_DEPOSIT_ON_EUR = new GeneratorDepositON("EUR Deposit ON", EUR, TARGET, EONIA.getDayCount()); private static final GeneratorSwapFixedIbor EUR1YEURIBOR3M = GENERATOR_IRS_MASTER.getGenerator("EUR1YEURIBOR3M", TARGET); private static final GeneratorSwapFixedIbor EUR1YEURIBOR6M = GENERATOR_IRS_MASTER.getGenerator("EUR1YEURIBOR6M", TARGET); private static final IborIndex EURIBOR3M = EUR1YEURIBOR3M.getIborIndex(); private static final IborIndex EURIBOR6M = EUR1YEURIBOR6M.getIborIndex(); private static final GeneratorFRA GENERATOR_FRA_3M_EUR = new GeneratorFRA("GENERATOR_FRA_3M", EURIBOR3M, TARGET); private static final GeneratorFRA GENERATOR_FRA_6M_EUR = new GeneratorFRA("GENERATOR_FRA_6M", EURIBOR6M, TARGET); private static final GeneratorDepositIbor GENERATOR_EURIBOR3M = new GeneratorDepositIbor("GENERATOR_EURIBOR3M", EURIBOR3M, TARGET); private static final GeneratorDepositIbor GENERATOR_EURIBOR6M = new GeneratorDepositIbor("GENERATOR_EURIBOR6M", EURIBOR6M, TARGET); private static final GeneratorSwapIborIbor EUREURIBOR3MEURIBOR6M = GENERATOR_BS_MASTER.getGenerator("EUREURIBOR3MEURIBOR6M", TARGET); @SuppressWarnings("unchecked") public static GeneratorInstrument<? extends GeneratorAttribute>[] generatorEurOnOis(int nbDepositON, int nbOis) { GeneratorInstrument<? extends GeneratorAttribute>[] generator = new GeneratorInstrument[nbDepositON + nbOis]; for (int loopdepo = 0; loopdepo < nbDepositON; loopdepo++) { generator[loopdepo] = GENERATOR_DEPOSIT_ON_EUR; } for (int loopois = 0; loopois < nbOis; loopois++) { generator[nbDepositON + loopois] = GENERATOR_OIS_EUR; } return generator; } @SuppressWarnings("unchecked") public static GeneratorInstrument<? extends GeneratorAttribute>[] generatorEurIbor6Fra6Irs6(int nbIbor, int nbFra, int nbIrs) { GeneratorInstrument<? extends GeneratorAttribute>[] generator = new GeneratorInstrument[nbIbor + nbFra + nbIrs]; for (int loopibor = 0; loopibor < nbIbor; loopibor++) { generator[loopibor] = GENERATOR_EURIBOR6M; } for (int loopfra = 0; loopfra < nbFra; loopfra++) { generator[nbIbor + loopfra] = GENERATOR_FRA_6M_EUR; } for (int loopirs = 0; loopirs < nbIrs; loopirs++) { generator[nbIbor + nbFra + loopirs] = EUR1YEURIBOR6M; } return generator; } @SuppressWarnings("unchecked") public static GeneratorInstrument<? extends GeneratorAttribute>[] generatorEurIbor6Fra6Bs36(int nbIbor, int nbFra, int nbBs) { GeneratorInstrument<? extends GeneratorAttribute>[] generator = new GeneratorInstrument[nbIbor + nbFra + nbBs]; for (int loopibor = 0; loopibor < nbIbor; loopibor++) { generator[loopibor] = GENERATOR_EURIBOR6M; } for (int loopfra = 0; loopfra < nbFra; loopfra++) { generator[nbIbor + loopfra] = GENERATOR_FRA_6M_EUR; } for (int loopirs = 0; loopirs < nbBs; loopirs++) { generator[nbIbor + nbFra + loopirs] = EUREURIBOR3MEURIBOR6M; } return generator; } @SuppressWarnings("unchecked") public static GeneratorInstrument<? extends GeneratorAttribute>[] generatorEurIbor3Fra3Irs3(int nbIbor, int nbFra, int nbIrs) { GeneratorInstrument<? extends GeneratorAttribute>[] generator = new GeneratorInstrument[nbIbor + nbFra + nbIrs]; for (int loopibor = 0; loopibor < nbIbor; loopibor++) { generator[loopibor] = GENERATOR_EURIBOR3M; } for (int loopfra = 0; loopfra < nbFra; loopfra++) { generator[nbIbor + loopfra] = GENERATOR_FRA_3M_EUR; } for (int loopirs = 0; loopirs < nbIrs; loopirs++) { generator[nbIbor + nbFra + loopirs] = EUR1YEURIBOR3M; } return generator; } @SuppressWarnings("unchecked") public static GeneratorInstrument<? extends GeneratorAttribute>[] generatorEurIbor3Fut3Irs3( ZonedDateTime calibrationDate, int nbIbor, int nbFut, int nbIrs) { GeneratorInstrument<? extends GeneratorAttribute>[] generator = new GeneratorInstrument[nbIbor + nbFut + nbIrs]; for (int loopibor = 0; loopibor < nbIbor; loopibor++) { generator[loopibor] = GENERATOR_EURIBOR3M; } ZonedDateTime spotDate = ScheduleCalculator.getAdjustedDate(calibrationDate, EURIBOR3M.getSpotLag(), NYC); for (int loopfut = 0; loopfut < nbFut; loopfut++) { ZonedDateTime immDate = RollDateAdjusterUtils.nthDate(spotDate, IMM_QUARTERLY_ADJUSTER, loopfut + 1); InterestRateFutureSecurityDefinition stirFutures = InterestRateFutureSecurityDefinition .fromFixingPeriodStartDate(immDate, EURIBOR3M, 1.0, 0.25, "STIR Futures", TARGET); generator[nbIbor + loopfut] = new GeneratorInterestRateFutures("STIR Futures" + loopfut, stirFutures); } for (int loopirs = 0; loopirs < nbIrs; loopirs++) { generator[nbIbor + nbFut + loopirs] = EUR1YEURIBOR3M; } return generator; } /** JPY **/ private static final Calendar TYO = new MondayToFridayCalendar("TYO"); private static final Currency JPY = Currency.JPY; private static final GeneratorSwapFixedON GENERATOR_OIS_JPY = GeneratorSwapFixedONMaster. getInstance().getGenerator("JPY1YTONAR", TYO); private static final IndexON TONAR = GENERATOR_OIS_JPY.getIndex(); private static final GeneratorDepositON GENERATOR_DEPOSIT_ON_JPY = new GeneratorDepositON("JPY Deposit ON", JPY, TYO, TONAR.getDayCount()); private static final GeneratorSwapFixedIbor JPY6MLIBOR6M = GENERATOR_IRS_MASTER.getGenerator("JPY6MLIBOR6M", TYO); private static final GeneratorSwapIborIbor JPYLIBOR3MLIBOR6M = GENERATOR_BS_MASTER.getGenerator("JPYLIBOR3MLIBOR6M", TYO); private static final IborIndex JPYLIBOR3M = JPYLIBOR3MLIBOR6M.getIborIndex1(); private static final IborIndex JPYLIBOR6M = JPY6MLIBOR6M.getIborIndex(); private static final GeneratorFRA GENERATOR_FRA_3M_JPY = new GeneratorFRA("GENERATOR_FRA_3M", JPYLIBOR3M, TYO); private static final GeneratorFRA GENERATOR_FRA_6M_JPY = new GeneratorFRA("GENERATOR_FRA_6M", JPYLIBOR6M, TYO); private static final GeneratorDepositIbor GENERATOR_JPYLIBOR3M = new GeneratorDepositIbor("GENERATOR_JPYLIBOR3M", JPYLIBOR3M, TYO); private static final GeneratorDepositIbor GENERATOR_JPYLIBOR6M = new GeneratorDepositIbor("GENERATOR_JPYLIBOR6M", JPYLIBOR6M, TYO); @SuppressWarnings("unchecked") public static GeneratorInstrument<? extends GeneratorAttribute>[] generatorJpyOnOis(int nbDepositON, int nbOis) { GeneratorInstrument<? extends GeneratorAttribute>[] generator = new GeneratorInstrument[nbDepositON + nbOis]; for (int loopdepo = 0; loopdepo < nbDepositON; loopdepo++) { generator[loopdepo] = GENERATOR_DEPOSIT_ON_JPY; } for (int loopois = 0; loopois < nbOis; loopois++) { generator[nbDepositON + loopois] = GENERATOR_OIS_JPY; } return generator; } @SuppressWarnings("unchecked") public static GeneratorInstrument<? extends GeneratorAttribute>[] generatorJpyIbor6Fra6Irs6(int nbIbor, int nbFra, int nbIrs) { GeneratorInstrument<? extends GeneratorAttribute>[] generator = new GeneratorInstrument[nbIbor + nbFra + nbIrs]; for (int loopibor = 0; loopibor < nbIbor; loopibor++) { generator[loopibor] = GENERATOR_JPYLIBOR6M; } for (int loopfra = 0; loopfra < nbFra; loopfra++) { generator[nbIbor + loopfra] = GENERATOR_FRA_6M_JPY; } for (int loopirs = 0; loopirs < nbIrs; loopirs++) { generator[nbIbor + nbFra + loopirs] = JPY6MLIBOR6M; } return generator; } @SuppressWarnings("unchecked") public static GeneratorInstrument<? extends GeneratorAttribute>[] generatorJpyIbor3Fra3Bs3(int nbIbor, int nbFra, int nbBs) { GeneratorInstrument<? extends GeneratorAttribute>[] generator = new GeneratorInstrument[nbIbor + nbFra + nbBs]; for (int loopibor = 0; loopibor < nbIbor; loopibor++) { generator[loopibor] = GENERATOR_JPYLIBOR3M; } for (int loopfra = 0; loopfra < nbFra; loopfra++) { generator[nbIbor + loopfra] = GENERATOR_FRA_3M_JPY; } for (int loopirs = 0; loopirs < nbBs; loopirs++) { generator[nbIbor + nbFra + loopirs] = JPYLIBOR3MLIBOR6M; } return generator; } /** GBP **/ private static final Calendar LON = new CalendarGBP("LON"); private static final Currency GBP = Currency.GBP; private static final GeneratorSwapFixedON GENERATOR_OIS_GBP = GeneratorSwapFixedONMaster. getInstance().getGenerator("GBP1YSONIA", LON); private static final IndexON SONIA = GENERATOR_OIS_GBP.getIndex(); private static final GeneratorDepositON GENERATOR_DEPOSIT_ON_GBP = new GeneratorDepositON("GBP Deposit ON", GBP, LON, SONIA.getDayCount()); private static final GeneratorSwapFixedIbor GBP6MLIBOR6M = GENERATOR_IRS_MASTER.getGenerator("GBP6MLIBOR6M", LON); private static final GeneratorSwapFixedIbor GBP3MLIBOR3M = GENERATOR_IRS_MASTER.getGenerator(GeneratorSwapFixedIborMaster.GBP3MLIBOR3M, LON); private static final IborIndex GBPLIBOR6M = GBP6MLIBOR6M.getIborIndex(); private static final IborIndex GBPLIBOR3M = GBP3MLIBOR3M.getIborIndex(); private static final GeneratorFRA GENERATOR_FRA_6M_GBP = new GeneratorFRA("GENERATOR_FRA_6M", GBPLIBOR6M, LON); private static final GeneratorFRA GENERATOR_FRA_3M_GBP = new GeneratorFRA("GENERATOR_FRA_3M", GBPLIBOR3M, LON); private static final GeneratorDepositIbor GENERATOR_GBPLIBOR6M = new GeneratorDepositIbor("GENERATOR_GBPLIBOR6M", GBPLIBOR6M, LON); private static final GeneratorDepositIbor GENERATOR_GBPLIBOR3M = new GeneratorDepositIbor("GENERATOR_GBPLIBOR3M", GBPLIBOR3M, LON); @SuppressWarnings("unchecked") public static GeneratorInstrument<? extends GeneratorAttribute>[] generatorGbpOnOis(int nbDepositON, int nbOis) { GeneratorInstrument<? extends GeneratorAttribute>[] generator = new GeneratorInstrument[nbDepositON + nbOis]; for (int loopdepo = 0; loopdepo < nbDepositON; loopdepo++) { generator[loopdepo] = GENERATOR_DEPOSIT_ON_GBP; } for (int loopois = 0; loopois < nbOis; loopois++) { generator[nbDepositON + loopois] = GENERATOR_OIS_GBP; } return generator; } @SuppressWarnings("unchecked") public static GeneratorInstrument<? extends GeneratorAttribute>[] generatorGbpIbor6Fra6Irs6(int nbIbor, int nbFra, int nbIrs) { GeneratorInstrument<? extends GeneratorAttribute>[] generator = new GeneratorInstrument[nbIbor + nbFra + nbIrs]; for (int loopibor = 0; loopibor < nbIbor; loopibor++) { generator[loopibor] = GENERATOR_GBPLIBOR6M; } for (int loopfra = 0; loopfra < nbFra; loopfra++) { generator[nbIbor + loopfra] = GENERATOR_FRA_6M_GBP; } for (int loopirs = 0; loopirs < nbIrs; loopirs++) { generator[nbIbor + nbFra + loopirs] = GBP6MLIBOR6M; } return generator; } @SuppressWarnings("unchecked") public static GeneratorInstrument<? extends GeneratorAttribute>[] generatorGbpIbor3Fra3Irs3(int nbIbor, int nbFra, int nbIrs) { GeneratorInstrument<? extends GeneratorAttribute>[] generator = new GeneratorInstrument[nbIbor + nbFra + nbIrs]; for (int loopibor = 0; loopibor < nbIbor; loopibor++) { generator[loopibor] = GENERATOR_GBPLIBOR3M; } for (int loopfra = 0; loopfra < nbFra; loopfra++) { generator[nbIbor + loopfra] = GENERATOR_FRA_3M_GBP; } for (int loopirs = 0; loopirs < nbIrs; loopirs++) { generator[nbIbor + nbFra + loopirs] = GBP3MLIBOR3M; } return generator; } /** USD **/ private static final Calendar NYC = new CalendarUSD("NYC"); private static final Currency USD = Currency.USD; private static final GeneratorSwapFixedON GENERATOR_OIS_USD = GeneratorSwapFixedONMaster. getInstance().getGenerator("USD1YFEDFUND", NYC); private static final IndexON INDEX_FEDFUND_USD = GENERATOR_OIS_USD.getIndex(); private static final GeneratorDepositON GENERATOR_DEPOSIT_ON_USD = new GeneratorDepositON("USD Deposit ON", USD, NYC, INDEX_FEDFUND_USD.getDayCount()); private static final GeneratorSwapFixedIbor USD6MLIBOR3M = GENERATOR_IRS_MASTER.getGenerator("USD6MLIBOR3M", NYC); private static final IborIndex USDLIBOR3M = USD6MLIBOR3M.getIborIndex(); private static final GeneratorDepositIbor GENERATOR_USDLIBOR3M = new GeneratorDepositIbor("GENERATOR_USDLIBOR3M", USDLIBOR3M, NYC); private static final GeneratorFRA GENERATOR_FRA_3M_USD = new GeneratorFRA("GENERATOR USD FRA 3M", USDLIBOR3M, NYC); private static final GeneratorLegONArithmeticAverageSimplified USDFEDFUNDAA3M = new GeneratorLegONArithmeticAverageSimplified("USDFEDFUNDAA3M", USD, INDEX_FEDFUND_USD, Period.ofMonths(3), 2, 0, BusinessDayConventions.MODIFIED_FOLLOWING, true, StubType.SHORT_START, false, NYC, NYC); private static final GeneratorSwapSingleCurrency GENERATOR_FFAA_USDLIBOR3M = new GeneratorSwapSingleCurrency("USDFEDFUNDAA3MLIBOR3M", USDFEDFUNDAA3M, GeneratorLegIborMaster.getInstance().getGenerator("USDLIBOR3M", NYC)); private static final GeneratorSwapFixedInflationZeroCoupon USCPI = GENERATOR_INFL_MASTER.getGenerator("USCPI"); @SuppressWarnings("unchecked") public static GeneratorInstrument<? extends GeneratorAttribute>[] generatorUsdOnOisFfs(int nbDepositON, int nbOis, int nbFF) { GeneratorInstrument<? extends GeneratorAttribute>[] generator = new GeneratorInstrument[nbDepositON + nbOis + nbFF]; for (int loopdepo = 0; loopdepo < nbDepositON; loopdepo++) { generator[loopdepo] = GENERATOR_DEPOSIT_ON_USD; } for (int loopois = 0; loopois < nbOis; loopois++) { generator[nbDepositON + loopois] = GENERATOR_OIS_USD; } for (int loopff = 0; loopff < nbFF; loopff++) { generator[nbDepositON + nbOis + loopff] = GENERATOR_FFAA_USDLIBOR3M; } return generator; } @SuppressWarnings("unchecked") public static GeneratorInstrument<? extends GeneratorAttribute>[] generatorUsdIbor3Fra3Irs3(int nbIbor, int nbFra, int nbIrs) { GeneratorInstrument<? extends GeneratorAttribute>[] generator = new GeneratorInstrument[nbIbor + nbFra + nbIrs]; for (int loopibor = 0; loopibor < nbIbor; loopibor++) { generator[loopibor] = GENERATOR_USDLIBOR3M; } for (int loopfra = 0; loopfra < nbFra; loopfra++) { generator[nbIbor + loopfra] = GENERATOR_FRA_3M_USD; } for (int loopirs = 0; loopirs < nbIrs; loopirs++) { generator[nbIbor + nbFra + loopirs] = USD6MLIBOR3M; } return generator; } @SuppressWarnings("unchecked") public static GeneratorInstrument<? extends GeneratorAttribute>[] generatorUsdIbor3Fut3Irs3( ZonedDateTime calibrationDate, int nbIbor, int nbFut, int nbIrs) { GeneratorInstrument<? extends GeneratorAttribute>[] generator = new GeneratorInstrument[nbIbor + nbFut + nbIrs]; for (int loopibor = 0; loopibor < nbIbor; loopibor++) { generator[loopibor] = GENERATOR_USDLIBOR3M; } ZonedDateTime spotDate = ScheduleCalculator.getAdjustedDate(calibrationDate, USDLIBOR3M.getSpotLag(), NYC); for (int loopfut = 0; loopfut < nbFut; loopfut++) { ZonedDateTime immDate = RollDateAdjusterUtils.nthDate(spotDate, IMM_QUARTERLY_ADJUSTER, loopfut + 1); InterestRateFutureSecurityDefinition stirFutures = InterestRateFutureSecurityDefinition .fromFixingPeriodStartDate(immDate, USDLIBOR3M, 1.0, 0.25, "STRIR Futures", NYC); generator[nbIbor + loopfut] = new GeneratorInterestRateFutures("STIR Futures", stirFutures); } for (int loopirs = 0; loopirs < nbIrs; loopirs++) { generator[nbIbor + nbFut + loopirs] = USD6MLIBOR3M; } return generator; } /** * Returns an array of generators for US CPI zero coupons swaps. * @param nbZc The number of zero-coupon swaps. * @return The generators. */ @SuppressWarnings("unchecked") public static GeneratorInstrument<? extends GeneratorAttribute>[] generatorUsdCpi(int nbZc) { GeneratorInstrument<? extends GeneratorAttribute>[] generator = new GeneratorInstrument[nbZc]; for (int loopirs = 0; loopirs < nbZc; loopirs++) { generator[loopirs] = USCPI; } return generator; } /** * Returns a Yield and discount curve generator based on node computed from the maturity calculator and linear interpolation. * The extrapolation is flat. * @return The generator. */ public static GeneratorYDCurve generatorYDMatLin() { return GENERATOR_YD_MAT_LIN; } /** * Returns a Yield and discount curve generator based on node computed from the maturity calculator and double quadratic interpolation. * The extrapolation is flat. * @return The generator. */ public static GeneratorYDCurve generatorYDMatDq() { return GENERATOR_YD_MAT_DQ; } /** * Returns a Yield and discount curve generator based on node computed from the maturity calculator and natural cubic spline interpolation. * Natural cubic spline has 0 second derivative at each extreme of the interpolation range. The extrapolation is flat. * @return The generator. */ public static GeneratorYDCurve generatorYDMatNcs() { return GENERATOR_YD_MAT_NCS; } /** * Returns a Yield and discount curve generator based on node computed from the maturity calculator and linear interpolation. * Clamp cubic spline has 0 first derivative at each extreme of the interpolation range. The extrapolation is flat. * @return The generator. */ public static GeneratorYDCurve generatorYDMatCcs() { return GENERATOR_YD_MAT_CCS; } /** * Returns a price index curve generator based on node computed from the last fixing time calculator and exponential interpolation. * The extrapolation is flat. * @return The generator. */ public static GeneratorPriceIndexCurve generatorPiFixExp() { return GENERATOR_PI_FIX_EXP; } /** * Returns a price index curve generator based on node computed from the last fixing time calculator and exponential interpolation. * The extrapolation is flat. * @return The generator. */ public static GeneratorPriceIndexCurve generatorPiFixLin() { return GENERATOR_PI_FIX_LIN; } }