/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.volatility.surface; import static org.testng.AssertJUnit.assertEquals; import org.testng.annotations.Test; import org.threeten.bp.DayOfWeek; import org.threeten.bp.LocalDate; import com.opengamma.core.id.ExternalSchemes; import com.opengamma.financial.analytics.ircurve.NextExpiryAdjuster; import com.opengamma.financial.analytics.model.FutureOptionExpiries; import com.opengamma.id.ExternalId; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT) public class BloombergEquityIndexFutureOptionVolatilitySurfaceInstrumentProviderTest { private static final String PREFIX = "DJX"; private static final String POSTFIX = "Index"; private static final LocalDate DATE = LocalDate.of(2012, 5, 23); private static final Short[] EXPIRY_OFFSETS = new Short[] {1, 2, 8}; private static final Double[] STRIKES = new Double[] {90.0, 145.0, 205.0}; private static final String DATA_FIELD_NAME = "OPT_IMPLIED_VOLATILITY_MID"; private static final String[][] RESULTS = new String[][] {new String[] {"DJX 06/16/12 P90.0 Index", "DJX 06/16/12 P145.0 Index", "DJX 06/16/12 C205.0 Index"}, new String[] {"DJX 07/21/12 P90.0 Index", "DJX 07/21/12 P145.0 Index", "DJX 07/21/12 C205.0 Index"}, new String[] { "DJX 01/19/13 P90.0 Index", "DJX 01/19/13 P145.0 Index", "DJX 01/19/13 C205.0 Index" } }; // TODO Fix date on this last one private static final FutureOptionExpiries UTILS = FutureOptionExpiries.of(new NextExpiryAdjuster(3, DayOfWeek.FRIDAY, 1)); private static LocalDate[] EXPIRY_DATES = new LocalDate[3]; private static final String EXCHANGE = "OSE"; static { for (int i = 0; i < EXPIRY_OFFSETS.length; i++) { EXPIRY_DATES[i] = FutureOptionExpiries.EQUITY.getFutureOptionExpiry(EXPIRY_OFFSETS[i], DATE); } } private static final BloombergEquityFutureOptionVolatilitySurfaceInstrumentProvider PROVIDER = new BloombergEquityFutureOptionVolatilitySurfaceInstrumentProvider(PREFIX, POSTFIX, DATA_FIELD_NAME, 150.25, EXCHANGE); @Test public void test() { for (int i = 0; i < EXPIRY_OFFSETS.length; i++) { for (int j = 0; j < STRIKES.length; j++) { final String expected = RESULTS[i][j]; final ExternalId actual = PROVIDER.getInstrument(EXPIRY_OFFSETS[i], STRIKES[j], DATE); assertEquals(ExternalSchemes.BLOOMBERG_TICKER_WEAK, actual.getScheme()); if (!(expected.equals(actual.getValue()))) { assertEquals(expected, actual.getValue()); } } } } @Test public void testUtils() { assertEquals(EXPIRY_DATES[0], FutureOptionExpiries.EQUITY.getMonthlyExpiry(1, DATE)); assertEquals(EXPIRY_DATES[1], FutureOptionExpiries.EQUITY.getMonthlyExpiry(2, DATE)); assertEquals(EXPIRY_DATES[2], FutureOptionExpiries.EQUITY.getQuarterlyExpiry(EXPIRY_OFFSETS[2]-6, UTILS.getMonthlyExpiry(6, DATE))); } }