/**
* 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 org.threeten.bp.LocalDate;
import com.opengamma.core.config.impl.ConfigItem;
import com.opengamma.core.id.ExternalSchemes;
import com.opengamma.core.value.MarketDataRequirementNames;
import com.opengamma.id.UniqueId;
import com.opengamma.master.config.ConfigMaster;
import com.opengamma.master.config.ConfigMasterUtils;
/**
*
*/
public class EquityOptionSurfaceConfigPopulator {
public EquityOptionSurfaceConfigPopulator(final ConfigMaster configMaster) {
populateVolatilitySurfaceConfigMaster(configMaster);
}
public static ConfigMaster populateVolatilitySurfaceConfigMaster(final ConfigMaster configMaster) {
populateVolatilitySurfaceSpecifications(configMaster);
populateVolatilitySurfaceDefinitions(configMaster);
return configMaster;
}
private static void populateVolatilitySurfaceDefinitions(final ConfigMaster configMaster) {
final LocalDate[] equityOptionExpiries = new LocalDate[] {LocalDate.of(2011, 7, 16), LocalDate.of(2011, 8, 20),
LocalDate.of(2011, 9, 17), LocalDate.of(2011, 12, 17),
LocalDate.of(2012, 3, 17), LocalDate.of(2012, 6, 16),
LocalDate.of(2012, 12, 22), LocalDate.of(2013, 6, 22) };
final Double[] strikes = new Double[31];
int j = 0;
for (int i = 50; i <= 200; i += 5) {
strikes[j++] = (double) i;
}
final VolatilitySurfaceDefinition<LocalDate, Double> usVolSurfaceDefinition =
new VolatilitySurfaceDefinition<LocalDate, Double>("DEFAULT_EQUITY_OPTION", UniqueId.of(ExternalSchemes.BLOOMBERG_TICKER_WEAK.getName(), "DJX Index"), equityOptionExpiries, strikes);
ConfigMasterUtils.storeByName(configMaster, makeConfig(usVolSurfaceDefinition));
}
private static ConfigItem<VolatilitySurfaceDefinition<LocalDate, Double>> makeConfig(final VolatilitySurfaceDefinition<LocalDate, Double> definition) {
final ConfigItem<VolatilitySurfaceDefinition<LocalDate, Double>> config = ConfigItem.of(definition);
config.setName(definition.getName());
return config;
}
private static ConfigItem<VolatilitySurfaceSpecification> makeConfig(final VolatilitySurfaceSpecification specification) {
final ConfigItem<VolatilitySurfaceSpecification> config = ConfigItem.of(specification);
config.setName(specification.getName());
return config;
}
private static void populateVolatilitySurfaceSpecifications(final ConfigMaster configMaster) {
final SurfaceInstrumentProvider<LocalDate, Double> surfaceInstrumentProvider =
new BloombergEquityOptionVolatilitySurfaceInstrumentProvider("DJX", "Index", MarketDataRequirementNames.IMPLIED_VOLATILITY);
final VolatilitySurfaceSpecification usVolSurfaceSpec = new VolatilitySurfaceSpecification("DEFAULT_DJX_EQUITY_OPTION",
UniqueId.of(ExternalSchemes.BLOOMBERG_TICKER_WEAK.getName(), "DJX Index"), SurfaceAndCubeQuoteType.CALL_AND_PUT_STRIKE,
surfaceInstrumentProvider);
ConfigMasterUtils.storeByName(configMaster, makeConfig(usVolSurfaceSpec));
}
}