/**
* 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 com.opengamma.core.config.impl.ConfigItem;
import com.opengamma.core.value.MarketDataRequirementNames;
import com.opengamma.master.config.ConfigMaster;
import com.opengamma.master.config.ConfigMasterUtils;
import com.opengamma.util.money.Currency;
/**
*
*/
public class IRFutureOptionSurfaceConfigPopulator {
public IRFutureOptionSurfaceConfigPopulator(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 Integer[] futureOptionNumbers = new Integer[18];
for (int i = 0; i < 18; i++) {
futureOptionNumbers[i] = i + 1;
}
final Double[] strikes = new Double[24];
double strike = 99.875;
for (int i = 0; i < 24; i++) {
strikes[i] = strike;
strike -= 0.125; // quoted option strikes decrease by this amount
}
final VolatilitySurfaceDefinition<Integer, Double> usVolSurfaceDefinition = new VolatilitySurfaceDefinition<Integer, Double>("DEFAULT_USD_IR_FUTURE_OPTION",
Currency.USD, futureOptionNumbers, strikes);
final FuturePriceCurveDefinition<Integer> usFuturePriceCurveDefinition = FuturePriceCurveDefinition.of("DEFAULT_USD_IR_FUTURE_PRICE", Currency.USD, futureOptionNumbers);
final VolatilitySurfaceDefinition<Integer, Double> euVolSurfaceDefinition = new VolatilitySurfaceDefinition<Integer, Double>("DEFAULT_EUR_IR_FUTURE_OPTION",
Currency.EUR, futureOptionNumbers, strikes);
final FuturePriceCurveDefinition<Integer> euFuturePriceCurveDefinition = FuturePriceCurveDefinition.of("DEFAULT_EUR_IR_FUTURE_PRICE", Currency.EUR, futureOptionNumbers);
ConfigMasterUtils.storeByName(configMaster, makeConfig(usVolSurfaceDefinition));
ConfigMasterUtils.storeByName(configMaster, makeConfig(usFuturePriceCurveDefinition));
ConfigMasterUtils.storeByName(configMaster, makeConfig(euVolSurfaceDefinition));
ConfigMasterUtils.storeByName(configMaster, makeConfig(euFuturePriceCurveDefinition));
}
private static ConfigItem<VolatilitySurfaceDefinition<Integer, Double>> makeConfig(final VolatilitySurfaceDefinition<Integer, Double> definition) {
final ConfigItem<VolatilitySurfaceDefinition<Integer, 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 ConfigItem<FuturePriceCurveDefinition<Integer>> makeConfig(final FuturePriceCurveDefinition<Integer> definition) {
final ConfigItem<FuturePriceCurveDefinition<Integer>> config = ConfigItem.of(definition);
config.setName(definition.getName());
return config;
}
private static ConfigItem<FuturePriceCurveSpecification> makeConfig(final FuturePriceCurveSpecification specification) {
final ConfigItem<FuturePriceCurveSpecification> config = ConfigItem.of(specification);
config.setName(specification.getName());
return config;
}
private static void populateVolatilitySurfaceSpecifications(final ConfigMaster configMaster) {
final BloombergIRFutureOptionVolatilitySurfaceInstrumentProvider usSurfaceInstrumentProvider = new BloombergIRFutureOptionVolatilitySurfaceInstrumentProvider("ED", "Comdty",
MarketDataRequirementNames.IMPLIED_VOLATILITY, 97.775, "CME");
final FuturePriceCurveInstrumentProvider<Number> usCurveInstrumentProvider = new BloombergIRFuturePriceCurveInstrumentProvider("ED", "Comdty",
MarketDataRequirementNames.MARKET_VALUE, "BLOOMBERG_TICKER_WEAK");
final VolatilitySurfaceSpecification usVolSurfaceDefinition = new VolatilitySurfaceSpecification("DEFAULT_USD_IR_FUTURE_OPTION", Currency.USD,
SurfaceAndCubeQuoteType.CALL_AND_PUT_STRIKE,
usSurfaceInstrumentProvider);
final FuturePriceCurveSpecification usFutureCurveDefinition = new FuturePriceCurveSpecification("DEFAULT_USD_IR_FUTURE_PRICE", Currency.USD, usCurveInstrumentProvider);
ConfigMasterUtils.storeByName(configMaster, makeConfig(usVolSurfaceDefinition));
ConfigMasterUtils.storeByName(configMaster, makeConfig(usFutureCurveDefinition));
final BloombergIRFutureOptionVolatilitySurfaceInstrumentProvider euSurfaceInstrumentProvider = new BloombergIRFutureOptionVolatilitySurfaceInstrumentProvider("ER", "Comdty",
MarketDataRequirementNames.IMPLIED_VOLATILITY, 97.775, "CME");
final FuturePriceCurveInstrumentProvider<Number> euCurveInstrumentProvider = new BloombergIRFuturePriceCurveInstrumentProvider("ER", "Comdty",
MarketDataRequirementNames.MARKET_VALUE, "BLOOMBERG_TICKER_WEAK");
final VolatilitySurfaceSpecification euVolSurfaceDefinition = new VolatilitySurfaceSpecification("DEFAULT_EUR_IR_FUTURE_OPTION", Currency.EUR,
SurfaceAndCubeQuoteType.CALL_AND_PUT_STRIKE,
euSurfaceInstrumentProvider);
final FuturePriceCurveSpecification euFutureCurveDefinition = new FuturePriceCurveSpecification("DEFAULT_EUR_IR_FUTURE_PRICE", Currency.EUR, euCurveInstrumentProvider);
ConfigMasterUtils.storeByName(configMaster, makeConfig(euVolSurfaceDefinition));
ConfigMasterUtils.storeByName(configMaster, makeConfig(euFutureCurveDefinition));
}
}