/** * Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.provider.description; import java.util.LinkedHashMap; import java.util.Map; import org.threeten.bp.Period; import org.threeten.bp.ZonedDateTime; import org.threeten.bp.temporal.TemporalAdjusters; import com.opengamma.analytics.financial.forex.method.FXMatrix; import com.opengamma.analytics.financial.instrument.index.IborIndex; import com.opengamma.analytics.financial.instrument.index.IndexIborMaster; import com.opengamma.analytics.financial.instrument.index.IndexON; import com.opengamma.analytics.financial.instrument.index.IndexONMaster; import com.opengamma.analytics.financial.instrument.index.IndexPrice; import com.opengamma.analytics.financial.legalentity.LegalEntity; import com.opengamma.analytics.financial.legalentity.LegalEntityFilter; import com.opengamma.analytics.financial.legalentity.LegalEntityShortName; import com.opengamma.analytics.financial.model.interestrate.curve.DiscountCurve; import com.opengamma.analytics.financial.model.interestrate.curve.PriceIndexCurveSimple; import com.opengamma.analytics.financial.model.interestrate.curve.YieldAndDiscountCurve; import com.opengamma.analytics.financial.model.interestrate.curve.YieldCurve; import com.opengamma.analytics.financial.provider.description.inflation.InflationIssuerProviderDiscount; import com.opengamma.analytics.financial.provider.description.interestrate.IssuerProviderDiscount; import com.opengamma.analytics.financial.provider.description.interestrate.MulticurveProviderDiscount; import com.opengamma.analytics.financial.schedule.ScheduleCalculator; import com.opengamma.analytics.math.curve.InterpolatedDoublesCurve; import com.opengamma.analytics.math.interpolation.CombinedInterpolatorExtrapolatorFactory; import com.opengamma.analytics.math.interpolation.Interpolator1D; import com.opengamma.analytics.math.interpolation.Interpolator1DFactory; import com.opengamma.analytics.math.interpolation.LinearInterpolator1D; import com.opengamma.analytics.util.time.TimeCalculator; import com.opengamma.financial.convention.businessday.BusinessDayConvention; import com.opengamma.financial.convention.businessday.BusinessDayConventions; import com.opengamma.financial.convention.calendar.Calendar; import com.opengamma.financial.convention.calendar.MondayToFridayCalendar; import com.opengamma.timeseries.DoubleTimeSeries; import com.opengamma.timeseries.precise.zdt.ImmutableZonedDateTimeDoubleTimeSeries; import com.opengamma.timeseries.precise.zdt.ZonedDateTimeDoubleTimeSeries; import com.opengamma.util.money.Currency; import com.opengamma.util.time.DateUtils; import com.opengamma.util.tuple.Pair; import com.opengamma.util.tuple.Pairs; /** * Sets of market data used in tests. */ public class MulticurveProviderDiscountDataSets { private static final Interpolator1D LINEAR_FLAT = CombinedInterpolatorExtrapolatorFactory.getInterpolator(Interpolator1DFactory.LINEAR, Interpolator1DFactory.FLAT_EXTRAPOLATOR, Interpolator1DFactory.FLAT_EXTRAPOLATOR); private static final Calendar CALENDAR_USD = new MondayToFridayCalendar("USD"); private static final Calendar CALENDAR_EUR = new MondayToFridayCalendar("EUR"); private static final Calendar CALENDAR_CAD = new MondayToFridayCalendar("CAD"); private static final Calendar CALENDAR_AUD = new MondayToFridayCalendar("AUD"); private static final FXMatrix FX_MATRIX = new FXMatrix(Currency.GBP, Currency.USD, 1.60); static { FX_MATRIX.addCurrency(Currency.EUR, Currency.USD, 1.40); } private static final double[] USD_DSC_TIME = new double[] {0.0, 0.5, 1.0, 2.0, 5.0, 10.0 }; private static final double[] USD_DSC_RATE = new double[] {0.0100, 0.0120, 0.0120, 0.0140, 0.0140, 0.0140 }; private static final double[] USD_DSC_DF = new double[] {1.00, 0.99, 0.98, 9.96, 0.91, 0.85 }; private static final String USD_DSC_NAME = "USD Dsc"; private static final YieldAndDiscountCurve USD_RATE_DSC = new YieldCurve(USD_DSC_NAME, new InterpolatedDoublesCurve(USD_DSC_TIME, USD_DSC_RATE, LINEAR_FLAT, true, USD_DSC_NAME)); private static final YieldAndDiscountCurve USD_DF_DSC = new DiscountCurve(USD_DSC_NAME, new InterpolatedDoublesCurve(USD_DSC_TIME, USD_DSC_DF, LINEAR_FLAT, true, USD_DSC_NAME)); private static final double[] USD_DSC_PERF_TIME = new double[] {0.0, 0.1, 0.25, 0.5, 0.75, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 12.0, 15.0, 20.0, 25.0, 30.0 }; // 20 private static final double[] USD_DSC_PERF_RATE = new double[] {0.0100, 0.0100, 0.0100, 0.0100, 0.0120, 0.0120, 0.0120, 0.0140, 0.0140, 0.0140, 0.0140, 0.0150, 0.0160, 0.0170, 0.0160, 0.0160, 0.0150, 0.0150, 0.0140, 0.0140 }; private static final YieldAndDiscountCurve USD_PERF_DSC = new YieldCurve(USD_DSC_NAME, new InterpolatedDoublesCurve(USD_DSC_PERF_TIME, USD_DSC_PERF_RATE, LINEAR_FLAT, true, USD_DSC_NAME)); private static final double[] USD_FWD3_TIME = new double[] {0.0, 0.5, 1.0, 2.0, 5.0, 10.0 }; private static final double[] USD_FWD3_RATE = new double[] {0.0150, 0.0125, 0.0150, 0.0175, 0.0150, 0.0150 }; private static final String USD_FWD3_NAME = "USD LIBOR 3M"; private static final YieldAndDiscountCurve USD_FWD3 = new YieldCurve(USD_FWD3_NAME, new InterpolatedDoublesCurve(USD_FWD3_TIME, USD_FWD3_RATE, LINEAR_FLAT, true, USD_FWD3_NAME)); private static final double[] USD_FWD6_TIME = new double[] {0.0, 0.5, 1.0, 2.0, 5.0, 10.0 }; private static final double[] USD_FWD6_RATE = new double[] {0.0175, 0.0150, 0.0170, 0.0190, 0.0165, 0.0165 }; private static final String USD_FWD6_NAME = "USD LIBOR 6M"; private static final YieldAndDiscountCurve USD_FWD6 = new YieldCurve(USD_FWD6_NAME, new InterpolatedDoublesCurve(USD_FWD6_TIME, USD_FWD6_RATE, LINEAR_FLAT, true, USD_FWD6_NAME)); private static final double[] EUR_DSC_TIME = new double[] {0.0, 0.5, 1.0, 2.0, 5.0, 10.0 }; private static final double[] EUR_DSC_RATE = new double[] {0.0150, 0.0125, 0.0150, 0.0175, 0.0150, 0.0150 }; private static final String EUR_DSC_NAME = "EUR Dsc"; private static final YieldAndDiscountCurve EUR_DSC = new YieldCurve(EUR_DSC_NAME, new InterpolatedDoublesCurve(EUR_DSC_TIME, EUR_DSC_RATE, LINEAR_FLAT, true, EUR_DSC_NAME)); private static final double[] EUR_FWD3_TIME = new double[] {0.0, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0, 10.0 }; private static final double[] EUR_FWD3_RATE = new double[] {0.0150, 0.0125, 0.0150, 0.0175, 0.0175, 0.0190, 0.0200, 0.0210 }; private static final String EUR_FWD3_NAME = "EUR EURIBOR 3M"; private static final YieldAndDiscountCurve EUR_FWD3 = new YieldCurve(EUR_FWD3_NAME, new InterpolatedDoublesCurve(EUR_FWD3_TIME, EUR_FWD3_RATE, LINEAR_FLAT, true, EUR_FWD3_NAME)); private static final double[] EUR_FWD6_TIME = new double[] {0.0, 0.5, 1.0, 2.0, 5.0, 10.0 }; private static final double[] EUR_FWD6_RATE = new double[] {0.0150, 0.0125, 0.0150, 0.0175, 0.0150, 0.0150 }; private static final String EUR_FWD6_NAME = "EUR EURIBOR 6M"; private static final YieldAndDiscountCurve EUR_FWD6 = new YieldCurve(EUR_FWD6_NAME, new InterpolatedDoublesCurve(EUR_FWD6_TIME, EUR_FWD6_RATE, LINEAR_FLAT, true, EUR_FWD6_NAME)); private static final double[] CAD_DSC_TIME = new double[] {0.0, 0.5, 1.0, 2.0, 5.0, 10.0 }; private static final double[] CAD_DSC_RATE = new double[] {0.0100, 0.0120, 0.0120, 0.0140, 0.0140, 0.0140 }; private static final String CAD_DSC_NAME = "CAD Dsc"; private static final YieldAndDiscountCurve CAD_DSC = new YieldCurve(CAD_DSC_NAME, new InterpolatedDoublesCurve(CAD_DSC_TIME, CAD_DSC_RATE, LINEAR_FLAT, true, CAD_DSC_NAME)); private static final double[] CAD_FWD3_TIME = new double[] {0.0, 0.5, 1.0, 2.0, 5.0, 10.0 }; private static final double[] CAD_FWD3_RATE = new double[] {0.0150, 0.0125, 0.0150, 0.0175, 0.0150, 0.0150 }; private static final String CAD_FWD3_NAME = "CAD CDOR3M 3M"; private static final YieldAndDiscountCurve CAD_FWD3 = new YieldCurve(CAD_FWD3_NAME, new InterpolatedDoublesCurve(CAD_FWD3_TIME, CAD_FWD3_RATE, LINEAR_FLAT, true, CAD_FWD3_NAME)); private static final double[] AUD_DSC_TIME = new double[] {0.0, 0.5, 1.0, 2.0, 5.0, 10.0 }; private static final double[] AUD_DSC_RATE = new double[] {0.0100, 0.0120, 0.0120, 0.0140, 0.0140, 0.0140 }; private static final String AUD_DSC_NAME = "AUD Dsc"; private static final YieldAndDiscountCurve AUD_DSC = new YieldCurve(AUD_DSC_NAME, new InterpolatedDoublesCurve(AUD_DSC_TIME, AUD_DSC_RATE, LINEAR_FLAT, true, AUD_DSC_NAME)); private static final double[] AUD_FWD3_TIME = new double[] {0.0, 0.5, 1.0, 2.0, 5.0, 10.0 }; private static final double[] AUD_FWD3_RATE = new double[] {0.0150, 0.0125, 0.0150, 0.0175, 0.0150, 0.0150 }; private static final String AUD_FWD3_NAME = "AUD AUDBB3M 3M"; private static final YieldAndDiscountCurve AUD_FWD3 = new YieldCurve(AUD_FWD3_NAME, new InterpolatedDoublesCurve(AUD_FWD3_TIME, AUD_FWD3_RATE, LINEAR_FLAT, true, AUD_FWD3_NAME)); private static final double[] AUD_FWD6_TIME = new double[] {0.0, 0.5, 1.0, 2.0, 5.0, 10.0 }; private static final double[] AUD_FWD6_RATE = new double[] {0.0150, 0.0125, 0.0150, 0.0175, 0.0150, 0.0150 }; private static final String AUD_FWD6_NAME = "AUD AUDBB6M 6M"; private static final YieldAndDiscountCurve AUD_FWD6 = new YieldCurve(AUD_FWD6_NAME, new InterpolatedDoublesCurve(AUD_FWD6_TIME, AUD_FWD6_RATE, LINEAR_FLAT, true, AUD_FWD6_NAME)); private static final double[] GBP_SINGLE_TIME = new double[] {0.002739726, 0.019178082, 0.082191781, 0.164383562, 0.249315068, 0.498630137, 0.747945205, 1, 1.498630137, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20, 25, 30, 35, 40, 45, 50 }; private static final double[] GBP_SINGLE_RATE = new double[] {0.00466247, 0.004799779, 0.004933739, 0.005211567, 0.005421216, 0.006076053, 0.007009252, 0.008085954, 0.010315153, 0.012462716, 0.017006001, 0.019770703, 0.02182399, 0.023484499, 0.024924994, 0.026172219, 0.027254055, 0.028183251, 0.029699473, 0.031347025, 0.032871429, 0.033250028, 0.033227865, 0.032909084, 0.032620029, 0.032487606, 0.032366873 }; private static final String GBP_SINGLE_NAME = "GBP Single curve"; private static final YieldAndDiscountCurve GBP_SINGLE = new YieldCurve(GBP_SINGLE_NAME, new InterpolatedDoublesCurve(GBP_SINGLE_TIME, GBP_SINGLE_RATE, LINEAR_FLAT, true, GBP_SINGLE_NAME)); private static final String ISSUER_NAME = "Corporate"; private static final double[] EUR_ISSUER_TIME = new double[] {0.0, 0.5, 1.0, 2.0, 5.0, 10.0 }; private static final double[] EUR_ISSUER_RATE = new double[] {0.0250, 0.0225, 0.0250, 0.0275, 0.0250, 0.0250 }; private static final String EUR_ISSUER_NAME = "EUR " + ISSUER_NAME; private static final YieldAndDiscountCurve EUR_ISSUER = new YieldCurve(EUR_ISSUER_NAME, new InterpolatedDoublesCurve(EUR_ISSUER_TIME, EUR_ISSUER_RATE, LINEAR_FLAT, true, EUR_ISSUER_NAME)); private static final String GBP35 = "GBP 3.50"; private static final double[] GBP35_TIME = new double[] {0.0, 10.0 }; private static final double[] GBP35_RATE = new double[] {0.0350, 0.0350 }; private static final YieldAndDiscountCurve CURVE_GBP_35 = new YieldCurve(GBP35, new InterpolatedDoublesCurve(GBP35_TIME, GBP35_RATE, LINEAR_FLAT, true, GBP35)); private static final String GBP30 = "GBP 3.00"; private static final double[] GBP30_TIME = new double[] {0.0, 10.0 }; private static final double[] GBP30_RATE = new double[] {0.030, 0.030 }; private static final YieldAndDiscountCurve CURVE_GBP_30 = new YieldCurve(GBP30, new InterpolatedDoublesCurve(GBP30_TIME, GBP30_RATE, LINEAR_FLAT, true, GBP30)); private static final String USD30 = "USD 3.00"; private static final double[] USD30_TIME = new double[] {0.0, 10.0 }; private static final double[] USD30_RATE = new double[] {0.030, 0.030 }; private static final YieldAndDiscountCurve CURVE_USD_30 = new YieldCurve(USD30, new InterpolatedDoublesCurve(USD30_TIME, USD30_RATE, LINEAR_FLAT, true, USD30)); private static final String AUD30 = "GBP 3.00"; private static final double[] AUD30_TIME = new double[] {0.0, 10.0 }; private static final double[] AUD30_RATE = new double[] {0.030, 0.030 }; private static final YieldAndDiscountCurve CURVE_AUD_30 = new YieldCurve(AUD30, new InterpolatedDoublesCurve(AUD30_TIME, AUD30_RATE, LINEAR_FLAT, true, AUD30)); private static final IndexIborMaster MASTER_IBOR_INDEX = IndexIborMaster.getInstance(); private static final IborIndex USDLIBOR3M = MASTER_IBOR_INDEX.getIndex("USDLIBOR3M"); private static final IborIndex USDLIBOR6M = MASTER_IBOR_INDEX.getIndex("USDLIBOR6M"); private static final IborIndex EURIBOR3M = MASTER_IBOR_INDEX.getIndex("EURIBOR3M"); private static final IborIndex EURIBOR6M = MASTER_IBOR_INDEX.getIndex("EURIBOR6M"); private static final IborIndex GBPLIBOR3M = MASTER_IBOR_INDEX.getIndex("GBPLIBOR3M"); private static final IborIndex GBPLIBOR6M = MASTER_IBOR_INDEX.getIndex("GBPLIBOR6M"); private static final IborIndex CADCDOR3M = MASTER_IBOR_INDEX.getIndex("CADCDOR3M"); private static final IborIndex AUDBB3M = MASTER_IBOR_INDEX.getIndex("AUDBB3M"); private static final IborIndex AUDBB6M = MASTER_IBOR_INDEX.getIndex("AUDBB6M"); private static final IndexON EONIA = IndexONMaster.getInstance().getIndex("EONIA"); private static final IndexON FEDFUND = IndexONMaster.getInstance().getIndex("FED FUND"); private static final IndexON SONIA = IndexONMaster.getInstance().getIndex("SONIA"); private static final IndexON BRAZIL_CDI = IndexONMaster.getInstance().getIndex("CDI"); private static final String NAME_EUR_PRICE_INDEX = "EUR HICP"; private static final IndexPrice PRICE_INDEX_EUR = new IndexPrice(NAME_EUR_PRICE_INDEX, Currency.EUR); private static final double[] INDEX_VALUE_EUR = new double[] {113.11, 113.10, 115.12, 123.23, 133.33, 155.55, 175.55, 195.55 }; // May11, June11, 1Y, 5Y, 10Y, 20Y private static final double[] TIME_VALUE_EUR = new double[] {-4.0 / 12.0, -2.0 / 12.0, 9.0 / 12.0, 4.0 + 9.0 / 12.0, 9.0 + 9.0 / 12.0, 19.0 + 9.0 / 12.0, 29.0 + 9.0 / 12.0, 39.0 + 9.0 / 12.0 }; private static final InterpolatedDoublesCurve CURVE_EUR = InterpolatedDoublesCurve.from(TIME_VALUE_EUR, INDEX_VALUE_EUR, new LinearInterpolator1D(), NAME_EUR_PRICE_INDEX); private static final PriceIndexCurveSimple PRICE_INDEX_CURVE_EUR = new PriceIndexCurveSimple(CURVE_EUR); private static final String NAME_GBP_PRICE_INDEX = "UK RPI"; private static final IndexPrice PRICE_INDEX_GBP = new IndexPrice(NAME_GBP_PRICE_INDEX, Currency.GBP); private static final double[] INDEX_VALUE_GBP = new double[] {228.4, 232.0, 240.0, 251.1, 275.2, 456.7 }; // Dec10, 1Y, 5Y, 10Y, 20Y, 50Y private static final double[] TIME_VALUE_GBP = new double[] {-8.0 / 12.0, 4.0 / 12.0, 4.0 + 4.0 / 12.0, 9.0 + 4.0 / 12.0, 19.0 + 4.0 / 12.0, 49.0 + 4.0 / 12.0 }; private static final InterpolatedDoublesCurve CURVE_GBP = InterpolatedDoublesCurve.from(TIME_VALUE_GBP, INDEX_VALUE_GBP, new LinearInterpolator1D(), NAME_GBP_PRICE_INDEX); private static final PriceIndexCurveSimple PRICE_INDEX_CURVE_GBP = new PriceIndexCurveSimple(CURVE_GBP); private static final String NAME_USD_PRICE_INDEX = "US CPI-U"; private static final IndexPrice PRICE_INDEX_USD = new IndexPrice(NAME_USD_PRICE_INDEX, Currency.USD); private static final double[] INDEX_VALUE_USD = new double[] {225.964, 225.722, 230.0, 251.1, 280.2, 452.7 }; // May11, June11, 1Y, 5Y, 10Y, 20Y, 50Y private static final double[] TIME_VALUE_USD = new double[] {-8.0 / 12.0, 4.0 / 12.0, 4.0 + 4.0 / 12.0, 9.0 + 4.0 / 12.0, 19.0 + 4.0 / 12.0, 49.0 + 4.0 / 12.0 }; private static final InterpolatedDoublesCurve CURVE_USD = InterpolatedDoublesCurve.from(TIME_VALUE_USD, INDEX_VALUE_USD, new LinearInterpolator1D(), NAME_USD_PRICE_INDEX); private static final PriceIndexCurveSimple PRICE_INDEX_CURVE_USD = new PriceIndexCurveSimple(CURVE_USD); private static final int MONTH_LAG_US = 3; private static final int SPOT_LAG_US = 1; private static final BusinessDayConvention BUSINESS_DAY_USD = BusinessDayConventions.FOLLOWING; private static final String NAME_AUD_PRICE_INDEX = "AUD CPI"; private static final IndexPrice PRICE_INDEX_AUD = new IndexPrice(NAME_AUD_PRICE_INDEX, Currency.AUD); private static final double[] INDEX_VALUE_AUD = new double[] {113.10, 115.12, 123.23, 133.33, 155.55, 175.55, 195.55 }; // May11, June11, 1Y, 5Y, 10Y, 20Y private static final double[] TIME_VALUE_AUD = new double[] {-3.0 / 12.0, 9.0 / 12.0, 4.0 + 9.0 / 12.0, 9.0 + 9.0 / 12.0, 19.0 + 9.0 / 12.0, 29.0 + 9.0 / 12.0, 39.0 + 9.0 / 12.0 }; private static final InterpolatedDoublesCurve CURVE_AUD = InterpolatedDoublesCurve.from(TIME_VALUE_AUD, INDEX_VALUE_AUD, new LinearInterpolator1D(), NAME_AUD_PRICE_INDEX); private static final PriceIndexCurveSimple PRICE_INDEX_CURVE_AUD = new PriceIndexCurveSimple(CURVE_AUD); private static final LegalEntityFilter<LegalEntity> META = new LegalEntityShortName(); private static final Pair<Object, LegalEntityFilter<LegalEntity>> ISSUER_UK_GOVT = Pairs.of((Object) "UK GOVT", META); private static final Pair<Object, LegalEntityFilter<LegalEntity>> ISSUER_US_GOVT = Pairs.of((Object) "US GOVT", META); private static final Pair<Object, LegalEntityFilter<LegalEntity>> ISSUER_AUD_GOVT = Pairs.of((Object) "AUD GOVT", META); private static final InflationIssuerProviderDiscount MARKET_1 = new InflationIssuerProviderDiscount(); static { MARKET_1.setCurve(Currency.AUD, AUD_DSC); MARKET_1.setCurve(AUDBB3M, AUD_FWD3); MARKET_1.setCurve(AUDBB6M, AUD_FWD6); MARKET_1.setCurve(Currency.USD, USD_RATE_DSC); MARKET_1.setCurve(Currency.EUR, EUR_DSC); MARKET_1.setCurve(Currency.GBP, CURVE_GBP_35); MARKET_1.setCurve(USDLIBOR3M, USD_FWD3); MARKET_1.setCurve(EONIA, EUR_DSC); MARKET_1.setCurve(EURIBOR3M, EUR_FWD3); MARKET_1.setCurve(EURIBOR6M, EUR_FWD6); MARKET_1.setCurve(PRICE_INDEX_EUR, PRICE_INDEX_CURVE_EUR); MARKET_1.setCurve(PRICE_INDEX_GBP, PRICE_INDEX_CURVE_GBP); MARKET_1.setCurve(PRICE_INDEX_USD, PRICE_INDEX_CURVE_USD); MARKET_1.setCurve(PRICE_INDEX_AUD, PRICE_INDEX_CURVE_AUD); MARKET_1.setCurve(ISSUER_UK_GOVT, CURVE_GBP_30); MARKET_1.setCurve(ISSUER_US_GOVT, CURVE_USD_30); MARKET_1.setCurve(ISSUER_AUD_GOVT, CURVE_AUD_30); } private static final MulticurveProviderDiscount SINGLECURVES_YIELD_USD = new MulticurveProviderDiscount(); static { SINGLECURVES_YIELD_USD.setCurve(Currency.USD, USD_RATE_DSC); SINGLECURVES_YIELD_USD.setCurve(FEDFUND, USD_RATE_DSC); SINGLECURVES_YIELD_USD.setCurve(USDLIBOR3M, USD_RATE_DSC); SINGLECURVES_YIELD_USD.setCurve(USDLIBOR6M, USD_RATE_DSC); } private static final MulticurveProviderDiscount SINGLECURVES_DF_USD = new MulticurveProviderDiscount(); static { SINGLECURVES_DF_USD.setCurve(Currency.USD, USD_DF_DSC); SINGLECURVES_DF_USD.setCurve(FEDFUND, USD_DF_DSC); SINGLECURVES_DF_USD.setCurve(USDLIBOR3M, USD_DF_DSC); SINGLECURVES_DF_USD.setCurve(USDLIBOR6M, USD_DF_DSC); } private static final MulticurveProviderDiscount SINGLECURVES_PERF_USD = new MulticurveProviderDiscount(); static { SINGLECURVES_PERF_USD.setCurve(Currency.USD, USD_PERF_DSC); SINGLECURVES_PERF_USD.setCurve(FEDFUND, USD_PERF_DSC); SINGLECURVES_PERF_USD.setCurve(USDLIBOR3M, USD_PERF_DSC); SINGLECURVES_PERF_USD.setCurve(USDLIBOR6M, USD_PERF_DSC); } private static final MulticurveProviderDiscount MULTICURVES_EUR_USD = new MulticurveProviderDiscount(); static { MULTICURVES_EUR_USD.setForexMatrix(FX_MATRIX); MULTICURVES_EUR_USD.setCurve(Currency.USD, USD_RATE_DSC); MULTICURVES_EUR_USD.setCurve(FEDFUND, USD_RATE_DSC); MULTICURVES_EUR_USD.setCurve(Currency.EUR, EUR_DSC); MULTICURVES_EUR_USD.setCurve(USDLIBOR3M, USD_FWD3); MULTICURVES_EUR_USD.setCurve(USDLIBOR6M, USD_FWD6); MULTICURVES_EUR_USD.setCurve(EONIA, EUR_DSC); MULTICURVES_EUR_USD.setCurve(EURIBOR3M, EUR_FWD3); MULTICURVES_EUR_USD.setCurve(EURIBOR6M, EUR_FWD6); } private static final MulticurveProviderDiscount MULTICURVES_GBP_USD = new MulticurveProviderDiscount(); static { MULTICURVES_GBP_USD.setCurve(Currency.USD, USD_RATE_DSC); MULTICURVES_GBP_USD.setCurve(FEDFUND, USD_RATE_DSC); MULTICURVES_GBP_USD.setCurve(USDLIBOR3M, USD_FWD3); MULTICURVES_GBP_USD.setCurve(USDLIBOR6M, USD_FWD6); MULTICURVES_GBP_USD.setCurve(Currency.GBP, CURVE_GBP_30); MULTICURVES_GBP_USD.setCurve(SONIA, CURVE_GBP_30); MULTICURVES_GBP_USD.setForexMatrix(FX_MATRIX); } private static final MulticurveProviderDiscount SINGLECURVES_GBP = new MulticurveProviderDiscount(); static { SINGLECURVES_GBP.setCurve(Currency.GBP, GBP_SINGLE); SINGLECURVES_GBP.setCurve(SONIA, GBP_SINGLE); SINGLECURVES_GBP.setCurve(GBPLIBOR3M, GBP_SINGLE); SINGLECURVES_GBP.setCurve(GBPLIBOR6M, GBP_SINGLE); } private static final MulticurveProviderDiscount MULTICURVES_USD_WITHOUT_DISCOUNT = new MulticurveProviderDiscount(); private static final MulticurveProviderDiscount MULTICURVES_CAD = new MulticurveProviderDiscount(); static { MULTICURVES_CAD.setCurve(Currency.CAD, CAD_DSC); MULTICURVES_CAD.setCurve(CADCDOR3M, CAD_FWD3); } private static final Map<Pair<Object, LegalEntityFilter<LegalEntity>>, YieldAndDiscountCurve> ISSUER_CURVES = new LinkedHashMap<>(); static { ISSUER_CURVES.put(Pairs.of((Object) ISSUER_NAME, META), EUR_ISSUER); } private static final IssuerProviderDiscount PROVIDER_ISSUER = new IssuerProviderDiscount(MULTICURVES_EUR_USD, ISSUER_CURVES); // Seasonal factors (from February/January to December/November) // private static final double[] SEASONAL_FACTOR_EUR = new double[] {1.0010, 1.0010, 1.0020, 0.9990, 0.9990, 0.9990, 0.9990, 1.0000, 1.0010, 1.0010, 1.0010}; // private static final double[] SEASONAL_FACTOR_USD = new double[] {1.0010, 1.0010, 1.0020, 0.9990, 0.9990, 0.9990, 0.9990, 1.0000, 1.0010, 1.0010, 1.0010 }; // private static final double[] SEASONAL_FACTOR_GBP = new double[] {1.0010, 1.0010, 1.0020, 0.9990, 0.9990, 0.9990, 0.9990, 1.0000, 1.0010, 1.0010, 1.0010}; // Price index data // Implementation note : we have had the value of November 2001 for test purpose. private static final double[] UKRPI_VALUE_2001 = new double[] {217.9 }; private static final double[] UKRPI_VALUE_2010 = new double[] {217.9, 219.2, 220.7, 222.8, 223.6, 224.1, 223.6, 224.5, 225.3, 225.8, 226.8, 228.4 }; private static final double[] UKRPI_VALUE_2011 = new double[] {229, 231.3, 232.5, 234.4, 235.2, 235.2, 234.7, 236.1, 237.9, 238.0, 238.5, 239.4 }; private static final double[] UKRPI_VALUE_2012 = new double[] {238.0, 239.9, 240.8, 242.5, 242.4, 241.8, 242.1, 243.0, 244.2, 245.6, 245.6, 246.8 }; private static final double[] UKRPI_VALUE_2013 = new double[] {245.8, 247.6, 248.7, 249.5, 250.0, 249.7, 249.7, 251.0, 251.9, 251.9, 252.1, 253.4 }; private static final double[] UKRPI_VALUE_2014 = new double[] {252.6, 254.2, 254.8, 255.7 }; private static final double[] UKRPI_VALUE = new double[1 + 4 * 12 + UKRPI_VALUE_2014.length]; static { System.arraycopy(UKRPI_VALUE_2001, 0, UKRPI_VALUE, 0, 1); System.arraycopy(UKRPI_VALUE_2010, 0, UKRPI_VALUE, 1, 12); System.arraycopy(UKRPI_VALUE_2011, 0, UKRPI_VALUE, 13, 12); System.arraycopy(UKRPI_VALUE_2012, 0, UKRPI_VALUE, 25, 12); System.arraycopy(UKRPI_VALUE_2013, 0, UKRPI_VALUE, 37, 12); System.arraycopy(UKRPI_VALUE_2014, 0, UKRPI_VALUE, 49, UKRPI_VALUE_2014.length); } private static final ZonedDateTime[] UKRPI_DATE = new ZonedDateTime[] {DateUtils.getUTCDate(2001, 11, 30), DateUtils.getUTCDate(2010, 1, 31), DateUtils.getUTCDate(2010, 2, 28), DateUtils.getUTCDate(2010, 3, 31), DateUtils.getUTCDate(2010, 4, 30), DateUtils.getUTCDate(2010, 5, 31), DateUtils.getUTCDate(2010, 6, 30), DateUtils.getUTCDate(2010, 7, 31), DateUtils.getUTCDate(2010, 8, 31), DateUtils.getUTCDate(2010, 9, 30), DateUtils.getUTCDate(2010, 10, 31), DateUtils.getUTCDate(2010, 11, 30), DateUtils.getUTCDate(2010, 12, 31), DateUtils.getUTCDate(2011, 1, 31), DateUtils.getUTCDate(2011, 2, 28), DateUtils.getUTCDate(2011, 3, 31), DateUtils.getUTCDate(2011, 4, 30), DateUtils.getUTCDate(2011, 5, 31), DateUtils.getUTCDate(2011, 6, 30), DateUtils.getUTCDate(2011, 7, 31), DateUtils.getUTCDate(2011, 8, 31), DateUtils.getUTCDate(2011, 9, 30), DateUtils.getUTCDate(2011, 10, 30), DateUtils.getUTCDate(2011, 11, 30), DateUtils.getUTCDate(2011, 12, 31), DateUtils.getUTCDate(2012, 1, 31), DateUtils.getUTCDate(2012, 2, 29), DateUtils.getUTCDate(2012, 3, 31), DateUtils.getUTCDate(2012, 4, 30), DateUtils.getUTCDate(2012, 5, 31), DateUtils.getUTCDate(2012, 6, 30), DateUtils.getUTCDate(2012, 7, 31), DateUtils.getUTCDate(2012, 8, 31), DateUtils.getUTCDate(2012, 9, 30), DateUtils.getUTCDate(2012, 10, 31), DateUtils.getUTCDate(2012, 11, 30), DateUtils.getUTCDate(2012, 12, 31), DateUtils.getUTCDate(2013, 1, 31), DateUtils.getUTCDate(2013, 2, 28), DateUtils.getUTCDate(2013, 3, 31), DateUtils.getUTCDate(2013, 4, 30), DateUtils.getUTCDate(2013, 5, 31), DateUtils.getUTCDate(2013, 6, 30), DateUtils.getUTCDate(2013, 7, 31), DateUtils.getUTCDate(2013, 8, 31), DateUtils.getUTCDate(2013, 9, 30), DateUtils.getUTCDate(2013, 10, 31), DateUtils.getUTCDate(2013, 11, 30), DateUtils.getUTCDate(2013, 12, 31), DateUtils.getUTCDate(2014, 1, 31), DateUtils.getUTCDate(2014, 2, 28), DateUtils.getUTCDate(2014, 3, 31), DateUtils.getUTCDate(2014, 4, 30) }; private static final ZonedDateTimeDoubleTimeSeries UKRPI_TIME_SERIES = ImmutableZonedDateTimeDoubleTimeSeries.ofUTC(UKRPI_DATE, UKRPI_VALUE); // US : CPI-U 2009-2011 private static final double[] USCPI_VALUE_2005 = new double[] {211.143, 212.193, 212.709, 213.240, 213.856, 215.693, 215.351, 215.834, 215.969, 216.177, 216.330, 215.949 }; private static final double[] USCPI_VALUE_2006 = new double[] {211.143, 212.193, 212.709, 213.240, 213.856, 215.693, 215.351, 215.834, 215.969, 216.177, 216.330, 215.949 }; private static final double[] USCPI_VALUE_2007 = new double[] {211.143, 212.193, 212.709, 213.240, 213.856, 215.693, 215.351, 215.834, 215.969, 216.177, 216.330, 215.949 }; private static final double[] USCPI_VALUE_2008 = new double[] {211.143, 212.193, 212.709, 213.240, 213.856, 215.693, 215.351, 215.834, 215.969, 216.177, 216.330, 215.949 };// TODO : put the right value for 2005, 2006, 2007, 2008 private static final double[] USCPI_VALUE_2009 = new double[] {211.143, 212.193, 212.709, 213.240, 213.856, 215.693, 215.351, 215.834, 215.969, 216.177, 216.330, 215.949 }; private static final double[] USCPI_VALUE_2010 = new double[] {216.687, 216.741, 217.631, 218.009, 218.178, 217.965, 218.011, 218.312, 218.439, 218.711, 218.803, 219.179 }; private static final double[] USCPI_VALUE_2011 = new double[] {220.223, 221.309, 223.467, 224.906, 225.964, 225.722, 225.922, 226.545, 226.889, 226.421, 226.230, 225.672 }; private static final double[] USCPI_VALUE_2012 = new double[] {226.655, 227.663, 229.392, 230.085, 229.815, 229.478, 229.104, 230.379, 231.407, 231.317, 230.221, 229.601 }; private static final double[] USCPI_VALUE_2013 = new double[] {230.280 }; private static final double[] USCPI_VALUE = new double[8 * 12 + USCPI_VALUE_2013.length]; static { System.arraycopy(USCPI_VALUE_2005, 0, USCPI_VALUE, 0, 12); System.arraycopy(USCPI_VALUE_2006, 0, USCPI_VALUE, 12, 12); System.arraycopy(USCPI_VALUE_2007, 0, USCPI_VALUE, 24, 12); System.arraycopy(USCPI_VALUE_2008, 0, USCPI_VALUE, 36, 12); System.arraycopy(USCPI_VALUE_2009, 0, USCPI_VALUE, 48, 12); System.arraycopy(USCPI_VALUE_2010, 0, USCPI_VALUE, 60, 12); System.arraycopy(USCPI_VALUE_2011, 0, USCPI_VALUE, 72, 12); System.arraycopy(USCPI_VALUE_2012, 0, USCPI_VALUE, 84, 12); System.arraycopy(USCPI_VALUE_2013, 0, USCPI_VALUE, 96, USCPI_VALUE_2013.length); } private static final ZonedDateTime[] USCPI_DATE = new ZonedDateTime[] { DateUtils.getUTCDate(2005, 1, 31), DateUtils.getUTCDate(2005, 2, 28), DateUtils.getUTCDate(2005, 3, 31), DateUtils.getUTCDate(2005, 4, 30), DateUtils.getUTCDate(2005, 5, 31), DateUtils.getUTCDate(2005, 6, 30), DateUtils.getUTCDate(2005, 7, 31), DateUtils.getUTCDate(2005, 8, 31), DateUtils.getUTCDate(2005, 9, 30), DateUtils.getUTCDate(2005, 10, 31), DateUtils.getUTCDate(2005, 11, 30), DateUtils.getUTCDate(2005, 12, 31), DateUtils.getUTCDate(2006, 1, 31), DateUtils.getUTCDate(2006, 2, 28), DateUtils.getUTCDate(2006, 3, 31), DateUtils.getUTCDate(2006, 4, 30), DateUtils.getUTCDate(2006, 5, 31), DateUtils.getUTCDate(2006, 6, 30), DateUtils.getUTCDate(2006, 7, 31), DateUtils.getUTCDate(2006, 8, 31), DateUtils.getUTCDate(2006, 9, 30), DateUtils.getUTCDate(2006, 10, 31), DateUtils.getUTCDate(2006, 11, 30), DateUtils.getUTCDate(2006, 12, 31), DateUtils.getUTCDate(2007, 1, 31), DateUtils.getUTCDate(2007, 2, 28), DateUtils.getUTCDate(2007, 3, 31), DateUtils.getUTCDate(2007, 4, 30), DateUtils.getUTCDate(2007, 5, 31), DateUtils.getUTCDate(2007, 6, 30), DateUtils.getUTCDate(2007, 7, 31), DateUtils.getUTCDate(2007, 8, 31), DateUtils.getUTCDate(2007, 9, 30), DateUtils.getUTCDate(2007, 10, 31), DateUtils.getUTCDate(2007, 11, 30), DateUtils.getUTCDate(2007, 12, 31), DateUtils.getUTCDate(2008, 1, 31), DateUtils.getUTCDate(2008, 2, 28), DateUtils.getUTCDate(2008, 3, 31), DateUtils.getUTCDate(2008, 4, 30), DateUtils.getUTCDate(2008, 5, 31), DateUtils.getUTCDate(2008, 6, 30), DateUtils.getUTCDate(2008, 7, 31), DateUtils.getUTCDate(2008, 8, 31), DateUtils.getUTCDate(2008, 9, 30), DateUtils.getUTCDate(2008, 10, 31), DateUtils.getUTCDate(2008, 11, 30), DateUtils.getUTCDate(2008, 12, 31), DateUtils.getUTCDate(2009, 1, 31), DateUtils.getUTCDate(2009, 2, 28), DateUtils.getUTCDate(2009, 3, 31), DateUtils.getUTCDate(2009, 4, 30), DateUtils.getUTCDate(2009, 5, 31), DateUtils.getUTCDate(2009, 6, 30), DateUtils.getUTCDate(2009, 7, 31), DateUtils.getUTCDate(2009, 8, 31), DateUtils.getUTCDate(2009, 9, 30), DateUtils.getUTCDate(2009, 10, 31), DateUtils.getUTCDate(2009, 11, 30), DateUtils.getUTCDate(2009, 12, 31), DateUtils.getUTCDate(2010, 1, 31), DateUtils.getUTCDate(2010, 2, 28), DateUtils.getUTCDate(2010, 3, 31), DateUtils.getUTCDate(2010, 4, 30), DateUtils.getUTCDate(2010, 5, 31), DateUtils.getUTCDate(2010, 6, 30), DateUtils.getUTCDate(2010, 7, 31), DateUtils.getUTCDate(2010, 8, 31), DateUtils.getUTCDate(2010, 9, 30), DateUtils.getUTCDate(2010, 10, 31), DateUtils.getUTCDate(2010, 11, 30), DateUtils.getUTCDate(2010, 12, 31), DateUtils.getUTCDate(2011, 1, 31), DateUtils.getUTCDate(2011, 2, 28), DateUtils.getUTCDate(2011, 3, 31), DateUtils.getUTCDate(2011, 4, 30), DateUtils.getUTCDate(2011, 5, 31), DateUtils.getUTCDate(2011, 6, 30), DateUtils.getUTCDate(2011, 7, 31), DateUtils.getUTCDate(2011, 8, 31), DateUtils.getUTCDate(2011, 9, 30), DateUtils.getUTCDate(2011, 10, 31), DateUtils.getUTCDate(2011, 11, 30), DateUtils.getUTCDate(2011, 12, 31), DateUtils.getUTCDate(2012, 1, 31), DateUtils.getUTCDate(2012, 2, 29), DateUtils.getUTCDate(2012, 3, 31), DateUtils.getUTCDate(2012, 4, 30), DateUtils.getUTCDate(2012, 5, 31), DateUtils.getUTCDate(2012, 6, 30), DateUtils.getUTCDate(2012, 7, 31), DateUtils.getUTCDate(2012, 8, 31), DateUtils.getUTCDate(2012, 9, 30), DateUtils.getUTCDate(2012, 10, 31), DateUtils.getUTCDate(2012, 11, 30), DateUtils.getUTCDate(2012, 12, 31), DateUtils.getUTCDate(2013, 1, 31) }; private static final ZonedDateTimeDoubleTimeSeries USCPI_TIME_SERIES = ImmutableZonedDateTimeDoubleTimeSeries.ofUTC(USCPI_DATE, USCPI_VALUE); // Europe : EURO HICP-X 2009-2011 private static final double[] EUROHICPX_VALUE_2008 = new double[] {105.80, 106.17, 107.21, 107.55, 108.23, 108.64, 108.47, 108.32, 108.52, 108.55, 108.02, 107.88 }; private static final double[] EUROHICPX_VALUE_2009 = new double[] {106.98, 107.42, 107.82, 108.21, 108.27, 108.48, 107.77, 108.14, 108.16, 108.41, 108.54, 108.88 }; private static final double[] EUROHICPX_VALUE_2010 = new double[] {107.99, 108.33, 109.53, 109.98, 110.10, 110.10, 109.63, 109.85, 110.19, 110.52, 110.62, 111.29 }; private static final double[] EUROHICPX_VALUE_2011 = new double[] {110.49, 110.96, 112.46, 113.09, 113.09, 113.08, 112.44, 112.65, 113.47, 113.87, 113.97, 114.35 }; private static final double[] EUROHICPX_VALUE_2012 = new double[] {113.42, 113.99, 115.46, 116.00, 115.84, 115.75, 115.15, 115.59, 116.43, 116.71, 116.47, 115.67 }; private static final double[] EUROHICPX_VALUE_2013 = new double[] {116.09 }; private static final double[] EUROHICPX_VALUE = new double[5 * 12 + EUROHICPX_VALUE_2013.length]; static { System.arraycopy(EUROHICPX_VALUE_2008, 0, EUROHICPX_VALUE, 0, 12); System.arraycopy(EUROHICPX_VALUE_2009, 0, EUROHICPX_VALUE, 12, 12); System.arraycopy(EUROHICPX_VALUE_2010, 0, EUROHICPX_VALUE, 24, 12); System.arraycopy(EUROHICPX_VALUE_2011, 0, EUROHICPX_VALUE, 36, 12); System.arraycopy(EUROHICPX_VALUE_2012, 0, EUROHICPX_VALUE, 48, 12); System.arraycopy(EUROHICPX_VALUE_2013, 0, EUROHICPX_VALUE, 60, EUROHICPX_VALUE_2013.length); } private static final ZonedDateTime[] EUROHICPX_DATE = new ZonedDateTime[] {DateUtils.getUTCDate(2007, 12, 31), DateUtils.getUTCDate(2008, 1, 31), DateUtils.getUTCDate(2008, 2, 29), DateUtils.getUTCDate(2008, 3, 31), DateUtils.getUTCDate(2008, 4, 30), DateUtils.getUTCDate(2008, 5, 31), DateUtils.getUTCDate(2008, 6, 30), DateUtils.getUTCDate(2008, 7, 31), DateUtils.getUTCDate(2008, 8, 31), DateUtils.getUTCDate(2008, 9, 30), DateUtils.getUTCDate(2008, 10, 30), DateUtils.getUTCDate(2008, 11, 30), DateUtils.getUTCDate(2008, 12, 31), DateUtils.getUTCDate(2009, 1, 31), DateUtils.getUTCDate(2009, 2, 28), DateUtils.getUTCDate(2009, 3, 31), DateUtils.getUTCDate(2009, 4, 30), DateUtils.getUTCDate(2009, 5, 31), DateUtils.getUTCDate(2009, 6, 30), DateUtils.getUTCDate(2009, 7, 31), DateUtils.getUTCDate(2009, 8, 31), DateUtils.getUTCDate(2009, 9, 30), DateUtils.getUTCDate(2009, 10, 30), DateUtils.getUTCDate(2009, 11, 30), DateUtils.getUTCDate(2009, 12, 31), DateUtils.getUTCDate(2010, 1, 31), DateUtils.getUTCDate(2010, 2, 28), DateUtils.getUTCDate(2010, 3, 31), DateUtils.getUTCDate(2010, 4, 30), DateUtils.getUTCDate(2010, 5, 31), DateUtils.getUTCDate(2010, 6, 30), DateUtils.getUTCDate(2010, 7, 31), DateUtils.getUTCDate(2010, 8, 31), DateUtils.getUTCDate(2010, 9, 30), DateUtils.getUTCDate(2010, 10, 31), DateUtils.getUTCDate(2010, 11, 30), DateUtils.getUTCDate(2010, 12, 31), DateUtils.getUTCDate(2011, 1, 31), DateUtils.getUTCDate(2011, 2, 28), DateUtils.getUTCDate(2011, 3, 31), DateUtils.getUTCDate(2011, 4, 30), DateUtils.getUTCDate(2011, 5, 31), DateUtils.getUTCDate(2011, 6, 30), DateUtils.getUTCDate(2011, 7, 31), DateUtils.getUTCDate(2011, 8, 31), DateUtils.getUTCDate(2011, 9, 30), DateUtils.getUTCDate(2011, 10, 31), DateUtils.getUTCDate(2011, 11, 30), DateUtils.getUTCDate(2011, 12, 31), DateUtils.getUTCDate(2012, 1, 31), DateUtils.getUTCDate(2012, 2, 29), DateUtils.getUTCDate(2012, 3, 31), DateUtils.getUTCDate(2012, 4, 30), DateUtils.getUTCDate(2012, 5, 31), DateUtils.getUTCDate(2012, 6, 30), DateUtils.getUTCDate(2012, 7, 31), DateUtils.getUTCDate(2012, 8, 31), DateUtils.getUTCDate(2012, 9, 30), DateUtils.getUTCDate(2012, 10, 30), DateUtils.getUTCDate(2012, 11, 30), DateUtils.getUTCDate(2012, 12, 31) }; private static final ZonedDateTimeDoubleTimeSeries EUROHICPX_TIME_SERIES = ImmutableZonedDateTimeDoubleTimeSeries.ofUTC(EUROHICPX_DATE, EUROHICPX_VALUE); // Australia : AUD CPI 2009-2013 private static final double[] AUDCPI_VALUE_2008 = new double[] {90.3, 91.6, 92.7, 92.4 }; private static final double[] AUDCPI_VALUE_2009 = new double[] {92.5, 92.9, 93.8, 94.3 }; private static final double[] AUDCPI_VALUE_2010 = new double[] {95.2, 95.8, 96.5, 96.9 }; private static final double[] AUDCPI_VALUE_2011 = new double[] {98.3, 99.2, 99.8, 99.8 }; private static final double[] AUDCPI_VALUE_2012 = new double[] {99.9, 100.4, 101.8, 102.0 }; private static final double[] AUDCPI_VALUE_2013 = new double[] {102.4, 102.8, 104.0 }; private static final double[] AUDCPI_VALUE = new double[5 * 4 + AUDCPI_VALUE_2013.length]; static { System.arraycopy(AUDCPI_VALUE_2008, 0, AUDCPI_VALUE, 0, 4); System.arraycopy(AUDCPI_VALUE_2009, 0, AUDCPI_VALUE, 4, 4); System.arraycopy(AUDCPI_VALUE_2010, 0, AUDCPI_VALUE, 8, 4); System.arraycopy(AUDCPI_VALUE_2011, 0, AUDCPI_VALUE, 12, 4); System.arraycopy(AUDCPI_VALUE_2012, 0, AUDCPI_VALUE, 16, 4); System.arraycopy(AUDCPI_VALUE_2013, 0, AUDCPI_VALUE, 20, AUDCPI_VALUE_2013.length); } private static final ZonedDateTime[] AUDCPI_DATE = new ZonedDateTime[] {DateUtils.getUTCDate(2008, 3, 31), DateUtils.getUTCDate(2008, 6, 30), DateUtils.getUTCDate(2008, 9, 30), DateUtils.getUTCDate(2008, 12, 31), DateUtils.getUTCDate(2009, 3, 31), DateUtils.getUTCDate(2009, 6, 30), DateUtils.getUTCDate(2009, 9, 30), DateUtils.getUTCDate(2009, 12, 31), DateUtils.getUTCDate(2010, 3, 31), DateUtils.getUTCDate(2010, 6, 30), DateUtils.getUTCDate(2010, 9, 30), DateUtils.getUTCDate(2010, 12, 31), DateUtils.getUTCDate(2011, 3, 31), DateUtils.getUTCDate(2011, 6, 30), DateUtils.getUTCDate(2011, 9, 30), DateUtils.getUTCDate(2011, 12, 31), DateUtils.getUTCDate(2012, 3, 31), DateUtils.getUTCDate(2012, 6, 30), DateUtils.getUTCDate(2012, 9, 30), DateUtils.getUTCDate(2012, 12, 31), DateUtils.getUTCDate(2013, 3, 31), DateUtils.getUTCDate(2013, 6, 30), DateUtils.getUTCDate(2013, 9, 30), }; private static final ZonedDateTimeDoubleTimeSeries AUDCPI_TIME_SERIES = ImmutableZonedDateTimeDoubleTimeSeries.ofUTC(AUDCPI_DATE, AUDCPI_VALUE); /** * Returns a market with three currencies (EUR, USD, GBP), three Ibor indexes (Euribor3M, Euribor6M, UsdLibor3M) and three inflation (Euro HICP x, UK RPI and US CPI-U). * @return The market. */ public static InflationIssuerProviderDiscount createMarket1() { return MARKET_1; } /** * Creates a market with three currencies (EUR, USD, GBP), three Ibor indexes (Euribor3M, Euribor6M, UsdLibor3M) and three inflation (Euro HICP x, UK RPI and US CPI-U). * The US CPI-U price curve is constructed to have the correct past data (if available in the time series) and a fake 2% inflation for the future. * No seasonal adjustment is done. * @param pricingDate The data for which the curve is constructed. * @return The market. */ public static InflationIssuerProviderDiscount createMarket1(final ZonedDateTime pricingDate) { final InflationIssuerProviderDiscount market = new InflationIssuerProviderDiscount(); market.setCurve(Currency.USD, USD_RATE_DSC); market.setCurve(Currency.EUR, EUR_DSC); market.setCurve(Currency.GBP, CURVE_GBP_35); market.setCurve(Currency.AUD, AUD_DSC); market.setCurve(USDLIBOR3M, USD_FWD3); market.setCurve(EURIBOR3M, EUR_FWD3); market.setCurve(EURIBOR6M, EUR_FWD6); market.setCurve(AUDBB3M, AUD_FWD3); market.setCurve(AUDBB6M, AUD_FWD6); market.setCurve(PRICE_INDEX_EUR, PRICE_INDEX_CURVE_EUR); market.setCurve(PRICE_INDEX_GBP, PRICE_INDEX_CURVE_GBP); market.setCurve(ISSUER_UK_GOVT, CURVE_GBP_30); market.setCurve(ISSUER_US_GOVT, CURVE_USD_30); final ZonedDateTime spotUs = ScheduleCalculator.getAdjustedDate(pricingDate, SPOT_LAG_US, CALENDAR_USD); final ZonedDateTime referenceInterpolatedDate = spotUs.minusMonths(MONTH_LAG_US); final ZonedDateTime[] referenceDate = new ZonedDateTime[2]; referenceDate[0] = referenceInterpolatedDate.minusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); referenceDate[1] = referenceDate[0].plusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); final int[] yearUs = new int[] {1, 5, 10, 20, 50 }; final double[] indexValueUs = new double[2 + 2 * yearUs.length]; final double[] timeValueUs = new double[2 + 2 * yearUs.length]; indexValueUs[0] = USCPI_TIME_SERIES.getValue(referenceDate[0]); indexValueUs[1] = USCPI_TIME_SERIES.getValue(referenceDate[1]); timeValueUs[0] = TimeCalculator.getTimeBetween(pricingDate, referenceDate[0]); timeValueUs[1] = TimeCalculator.getTimeBetween(pricingDate, referenceDate[1]); final ZonedDateTime[] maturityDateUs = new ZonedDateTime[2 * yearUs.length]; // double[] maturityTimeUs = new double[yearUs.length]; for (int loopus = 0; loopus < yearUs.length; loopus++) { maturityDateUs[2 * loopus] = ScheduleCalculator.getAdjustedDate(referenceDate[0], Period.ofYears(yearUs[loopus]), BUSINESS_DAY_USD, CALENDAR_USD); maturityDateUs[2 * loopus + 1] = ScheduleCalculator.getAdjustedDate(referenceDate[1], Period.ofYears(yearUs[loopus]), BUSINESS_DAY_USD, CALENDAR_USD); timeValueUs[2 + 2 * loopus] = TimeCalculator.getTimeBetween(pricingDate, maturityDateUs[2 * loopus]); timeValueUs[2 + 2 * loopus + 1] = TimeCalculator.getTimeBetween(pricingDate, maturityDateUs[2 * loopus + 1]); indexValueUs[2 + 2 * loopus] = indexValueUs[0] * Math.pow(1 + 0.02, yearUs[loopus]); // 2% inflation a year. indexValueUs[2 + 2 * loopus + 1] = indexValueUs[1] * Math.pow(1 + 0.02, yearUs[loopus]); // 2% inflation a year. } final InterpolatedDoublesCurve curveUs = InterpolatedDoublesCurve.from(timeValueUs, indexValueUs, new LinearInterpolator1D(), NAME_USD_PRICE_INDEX); final PriceIndexCurveSimple priceIndexCurveUs = new PriceIndexCurveSimple(curveUs); market.setCurve(PRICE_INDEX_USD, priceIndexCurveUs); return market; } public static InflationIssuerProviderDiscount createMarket2(final ZonedDateTime pricingDate) { final InflationIssuerProviderDiscount market = createMarket1(pricingDate); // final DoublesCurve curveNoAdj = market.getCurve(PRICE_INDEX_USD).getCurve(); //TODO: seasonal have modified, so the following have to be modified /*final DoublesCurve adj = new SeasonalCurve(curveNoAdj.getXData()[0], SEASONAL_FACTOR_USD, false);*/ /* final DoublesCurve[] curveSet = new DoublesCurve[] {curveNoAdj, adj };*/ /*final DoublesCurve[] curveSet = new DoublesCurve[] {curveNoAdj}; final DoublesCurve curveAdj = new SpreadDoublesCurve(new MultiplyCurveSpreadFunction(), curveSet); market.replaceCurve(PRICE_INDEX_USD, new PriceIndexCurve(curveAdj));*/ return market; } /** * Returns a multi-curves provider with two currencies (EUR, USD), four Ibor indexes (Euribor3M, Euribor6M, UsdLibor3M, UsdLibor6M). * @return The provider. */ public static MulticurveProviderDiscount createMulticurveEurUsd() { return MULTICURVES_EUR_USD; } public static MulticurveProviderDiscount createSingleCurveZcUsd() { return SINGLECURVES_YIELD_USD; } /** * Returns a multi-curve provider with a unique curve (USD). * The curve has 6 nodes and the parameters are discount factors (DiscountCurve). * @return The single curve. */ public static MulticurveProviderDiscount createSingleCurveDfUsd() { return SINGLECURVES_DF_USD; } /** * Returns a multi-curve provider with a unique curve (USD). * The curve has 20 nodes and can be used for performance measurement. * @return The single curve. */ public static MulticurveProviderDiscount createSingleCurvePerformanceUsd() { return SINGLECURVES_PERF_USD; } /** * Returns a multi-curves provider with two currencies (GBP, USD), four Ibor indexes (UsdLibor3M, UsdLibor6M). * @return The provider. */ public static MulticurveProviderDiscount createMulticurveGbpUsd() { return MULTICURVES_GBP_USD; } /** * Returns a multi-curve provider with a unique curve for GBP, SONIA, GBPLIBOR3M and GBPLIBOR6M. * @return The provider. */ public static MulticurveProviderDiscount createSinglecurveGbp() { return SINGLECURVES_GBP; } /** * Returns a multi-curves provider with two currencies USD without discount curve, four Ibor indexes (Euribor3M, Euribor6M, UsdLibor3M, UsdLibor6M). * @return The provider. */ public static MulticurveProviderDiscount createMulticurveUsdWithoutDiscount() { return MULTICURVES_USD_WITHOUT_DISCOUNT; } /** * Returns a multi-curves provider with one currency (CAD), one Ibor index (CadCDOR3M). * @return The provider. */ public static MulticurveProviderDiscount createMulticurveCad() { return MULTICURVES_CAD; } /** * Returns a multi-curves provider with one currency (EUR), two Ibor index (EURIBOR3M and EURIBOR6M). * @return The provider. */ public static MulticurveProviderDiscount createMulticurveEUR() { final MulticurveProviderDiscount provideurEUR = new MulticurveProviderDiscount(); provideurEUR.setCurve(Currency.EUR, EUR_DSC); provideurEUR.setCurve(EONIA, EUR_DSC); provideurEUR.setCurve(EURIBOR3M, EUR_FWD3); provideurEUR.setCurve(EURIBOR6M, EUR_FWD6); return provideurEUR; } /** * Returns an issuer provider with two currencies (EUR, USD), four Ibor indexes (Euribor3M, Euribor6M, UsdLibor3M, UsdLibor6M) and one issuer curve. * @return The provider. */ public static IssuerProviderDiscount createIssuerProvider() { return PROVIDER_ISSUER; } /** * Returns the UK RPI time series (2010-2011). * @return The time series. */ public static DoubleTimeSeries<ZonedDateTime> ukRpiFrom2010() { return UKRPI_TIME_SERIES; } /** * Returns the US CPI-U time series (2009-2011). * @return The time series. */ public static DoubleTimeSeries<ZonedDateTime> usCpiFrom2009() { return USCPI_TIME_SERIES; } /** * Returns the EURO HICP-X time series (2009-2011). * @return The time series. */ public static DoubleTimeSeries<ZonedDateTime> euroHICPXFrom2009() { return EUROHICPX_TIME_SERIES; } /** * Returns the EURO HICP-X time series (2009-2011). * @return The time series. */ public static DoubleTimeSeries<ZonedDateTime> audCPIFrom2009() { return AUDCPI_TIME_SERIES; } public static IndexPrice[] getPriceIndexes() { return new IndexPrice[] {PRICE_INDEX_EUR, PRICE_INDEX_GBP, PRICE_INDEX_USD, PRICE_INDEX_AUD }; } public static IborIndex[] getIndexesIborMulticurveEurUsd() { return new IborIndex[] {EURIBOR3M, EURIBOR6M, USDLIBOR3M, USDLIBOR6M }; } public static IborIndex[] getIndexesIborMulticurveCad() { return new IborIndex[] {CADCDOR3M }; } public static IndexON[] getIndexesON() { return new IndexON[] {FEDFUND, EONIA, BRAZIL_CDI }; } public static String[] getIssuerNames() { return new String[] {(String) ISSUER_US_GOVT.getKey(), (String) ISSUER_UK_GOVT.getKey(), ISSUER_NAME, (String) ISSUER_AUD_GOVT.getKey() }; } public static Calendar getCADCalendar() { return CALENDAR_CAD; } public static Calendar getEURCalendar() { return CALENDAR_EUR; } public static Calendar getUSDCalendar() { return CALENDAR_USD; } public static Calendar getAUDCalendar() { return CALENDAR_AUD; } }