/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.pricer.impl.credit.isda; import java.time.LocalDate; import java.time.Period; import com.opengamma.strata.basics.ReferenceData; import com.opengamma.strata.basics.date.DayCount; import com.opengamma.strata.basics.date.HolidayCalendar; import com.opengamma.strata.basics.date.HolidayCalendarIds; /** * This holds yield curves use in tests */ public class YieldCurveProvider extends IsdaBaseTest { private static final ReferenceData REF_DATA = ReferenceData.standard(); //USD conventions final static String[] USD_PILLARS = new String[] {"1M", "2M", "3M", "6M", "1Y", "2Y", "3Y", "4Y", "5Y", "6Y", "7Y", "8Y", "9Y", "10Y", "12Y", "15Y", "20Y", "25Y", "30Y" }; final static String[] USD_INSTR = new String[] {"M", "M", "M", "M", "M", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S" }; final static DayCount USD_MM_DCC = ACT360; final static DayCount USD_SWAP_DCC = D30360; final static Period USD_SWAP_INTERVAL = Period.ofMonths(6); //EUR conventions final static String[] EUR_PILLARS = new String[] {"1M", "2M", "3M", "6M", "9M", "1Y", "2Y", "3Y", "4Y", "5Y", "6Y", "7Y", "8Y", "9Y", "10Y", "12Y", "15Y", "20Y", "30Y" }; final static String[] EUR_INSTR = new String[] {"M", "M", "M", "M", "M", "M", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S" }; final static DayCount EUR_MM_DCC = ACT360; final static DayCount EUR_SWAP_DCC = D30360; final static Period EUR_SWAP_INTERVAL = Period.ofYears(1); //GBP conventions final static String[] GBP_PILLARS = new String[] {"1M", "2M", "3M", "6M", "1Y", "2Y", "3Y", "4Y", "5Y", "6Y", "7Y", "8Y", "9Y", "10Y", "12Y", "15Y", "20Y", "25Y", "30Y" }; final static String[] GBP_INSTR = new String[] {"M", "M", "M", "M", "M", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S" }; final static DayCount GBP_MM_DCC = ACT365F; final static DayCount GBP_SWAP_DCC = ACT365F; final static Period GBP_SWAP_INTERVAL = Period.ofMonths(6); //JPY Conventions final static HolidayCalendar TYO_CAL = HolidayCalendarIds.JPTO.resolve(REF_DATA); final static String[] JPY_PILLARS = new String[] {"1M", "2M", "3M", "6M", "1Y", "2Y", "3Y", "4Y", "5Y", "6Y", "7Y", "8Y", "9Y", "10Y", "12Y", "15Y", "20Y", "30Y" }; final static String[] JPY_INSTR = new String[] {"M", "M", "M", "M", "M", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S" }; final static DayCount JPY_MM_DCC = ACT360; final static DayCount JPY_SWAP_DCC = ACT365F; final static Period JPY_SWAP_INTERVAL = Period.ofMonths(6); public static double[] ISDA_USD_20140213_RATES = new double[] {0.001575, 0.002, 0.002365, 0.003333, 0.005617, 0.004425, 0.00783, 0.01191, 0.015775, 0.01915, 0.021935, 0.024205, 0.026055, 0.02764, 0.030115, 0.032515, 0.03456, 0.035465, 0.03592 }; public static IsdaCompliantYieldCurve ISDA_USD_20140205; public static IsdaCompliantYieldCurve ISDA_USD_20140213; public static IsdaCompliantYieldCurve ISDA_EUR_20140206; static { final double[] rates_USD_20140205 = new double[] {0.001575, 0.002, 0.002365, 0.003333, 0.005617, 0.004425, 0.00783, 0.01191, 0.015775, 0.01915, 0.021935, 0.024205, 0.026055, 0.02764, 0.030115, 0.032515, 0.03456, 0.035465, 0.03592 }; ISDA_USD_20140205 = makeUSDCurve(LocalDate.of(2014, 2, 5), rates_USD_20140205); ISDA_USD_20140213 = makeUSDCurve(LocalDate.of(2014, 2, 13), ISDA_USD_20140213_RATES); final double[] rates_EUR_20140206 = new double[] {0.00223, 0.00252, 0.00287, 0.00386, 0.0047, 0.00548, 0.00436, 0.0058, 0.00783, 0.00997, 0.01207, 0.014, 0.01572, 0.01728, 0.01866, 0.02087, 0.02307, 0.02456, 0.02498 }; ISDA_EUR_20140206 = makeEURCurve(LocalDate.of(2014, 2, 6), rates_EUR_20140206); } public static IsdaCompliantYieldCurve makeUSDCurve(final LocalDate tradeDate, final double[] rates) { final IsdaCompliantYieldCurveBuild builder = makeUSDBuilder(tradeDate); return builder.build(rates); } public static IsdaCompliantYieldCurve makeEURCurve(final LocalDate tradeDate, final double[] rates) { final IsdaCompliantYieldCurveBuild builder = makeEURBuilder(tradeDate); return builder.build(rates); } public static IsdaCompliantYieldCurve makeGBPCurve(final LocalDate tradeDate, final double[] rates) { final IsdaCompliantYieldCurveBuild builder = makeGBPBuilder(tradeDate); return builder.build(rates); } public static IsdaCompliantYieldCurve makeJPYCurve(final LocalDate tradeDate, final double[] rates) { final IsdaCompliantYieldCurveBuild builder = makeJPYBuilder(tradeDate); return builder.build(rates); } public static IsdaCompliantYieldCurveBuild makeUSDBuilder(final LocalDate tradeDate) { final LocalDate spotDate = DEFAULT_CALENDAR.shift(tradeDate.minusDays(1), 3); return makeYieldCurveBuilder(tradeDate, spotDate, USD_PILLARS, USD_INSTR, USD_MM_DCC, USD_SWAP_DCC, USD_SWAP_INTERVAL); } public static IsdaCompliantYieldCurveBuild makeEURBuilder(final LocalDate tradeDate) { final LocalDate spotDate = DEFAULT_CALENDAR.shift(tradeDate.minusDays(1), 3); return makeYieldCurveBuilder(tradeDate, spotDate, EUR_PILLARS, EUR_INSTR, EUR_MM_DCC, EUR_SWAP_DCC, EUR_SWAP_INTERVAL); } public static IsdaCompliantYieldCurveBuild makeGBPBuilder(final LocalDate tradeDate) { final LocalDate spotDate = DEFAULT_CALENDAR.shift(tradeDate.minusDays(1), 3); return makeYieldCurveBuilder(tradeDate, spotDate, GBP_PILLARS, GBP_INSTR, GBP_MM_DCC, GBP_SWAP_DCC, GBP_SWAP_INTERVAL); } public static IsdaCompliantYieldCurveBuild makeJPYBuilder(final LocalDate tradeDate) { final LocalDate spotDate = DEFAULT_CALENDAR.shift(tradeDate.minusDays(1), 3); return makeYieldCurveBuilder(tradeDate, spotDate, JPY_PILLARS, JPY_INSTR, JPY_MM_DCC, JPY_SWAP_DCC, JPY_SWAP_INTERVAL, TYO_CAL); } }