/**
* Copyright (C) 2011 - 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 org.threeten.bp.Month;
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;
/**
* This test will begin late in 2012 as historical data on options on the Sep2011 Eurodollar future will cease to be provided
*/
@Test(groups = TestGroup.UNIT)
public class BloombergIRFutureOptionVolatilitySurfaceInstrumentProviderTest {
private static final String PREFIX = "ED";
private static final String POSTFIX = "Comdty";
private static final LocalDate DATE = LocalDate.of(2011, 7, 1);
private static final Short[] NUMBERS = new Short[] {1, 7, 10};
private static final Double[] STRIKES = new Double[] {96., 97.25, 98.5, 99.75};
private static final String DATA_FIELD_NAME = "OPT_IMPLIED_VOLATILITY_MID";
private static final String[][] RESULTS = new String[][] {new String[] {"EDN1P 96.000 Comdty", "EDN1P 97.250 Comdty", "EDN1C 98.500 Comdty", "EDN1C 99.750 Comdty"},
new String[] {"EDH2P 96.000 Comdty", "EDH2P 97.250 Comdty", "EDH2C 98.500 Comdty", "EDH2C 99.750 Comdty"},
new String[] {"EDZ2P 96.000 Comdty", "EDZ2P 97.250 Comdty", "EDZ2C 98.500 Comdty", "EDZ2C 99.750 Comdty"}};
private static final String EXCHANGE = "EUX";
private static final FutureOptionExpiries UTILS = FutureOptionExpiries.of(new NextExpiryAdjuster(3, DayOfWeek.WEDNESDAY));
private static final LocalDate[] EXPIRY_DATES = new LocalDate[] {
UTILS.getQuarterlyExpiry(1, LocalDate.of(2011, Month.SEPTEMBER, 1)),
UTILS.getQuarterlyExpiry(1, LocalDate.of(2013, Month.MARCH, 1)),
UTILS.getQuarterlyExpiry(1, LocalDate.of(2013, Month.DECEMBER, 1)) };
private static final BloombergIRFutureOptionVolatilitySurfaceInstrumentProvider PROVIDER =
new BloombergIRFutureOptionVolatilitySurfaceInstrumentProvider(PREFIX, POSTFIX, DATA_FIELD_NAME, 97.625, EXCHANGE);
@Test
public void test() {
for (int i = 0; i < NUMBERS.length; i++) {
assertEquals(EXPIRY_DATES[i], UTILS.getQuarterlyExpiry(NUMBERS[i], DATE));
for (int j = 0; j < STRIKES.length; j++) {
final String expected = RESULTS[i][j];
final ExternalId actual = PROVIDER.getInstrument(NUMBERS[i], STRIKES[j], DATE);
assertEquals(ExternalSchemes.BLOOMBERG_TICKER_WEAK, actual.getScheme());
assertEquals(expected, actual.getValue());
}
}
}
}