/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.web.spring; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.google.common.collect.Lists; import com.opengamma.analytics.math.interpolation.Interpolator1DFactory; import com.opengamma.engine.function.config.CombiningFunctionConfigurationSource; import com.opengamma.engine.function.config.FunctionConfiguration; import com.opengamma.engine.function.config.FunctionConfigurationSource; import com.opengamma.engine.function.config.ParameterizedFunctionConfiguration; import com.opengamma.engine.value.ValueRequirementNames; import com.opengamma.financial.analytics.QuantityFunction; import com.opengamma.financial.analytics.model.CalculationPropertyNamesAndValues; import com.opengamma.financial.analytics.model.curve.forward.ForwardCurveValuePropertyNames; import com.opengamma.financial.analytics.model.curve.forward.InterpolatedForwardCurveDefaults; import com.opengamma.financial.analytics.model.equity.EquityForwardCurveFuturePriceImpliedPerTickerDefaults; import com.opengamma.financial.analytics.model.equity.EquityForwardCurvePerTickerDefaults; import com.opengamma.financial.analytics.model.equity.EquityForwardCurveYieldCurveImpliedPerCurrencyDefaults; import com.opengamma.financial.analytics.model.equity.futures.EquityDividendYieldPricingDefaults; import com.opengamma.financial.analytics.model.equity.option.EquityOptionCalculationMethodDefaultFunction; import com.opengamma.financial.analytics.model.equity.option.EquityOptionInterpolatedBlackLognormalPerCurrencyDefaults; import com.opengamma.financial.analytics.model.equity.option.EquityOptionInterpolatedBlackLognormalPerEquityDefaults; import com.opengamma.financial.analytics.model.equity.option.EquityOptionInterpolatedBlackLognormalPerExchangeDefaults; import com.opengamma.financial.analytics.model.equity.option.EquityOptionSurfaceCalculationMethodPerCurrencyDefaults; import com.opengamma.financial.analytics.model.equity.option.EquityOptionSurfaceCalculationMethodPerEquityDefaults; import com.opengamma.financial.analytics.model.equity.option.EquityOptionSurfaceCalculationMethodPerExchangeDefaults; import com.opengamma.financial.analytics.model.equity.option.ListedEquityOptionPerSecurityTypeDefaults; import com.opengamma.financial.analytics.model.equity.option.ListedEquityOptionPerTickerDefaults; import com.opengamma.financial.analytics.model.equity.varianceswap.EquityForwardPerEquityDefaults; import com.opengamma.financial.analytics.model.equity.varianceswap.EquityVarianceSwapDefaults; import com.opengamma.financial.analytics.model.equity.varianceswap.EquityVarianceSwapStaticReplicationDefaults; import com.opengamma.financial.analytics.model.future.FuturesPricingDefaults; import com.opengamma.financial.analytics.model.futureoption.EquityFutureOptionBlackLognormalDefaults; import com.opengamma.financial.analytics.model.futureoption.EquityFutureOptionSurfaceCalculationMethodDefaults; import com.opengamma.financial.analytics.model.option.AnalyticOptionDefaultCurveFunction; import com.opengamma.financial.analytics.model.pnl.PNLFunctions; import com.opengamma.financial.analytics.model.volatility.surface.black.BlackVolatilitySurfacePropertyNamesAndValues; import com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.EquityBlackVolatilitySurfacePerCurrencyDefaults; import com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.EquityBlackVolatilitySurfacePerExchangeDefaults; import com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.EquityBlackVolatilitySurfacePerTickerDefaults; import com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.EquityFutureBlackVolatilitySurfacePerCurrencyDefaults; import com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.PureBlackVolatilitySurfacePrimitiveDefaults; import com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.PureBlackVolatilitySurfaceSecurityDefaults; import com.opengamma.financial.currency.CurrencyMatrixConfigPopulator; import com.opengamma.financial.currency.CurrencyMatrixLookupFunction; import com.opengamma.financial.property.DefaultPropertyFunction.PriorityClass; import com.opengamma.financial.security.option.EquityIndexFutureOptionSecurity; import com.opengamma.financial.security.option.EquityIndexOptionSecurity; import com.opengamma.financial.security.option.EquityOptionSecurity; import com.opengamma.financial.value.SimpleRenamingFunction; import com.opengamma.web.spring.defaults.EquityInstrumentDefaultValues; /** * Constructs a standard function repository. * <p> * This should be replaced by something that loads the functions from the configuration database */ @SuppressWarnings("deprecation") public class DemoStandardFunctionConfiguration extends StandardFunctionConfiguration { public static FunctionConfigurationSource instance() { return new DemoStandardFunctionConfiguration().getObjectCreating(); } public DemoStandardFunctionConfiguration() { setMark2MarketField("PX_LAST"); setCostOfCarryField("COST_OF_CARRY"); setAbsoluteTolerance(1.0E-9); // 0.0001 setRelativeTolerance(1.0E-9); // 0.0001 setMaximumIterations(100); // 1000 } @Override protected void addAllConfigurations(final List<FunctionConfiguration> functions) { super.addAllConfigurations(functions); functions.add(functionConfiguration(QuantityFunction.class)); functions.add(functionConfiguration(AnalyticOptionDefaultCurveFunction.class, "FUNDING")); functions.add(functionConfiguration(AnalyticOptionDefaultCurveFunction.class, "SECONDARY")); addEquityDividendYieldFuturesDefaults(functions); addEquityForwardDefaults(functions); addEquityFuturePricingDefaults(functions); addEquityIndexOptionBlackVolatilitySurfaceDefaults(functions); addEquityFutureOptionBlackVolatilitySurfaceDefaults(functions); addEquityOptionDefaults(functions); addEquityFutureOptionDefaults(functions); addEquityPureVolatilitySurfaceDefaults(functions); addEquityVarianceSwapDefaults(functions); addEquityOptionCalculationMethodDefaults(functions); addListedEquityOptionDefaults(functions); addValueRenamingFunctions(functions); } /** * These functions provide aliases for the user to rename one of OpenGamma's ValueRequirementNames to one of their own. * In addition to adding the name to a class that extends ValueRenamingFunction, such as SimpleRenamingFunction, one must also * add the name into ValueRequirementNames or to a project-specific name class * and include that into the [webBasics] section of the engine.ini configuration file. <p> * eg: [webBasics] <p> * valueRequirementNameClasses = com.opengamma.engine.value.ValueRequirementNames,com.opengamma.yourproject.function.YourProjectValueRequirementNames * @param functions Extends this List<FunctionConfiguration> */ protected void addValueRenamingFunctions(final List<FunctionConfiguration> functions) { functions.add(functionConfiguration(SimpleRenamingFunction.class, ValueRequirementNames.VALUE_DELTA, ValueRequirementNames.NET_MARKET_VALUE)); } @Override protected CurrencyInfo audCurrencyInfo() { final CurrencyInfo i = super.audCurrencyInfo(); i.setCurveConfiguration(null, "AUDFX"); i.setCurveConfiguration("model/credit/yield", "ISDAAUDCurveConfig"); i.setCurveConfiguration("model/forex", "AUDFX"); i.setCurveConfiguration("model/pnl", "AUDFX"); i.setCurveName(null, "FX"); i.setCurveName("model/credit/yield", "ISDA"); i.setCurveName("model/forex/discounting", "FX"); i.setCurveName("model/pnl/discounting", "FX"); i.setCurveCalculationMethodName("model/credit/yield", "ISDA"); i.setCurveCalculationMethodName("model/credit/hazardrate", "ISDA"); i.setCurveCalculationMethodName("model/forex/discounting", "FXImplied"); i.setCubeName(null, "BLOOMBERG"); return i; } @Override protected CurrencyInfo brlCurrencyInfo() { final CurrencyInfo i = super.brlCurrencyInfo(); i.setCurveConfiguration(null, "DefaultCashCurveBRLConfig"); i.setCurveName(null, "Cash"); return i; } @Override protected CurrencyInfo cadCurrencyInfo() { final CurrencyInfo i = super.cadCurrencyInfo(); i.setCurveConfiguration(null, "DefaultTwoCurveCADConfig"); i.setCurveConfiguration("model/credit/yield", "ISDACADCurveConfig"); i.setCurveName(null, "Discounting"); i.setCurveName("model/credit/yield", "ISDA"); i.setCurveCalculationMethodName("model/credit/yield", "ISDA"); i.setCurveCalculationMethodName("model/credit/hazardrate", "ISDA"); return i; } @Override protected CurrencyInfo chfCurrencyInfo() { final CurrencyInfo i = super.chfCurrencyInfo(); i.setCurveConfiguration(null, "DefaultTwoCurveCHFConfig"); i.setCurveName(null, "Discounting"); return i; } @Override protected CurrencyInfo eurCurrencyInfo() { final CurrencyInfo i = super.eurCurrencyInfo(); i.setCurveConfiguration(null, "DefaultTwoCurveEURConfig"); i.setCurveConfiguration("model/xccyswap", "DefaultTwoCurveEURConfig"); i.setCurveConfiguration("model/credit/yield", "ISDAEURCurveConfig"); i.setCurveName(null, "Discounting"); i.setCurveName("model/credit/yield", "ISDA"); i.setCurveCalculationMethodName("model/credit/yield", "ISDA"); i.setCurveCalculationMethodName("model/credit/hazardrate", "ISDA"); i.setSurfaceName("model/irfutureoption", "DEFAULT_PRICE"); i.setSurfaceName("model/swaption", "DEFAULT"); i.setCubeName(null, "BLOOMBERG"); return i; } @Override protected CurrencyInfo gbpCurrencyInfo() { final CurrencyInfo i = super.gbpCurrencyInfo(); i.setCurveConfiguration(null, "DefaultTwoCurveGBPConfig"); i.setCurveConfiguration("model/credit/yield", "ISDAGBPCurveConfig"); i.setCurveName(null, "Discounting"); i.setCurveName("model/credit/yield", "ISDA"); i.setCurveCalculationMethodName("model/credit/yield", "ISDA"); i.setCurveCalculationMethodName("model/credit/hazardrate", "ISDA"); i.setCubeName(null, "BLOOMBERG"); return i; } @Override protected CurrencyInfo hkdCurrencyInfo() { final CurrencyInfo i = super.hkdCurrencyInfo(); i.setCurveConfiguration(null, "DefaultCashCurveHKDConfig"); i.setCurveName(null, "Cash"); return i; } @Override protected CurrencyInfo hufCurrencyInfo() { final CurrencyInfo i = super.hufCurrencyInfo(); i.setCurveConfiguration(null, "DefaultCashCurveHUFConfig"); i.setCurveName(null, "Cash"); return i; } @Override protected CurrencyInfo jpyCurrencyInfo() { final CurrencyInfo i = super.jpyCurrencyInfo(); i.setCurveConfiguration(null, "DefaultTwoCurveJPYConfig"); i.setCurveConfiguration("model/credit/yield", "ISDAJPYCurveConfig"); i.setCurveConfiguration("model/forex", "JPYFX"); i.setCurveName(null, "Discounting"); i.setCurveName("model/credit/yield", "ISDA"); i.setCurveName("model/forex/discounting", "FX"); i.setCurveCalculationMethodName("model/credit/yield", "ISDA"); i.setCurveCalculationMethodName("model/credit/hazardrate", "ISDA"); return i; } @Override protected CurrencyInfo krwCurrencyInfo() { final CurrencyInfo i = super.krwCurrencyInfo(); i.setCurveConfiguration(null, "SingleCurveKRWConfig"); i.setCurveConfiguration("model/forex", "KRWFX"); i.setCurveName(null, "Forward"); i.setCurveName("model/forex/discounting", "FX"); i.setCurveCalculationMethodName("model/forex/discounting", "FXImplied"); return i; } @Override protected CurrencyInfo mxnCurrencyInfo() { final CurrencyInfo i = super.mxnCurrencyInfo(); i.setCurveConfiguration(null, "SingleCurveMXNConfig"); i.setCurveName(null, "Forward28D"); return i; } @Override protected CurrencyInfo nzdCurrencyInfo() { final CurrencyInfo i = super.nzdCurrencyInfo(); i.setCurveConfiguration(null, "DefaultTwoCurveNZDConfig"); i.setCurveName(null, "Discounting"); return i; } @Override protected CurrencyInfo rubCurrencyInfo() { final CurrencyInfo i = super.rubCurrencyInfo(); i.setCurveConfiguration(null, "DefaultCashCurveRUBConfig"); i.setCurveName(null, "Cash"); return i; } @Override protected CurrencyInfo usdCurrencyInfo() { final CurrencyInfo i = super.usdCurrencyInfo(); i.setCurveConfiguration(null, "DefaultTwoCurveUSDConfig"); i.setCurveConfiguration("model/credit/yield", "ISDAUSDCurveConfig"); i.setCurveConfiguration("model/xccyswap", "DefaultTwoCurveUSDConfig"); i.setCurveConfiguration("model/forex", "DefaultTwoCurveUSDConfig"); i.setCurveName(null, "Discounting"); i.setCurveName("model/credit/yield", "ISDA"); i.setCurveName("model/forex/discounting", "Discounting"); i.setCurveCalculationMethodName("model/credit/yield", "ISDA"); i.setCurveCalculationMethodName("model/credit/hazardrate", "ISDA"); i.setSurfaceName("model/bondfutureoption", "BBG"); i.setSurfaceName("model/futureoption", "BBG"); i.setSurfaceName("model/irfutureoption", "DEFAULT_PRICE"); i.setSurfaceName("model/volatility/surface/black", "BBG"); i.setCubeDefinitionName("model/sabrcube", "BLOOMBERG"); i.setCubeSpecificationName("model/sabrcube", "BLOOMBERG"); i.setSurfaceDefinitionName("model/sabrcube", "BLOOMBERG"); i.setSurfaceSpecificationName("model/sabrcube", "BLOOMBERG"); i.setForwardCurveName("model/futureoption", "BBG"); i.setForwardCurveName("model/curve/commodityforward", "BBG"); i.setForwardCurveName("model/curve/equityforward", "BBG"); i.setForwardCurveCalculationMethod("model/futureoption", ForwardCurveValuePropertyNames.PROPERTY_FUTURE_PRICE_METHOD); i.setForwardCurveCalculationMethod("model/commodityforward", ForwardCurveValuePropertyNames.PROPERTY_FUTURE_PRICE_METHOD); i.setForwardCurveCalculationMethod("model/equityforward", ForwardCurveValuePropertyNames.PROPERTY_FUTURE_PRICE_METHOD); i.setSurfaceCalculationMethod("model/futureoption", BlackVolatilitySurfacePropertyNamesAndValues.INTERPOLATED_BLACK_LOGNORMAL); return i; } @Override protected CurrencyPairInfo audKrwCurrencyPairInfo() { final CurrencyPairInfo i = super.audKrwCurrencyPairInfo(); i.setSurfaceName("model/forex", "DEFAULT"); return i; } @Override protected CurrencyPairInfo eurChfCurrencyPairInfo() { final CurrencyPairInfo i = super.eurChfCurrencyPairInfo(); i.setSurfaceName(null, "TULLETT"); return i; } @Override protected CurrencyPairInfo eurJpyCurrencyPairInfo() { final CurrencyPairInfo i = super.eurJpyCurrencyPairInfo(); i.setSurfaceName(null, "DEFAULT"); return i; } @Override protected CurrencyPairInfo jpyKrwCurrencyPairInfo() { final CurrencyPairInfo i = super.jpyKrwCurrencyPairInfo(); i.setSurfaceName(null, "DEFAULT"); return i; } @Override protected CurrencyPairInfo usdAudCurrencyPairInfo() { final CurrencyPairInfo i = super.usdAudCurrencyPairInfo(); i.setSurfaceName(null, "DEFAULT"); return i; } @Override protected CurrencyPairInfo usdBrlCurrencyPairInfo() { final CurrencyPairInfo i = super.usdBrlCurrencyPairInfo(); i.setSurfaceName(null, "TULLETT"); return i; } @Override protected CurrencyPairInfo usdCadCurrencyPairInfo() { final CurrencyPairInfo i = super.usdCadCurrencyPairInfo(); i.setSurfaceName(null, "TULLETT"); return i; } @Override protected CurrencyPairInfo usdChfCurrencyPairInfo() { final CurrencyPairInfo i = super.usdChfCurrencyPairInfo(); i.setSurfaceName(null, "TULLETT"); return i; } @Override protected CurrencyPairInfo usdEurCurrencyPairInfo() { final CurrencyPairInfo i = super.usdEurCurrencyPairInfo(); i.setCurveName(null, "DiscountingImplied"); i.setSurfaceName(null, "TULLETT"); i.setForwardCurveName("model/forex/forward", "DEFAULT"); return i; } @Override protected CurrencyPairInfo usdGbpCurrencyPairInfo() { final CurrencyPairInfo i = super.usdGbpCurrencyPairInfo(); i.setSurfaceName(null, "TULLETT"); return i; } @Override protected CurrencyPairInfo usdHkdCurrencyPairInfo() { final CurrencyPairInfo i = super.usdHkdCurrencyPairInfo(); i.setSurfaceName(null, "TULLETT"); return i; } @Override protected CurrencyPairInfo usdHufCurrencyPairInfo() { final CurrencyPairInfo i = super.usdHufCurrencyPairInfo(); i.setSurfaceName(null, "TULLETT"); return i; } @Override protected CurrencyPairInfo usdJpyCurrencyPairInfo() { final CurrencyPairInfo i = super.usdJpyCurrencyPairInfo(); i.setSurfaceName(null, "DEFAULT"); return i; } @Override protected CurrencyPairInfo usdKrwCurrencyPairInfo() { final CurrencyPairInfo i = super.usdKrwCurrencyPairInfo(); i.setSurfaceName(null, "TULLETT"); return i; } @Override protected CurrencyPairInfo usdMxnCurrencyPairInfo() { final CurrencyPairInfo i = super.usdMxnCurrencyPairInfo(); i.setSurfaceName(null, "TULLETT"); return i; } @Override protected CurrencyPairInfo usdNzdCurrencyPairInfo() { final CurrencyPairInfo i = super.usdNzdCurrencyPairInfo(); i.setSurfaceName(null, "TULLETT"); return i; } @Override protected void addCurrencyConversionFunctions(final List<FunctionConfiguration> functionConfigs) { super.addCurrencyConversionFunctions(functionConfigs); functionConfigs.add(functionConfiguration(CurrencyMatrixLookupFunction.class, CurrencyMatrixConfigPopulator.BLOOMBERG_LIVE_DATA)); functionConfigs.add(functionConfiguration(CurrencyMatrixLookupFunction.class, CurrencyMatrixConfigPopulator.SYNTHETIC_LIVE_DATA)); } @Override protected void setPNLFunctionDefaults(final PNLFunctions.Defaults defaults) { super.setPNLFunctionDefaults(defaults); defaults.setCurveName("FUNDING"); defaults.setPayCurveName("FUNDING"); defaults.setReceiveCurveName("FUNDING"); } protected void addEquityDividendYieldFuturesDefaults(final List<FunctionConfiguration> functionConfigs) { final List<String> equityFutureDefaults = EquityInstrumentDefaultValues.builder() .useDiscountingCurveCurrency() .useDiscountingCurveCalculationConfigNames() .useDiscountingCurveNames() .createPerEquityDefaults(); final List<String> equityFutureDefaultsWithPriority = new ArrayList<>(); equityFutureDefaultsWithPriority.add(PriorityClass.NORMAL.name()); equityFutureDefaultsWithPriority.addAll(equityFutureDefaults); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityDividendYieldPricingDefaults.class.getName(), equityFutureDefaultsWithPriority)); } protected void addEquityForwardDefaults(final List<FunctionConfiguration> functionConfigs) { // Interpolation Defaults functionConfigs.add(functionConfiguration(InterpolatedForwardCurveDefaults.class, Interpolator1DFactory.DOUBLE_QUADRATIC, Interpolator1DFactory.LINEAR_EXTRAPOLATOR, Interpolator1DFactory.FLAT_EXTRAPOLATOR)); // EquityForward PerEquityDefaults final List<String> equityForwardDefaults = EquityInstrumentDefaultValues.builder() .useIdName() .useDiscountingCurveNames() .useDiscountingCurveCalculationConfigNames() .createPerEquityDefaults(); final List<String> equityForwardPerEquityDefaults = new ArrayList<>(); equityForwardPerEquityDefaults.add(PriorityClass.ABOVE_NORMAL.name()); equityForwardPerEquityDefaults.addAll(equityForwardDefaults); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityForwardPerEquityDefaults.class.getName(), equityForwardPerEquityDefaults)); // EquityForwardCurve PerTickerDefaults (like above but for a curve requirement) final EquityInstrumentDefaultValues.Builder equityForwardCurveEquityAndExchangeDefaults = EquityInstrumentDefaultValues.builder() .useIdName() .useDiscountingCurveCurrency() .useDiscountingCurveNames() .useDiscountingCurveCalculationConfigNames() .useDividendTypes(); final List<String> equityForwardCurvePerTickerDefaults = new ArrayList<>(); equityForwardCurvePerTickerDefaults.add(PriorityClass.ABOVE_NORMAL.name()); equityForwardCurvePerTickerDefaults.addAll(equityForwardCurveEquityAndExchangeDefaults.createPerEquityDefaults()); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityForwardCurvePerTickerDefaults.class.getName(), equityForwardCurvePerTickerDefaults)); // EquityForwardCurve PerCurrencyDefaults final EquityInstrumentDefaultValues.Builder equityForwardCurveCurrencyDefaults = EquityInstrumentDefaultValues.builder() .useDiscountingCurveCurrency() .useDiscountingCurveNames() .useDiscountingCurveCalculationConfigNames() .useDividendTypes(); final List<String> equityForwardCurvePerCurrencyDefaults = new ArrayList<>(); equityForwardCurvePerCurrencyDefaults.add(PriorityClass.BELOW_NORMAL.name()); equityForwardCurvePerCurrencyDefaults.addAll(equityForwardCurveCurrencyDefaults.createPerCurrencyDefaults()); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityForwardCurveYieldCurveImpliedPerCurrencyDefaults.class.getName(), equityForwardCurvePerCurrencyDefaults)); // EquityForwardCurve (from Futures) PerTickerDefaults final EquityInstrumentDefaultValues.Builder equityForwardCurveFromFuturesDefaults = EquityInstrumentDefaultValues.builder() .useIdName() .useForwardCurveNames() .useDiscountingCurveCurrency() .useDiscountingCurveNames() .useDiscountingCurveCalculationConfigNames() .useVolatilitySurfaceNames(); final List<String> equityForwardCurveFromFuturesPerTickerDefaults = new ArrayList<>(); equityForwardCurveFromFuturesPerTickerDefaults.add(PriorityClass.ABOVE_NORMAL.name()); equityForwardCurveFromFuturesPerTickerDefaults.addAll(equityForwardCurveFromFuturesDefaults.createPerTickerDefaults()); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityForwardCurveFuturePriceImpliedPerTickerDefaults.class.getName(), equityForwardCurveFromFuturesPerTickerDefaults)); } protected void addEquityFuturePricingDefaults(final List<FunctionConfiguration> functionConfigs) { final List<String> defaults = Arrays.asList(PriorityClass.NORMAL.name(), CalculationPropertyNamesAndValues.MARK_TO_MARKET_METHOD); functionConfigs.add(new ParameterizedFunctionConfiguration(FuturesPricingDefaults.class.getName(), defaults)); } protected void addEquityIndexOptionBlackVolatilitySurfaceDefaults(final List<FunctionConfiguration> functionConfigs) { final EquityInstrumentDefaultValues.Builder equityDefaults = EquityInstrumentDefaultValues.builder() .useIdName() .useForwardCurveNames() .useForwardCurveCalculationMethodNames() .useVolatilitySurfaceNames(); final List<String> perTickerDefaults = Lists.newArrayList(PriorityClass.ABOVE_NORMAL.name()); perTickerDefaults.addAll(equityDefaults.createPerEquityDefaults()); final List<String> perExchangeDefaults = Lists.newArrayList(PriorityClass.NORMAL.name()); perExchangeDefaults.addAll(equityDefaults.createPerExchangeDefaults()); final List<String> perCurrencyDefaults = Lists.newArrayList(PriorityClass.BELOW_NORMAL.name()); perCurrencyDefaults.addAll(equityDefaults.createPerCurrencyDefaults()); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityBlackVolatilitySurfacePerTickerDefaults.class.getName(), perTickerDefaults)); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityBlackVolatilitySurfacePerExchangeDefaults.class.getName(), perExchangeDefaults)); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityBlackVolatilitySurfacePerCurrencyDefaults.class.getName(), perCurrencyDefaults)); } protected void addEquityFutureOptionBlackVolatilitySurfaceDefaults(final List<FunctionConfiguration> functionConfigs) { final List<String> defaults = Arrays.asList(PriorityClass.ABOVE_NORMAL.name(), "USD", "BBG", ForwardCurveValuePropertyNames.PROPERTY_FUTURE_PRICE_METHOD, "BBG"); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityFutureBlackVolatilitySurfacePerCurrencyDefaults.class.getName(), defaults)); } protected void addEquityOptionDefaults(final List<FunctionConfiguration> functionConfigs) { final EquityInstrumentDefaultValues.Builder equityOptionSurfaceCalculationMethodDefaults = EquityInstrumentDefaultValues.builder() .useIdName() .useVolatilitySurfaceCalculationMethodNames(); final List<String> equityOptionSurfaceCalculationMethodPerEquityDefaults = Lists.newArrayList(PriorityClass.ABOVE_NORMAL.name()); equityOptionSurfaceCalculationMethodPerEquityDefaults.addAll(equityOptionSurfaceCalculationMethodDefaults.createPerEquityDefaults()); final List<String> equityOptionSurfaceCalculationMethodPerExchangeDefaults = Lists.newArrayList(PriorityClass.NORMAL.name()); equityOptionSurfaceCalculationMethodPerExchangeDefaults.addAll(equityOptionSurfaceCalculationMethodDefaults.createPerExchangeDefaults()); final List<String> equityOptionSurfaceCalculationMethodPerCurrencyDefaults = Lists.newArrayList(PriorityClass.BELOW_NORMAL.name()); equityOptionSurfaceCalculationMethodPerCurrencyDefaults.addAll(equityOptionSurfaceCalculationMethodDefaults.createPerCurrencyDefaults()); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityOptionSurfaceCalculationMethodPerEquityDefaults.class.getName(), equityOptionSurfaceCalculationMethodPerEquityDefaults)); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityOptionSurfaceCalculationMethodPerExchangeDefaults.class.getName(), equityOptionSurfaceCalculationMethodPerExchangeDefaults)); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityOptionSurfaceCalculationMethodPerCurrencyDefaults.class.getName(), equityOptionSurfaceCalculationMethodPerCurrencyDefaults)); final EquityInstrumentDefaultValues.Builder equityOptionBlackSurfaceInterpolationDefaults = EquityInstrumentDefaultValues.builder() .useIdName() .useDiscountingCurveNames() .useDiscountingCurveCalculationConfigNames() .useVolatilitySurfaceNames() .useInterpolationMethodNames() .useForwardCurveNames() .useForwardCurveCalculationMethodNames(); final List<String> equityOptionPerEquityDefaults = Lists.newArrayList(PriorityClass.ABOVE_NORMAL.name()); equityOptionPerEquityDefaults.addAll(equityOptionBlackSurfaceInterpolationDefaults.createPerEquityDefaults()); final List<String> equityOptionPerExchangeDefaults = Lists.newArrayList(PriorityClass.NORMAL.name()); equityOptionPerExchangeDefaults.addAll(equityOptionBlackSurfaceInterpolationDefaults.createPerExchangeDefaults()); final List<String> equityOptionPerCurrencyDefaults = Lists.newArrayList(PriorityClass.BELOW_NORMAL.name()); equityOptionPerCurrencyDefaults.addAll(equityOptionBlackSurfaceInterpolationDefaults.createPerCurrencyDefaults()); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityOptionInterpolatedBlackLognormalPerEquityDefaults.class.getName(), equityOptionPerEquityDefaults)); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityOptionInterpolatedBlackLognormalPerExchangeDefaults.class.getName(), equityOptionPerExchangeDefaults)); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityOptionInterpolatedBlackLognormalPerCurrencyDefaults.class.getName(), equityOptionPerCurrencyDefaults)); // Defaults added for Listed Equity Options // 1. EquityOptionCalculationMethodDefaultFunction added elsewhere in addEquityOptionCalculationMethodDefaults // 2. ListedEquityOptionFunction defaults // 3. EquityForwardCurveFunction defaults final EquityInstrumentDefaultValues.Builder listedEquityOptionMethodDefaults = EquityInstrumentDefaultValues.builder() .useIdName() .useDiscountingCurveNames() .useDiscountingCurveCalculationConfigNames() .useForwardCurveNames() .useForwardCurveCalculationMethodNames(); final List<String> listedEquityOptionPerTickerDefaults = Lists.newArrayList(PriorityClass.ABOVE_NORMAL.name()); listedEquityOptionPerTickerDefaults.addAll(listedEquityOptionMethodDefaults.createPerEquityDefaults()); functionConfigs.add(new ParameterizedFunctionConfiguration(ListedEquityOptionPerTickerDefaults.class.getName(), listedEquityOptionPerTickerDefaults)); } protected void addEquityFutureOptionDefaults(final List<FunctionConfiguration> functionConfigs) { final List<String> surfaceCalculationMethodPerCurrencyDefaults = Arrays.asList(PriorityClass.ABOVE_NORMAL.name(), "USD", BlackVolatilitySurfacePropertyNamesAndValues.INTERPOLATED_BLACK_LOGNORMAL); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityFutureOptionSurfaceCalculationMethodDefaults.class.getName(), surfaceCalculationMethodPerCurrencyDefaults)); final List<String> surfaceInterpolationDefaults = Arrays.asList(PriorityClass.ABOVE_NORMAL.name(), "USD", "Discounting", "DefaultTwoCurveUSDConfig", "BBG", BlackVolatilitySurfacePropertyNamesAndValues.SPLINE, "BBG", ForwardCurveValuePropertyNames.PROPERTY_FUTURE_PRICE_METHOD); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityFutureOptionBlackLognormalDefaults.class.getName(), surfaceInterpolationDefaults)); } protected void addEquityPureVolatilitySurfaceDefaults(final List<FunctionConfiguration> functionConfigs) { final List<String> defaults = EquityInstrumentDefaultValues.builder() .useIdName() .useDiscountingCurveNames() .useDiscountingCurveCurrency() .useDiscountingCurveCalculationConfigNames() .useVolatilitySurfaceNames() .createPerEquityDefaults(); functionConfigs.add(new ParameterizedFunctionConfiguration(PureBlackVolatilitySurfacePrimitiveDefaults.class.getName(), defaults)); functionConfigs.add(new ParameterizedFunctionConfiguration(PureBlackVolatilitySurfaceSecurityDefaults.class.getName(), defaults)); } protected void addEquityVarianceSwapDefaults(final List<FunctionConfiguration> functionConfigs) { final List<String> equityVarianceSwapStaticReplicationDefaults = EquityInstrumentDefaultValues.builder() .useIdName() .useDiscountingCurveNames() .useDiscountingCurveCalculationConfigNames() .useVolatilitySurfaceNames() .createPerEquityDefaults(); final List<String> equityVarianceSwapStaticReplicationDefaultsWithPriority = new ArrayList<>(); equityVarianceSwapStaticReplicationDefaultsWithPriority.add(PriorityClass.NORMAL.name()); equityVarianceSwapStaticReplicationDefaultsWithPriority.addAll(equityVarianceSwapStaticReplicationDefaults); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityVarianceSwapStaticReplicationDefaults.class.getName(), equityVarianceSwapStaticReplicationDefaultsWithPriority)); final List<String> equityVarianceSwapDefaults = EquityInstrumentDefaultValues.builder() .useIdName() .useDiscountingCurveNames() .useForwardCurveNames() .useForwardCurveCalculationConfigNames() .useForwardCurveCalculationMethodNames() .useDiscountingCurveCurrency() .useVolatilitySurfaceNames() .createPerEquityDefaults(); final List<String> equityVarianceSwapDefaultsWithPriority = new ArrayList<>(); equityVarianceSwapDefaultsWithPriority.add(PriorityClass.NORMAL.name()); equityVarianceSwapDefaultsWithPriority.addAll(equityVarianceSwapDefaults); functionConfigs.add(new ParameterizedFunctionConfiguration(EquityVarianceSwapDefaults.class.getName(), equityVarianceSwapDefaultsWithPriority)); } protected void addEquityOptionCalculationMethodDefaults(final List<FunctionConfiguration> functionConfigs) { final List<String> defaults = Arrays.asList(PriorityClass.ABOVE_NORMAL.name(), CalculationPropertyNamesAndValues.ROLL_GESKE_WHALEY_LISTED_METHOD, // (American) Equity Options CalculationPropertyNamesAndValues.BLACK_LISTED_METHOD, // (European) EquityIndexOptions CalculationPropertyNamesAndValues.BJERKSUND_STENSLAND_LISTED_METHOD); // (American) EquityIndexFutureOptions functionConfigs.add(new ParameterizedFunctionConfiguration(EquityOptionCalculationMethodDefaultFunction.class.getName(), defaults)); } protected void addListedEquityOptionDefaults(final List<FunctionConfiguration> functionConfigs) { functionConfigs.add(functionConfiguration(ListedEquityOptionPerSecurityTypeDefaults.class, PriorityClass.ABOVE_NORMAL.name(), EquityOptionSecurity.SECURITY_TYPE, "OIS", "DefaultTwoCurveUSDConfig", "Forward3M", ForwardCurveValuePropertyNames.PROPERTY_YIELD_CURVE_IMPLIED_METHOD, EquityIndexOptionSecurity.SECURITY_TYPE, "OIS", "DefaultTwoCurveUSDConfig", "Forward3M", ForwardCurveValuePropertyNames.PROPERTY_FUTURE_PRICE_METHOD, EquityIndexFutureOptionSecurity.SECURITY_TYPE, "OIS", "DefaultTwoCurveUSDConfig", "Forward3M", ForwardCurveValuePropertyNames.PROPERTY_FUTURE_PRICE_METHOD)); } @Override protected FunctionConfigurationSource createObject() { return CombiningFunctionConfigurationSource.of(super.createObject(), curveFunctions(), multicurvePricingFunctions()); } }