/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.model.volatility.surface;
import java.util.List;
import com.opengamma.analytics.math.interpolation.Interpolator1DFactory;
import com.opengamma.engine.function.config.AbstractFunctionConfigurationBean;
import com.opengamma.engine.function.config.CombiningFunctionConfigurationSource;
import com.opengamma.engine.function.config.FunctionConfiguration;
import com.opengamma.engine.function.config.FunctionConfigurationSource;
import com.opengamma.financial.analytics.model.volatility.surface.black.BlackFunctions;
import com.opengamma.util.ArgumentChecker;
/**
* Function repository configuration source for the functions contained in this package and sub-packages.
*/
public class SurfaceFunctions extends AbstractFunctionConfigurationBean {
/**
* Default instance of a repository configuration source exposing the functions from this package and its sub-packages.
*
* @return the configuration source exposing functions from this package and its sub-packages
*/
public static FunctionConfigurationSource instance() {
return new SurfaceFunctions().getObjectCreating();
}
/**
* Function repository configuration source for the default functions contained in this package.
*/
public static class Defaults extends AbstractFunctionConfigurationBean {
private String _xInterpolatorName = Interpolator1DFactory.LINEAR;
private String _yInterpolatorName = Interpolator1DFactory.LINEAR;
private String _leftXExtrapolatorName = Interpolator1DFactory.FLAT_EXTRAPOLATOR;
private String _rightXExtrapolatorName = Interpolator1DFactory.FLAT_EXTRAPOLATOR;
private String _leftYExtrapolatorName = Interpolator1DFactory.FLAT_EXTRAPOLATOR;
private String _rightYExtrapolatorName = Interpolator1DFactory.FLAT_EXTRAPOLATOR;
private boolean _useFixedAlpha; /* = false;*/
private boolean _useFixedBeta = true;
private boolean _useFixedRho; /* = false;*/
private boolean _useFixedNu; /* = false;*/
private double _alpha = 0.05;
private double _beta = 1.0;
private double _rho = 0.07;
private double _nu; /* = 0.0;*/
private double _error = 0.001;
public void setXInterpolatorName(final String xInterpolatorName) {
_xInterpolatorName = xInterpolatorName;
}
public String getXInterpolatorName() {
return _xInterpolatorName;
}
public void setYInterpolatorName(final String yInterpolatorName) {
_yInterpolatorName = yInterpolatorName;
}
public String getYInterpolatorName() {
return _yInterpolatorName;
}
public void setLeftXExtrapolatorName(final String leftXExtrapolatorName) {
_leftXExtrapolatorName = leftXExtrapolatorName;
}
public String getLeftXExtrapolatorName() {
return _leftXExtrapolatorName;
}
public void setRightXExtrapolatorName(final String rightXExtrapolatorName) {
_rightXExtrapolatorName = rightXExtrapolatorName;
}
public String getRightXExtrapolatorName() {
return _rightXExtrapolatorName;
}
public void setLeftYExtrapolatorName(final String leftYExtrapolatorName) {
_leftYExtrapolatorName = leftYExtrapolatorName;
}
public String getLeftYExtrapolatorName() {
return _leftYExtrapolatorName;
}
public void setRightYExtrapolatorName(final String rightYExtrapolatorName) {
_rightYExtrapolatorName = rightYExtrapolatorName;
}
public String getRightYExtrapolatorName() {
return _rightYExtrapolatorName;
}
public void setUseFixedAlpha(final boolean useFixedAlpha) {
_useFixedAlpha = useFixedAlpha;
}
public boolean isUseFixedAlpha() {
return _useFixedAlpha;
}
public void setUseFixedBeta(final boolean useFixedBeta) {
_useFixedBeta = useFixedBeta;
}
public boolean isUseFixedBeta() {
return _useFixedBeta;
}
public void setUseFixedRho(final boolean useFixedRho) {
_useFixedRho = useFixedRho;
}
public boolean isUseFixedRho() {
return _useFixedRho;
}
public void setUseFixedNu(final boolean useFixedNu) {
_useFixedNu = useFixedNu;
}
public boolean isUseFixedNu() {
return _useFixedNu;
}
public void setAlpha(final double alpha) {
_alpha = alpha;
}
public double getAlpha() {
return _alpha;
}
public void setBeta(final double beta) {
_beta = beta;
}
public double getBeta() {
return _beta;
}
public void setRho(final double rho) {
_rho = rho;
}
public double getRho() {
return _rho;
}
public void setNu(final double nu) {
_nu = nu;
}
public double getNu() {
return _nu;
}
public void setError(final double error) {
_error = error;
}
public double getError() {
return _error;
}
@Override
public void afterPropertiesSet() {
ArgumentChecker.notNullInjected(getXInterpolatorName(), "xInterpolatorName");
ArgumentChecker.notNullInjected(getYInterpolatorName(), "yInterpolatorName");
ArgumentChecker.notNullInjected(getLeftXExtrapolatorName(), "leftXExtrapolatorName");
ArgumentChecker.notNullInjected(getRightXExtrapolatorName(), "rightXExtrapolatorName");
ArgumentChecker.notNullInjected(getLeftYExtrapolatorName(), "leftYExtrapolatorName");
ArgumentChecker.notNullInjected(getRightYExtrapolatorName(), "rightYExtrapolatorName");
super.afterPropertiesSet();
}
@Override
protected void addAllConfigurations(final List<FunctionConfiguration> functions) {
functions.add(functionConfiguration(SABRIRFutureOptionNLSSDefaults.class,
getXInterpolatorName(), getYInterpolatorName(), getLeftXExtrapolatorName(), getRightXExtrapolatorName(), getLeftYExtrapolatorName(), getRightYExtrapolatorName(),
Boolean.toString(isUseFixedAlpha()), Boolean.toString(isUseFixedBeta()), Boolean.toString(isUseFixedRho()), Boolean.toString(isUseFixedNu()), Double.toString(getAlpha()),
Double.toString(getBeta()), Double.toString(getRho()), Double.toString(getNu()), Double.toString(getError())));
}
}
@Override
protected void addAllConfigurations(final List<FunctionConfiguration> functions) {
functions.add(functionConfiguration(BlackScholesMertonImpliedVolatilitySurfaceFunction.class));
functions.add(functionConfiguration(HestonFourierIRFutureSurfaceFittingFunction.class));
functions.add(functionConfiguration(SABRNonLinearLeastSquaresIRFutureOptionSurfaceFittingFunction.class));
functions.add(functionConfiguration(ForexStrangleRiskReversalVolatilitySurfaceFunction.class));
functions.add(functionConfiguration(ForexCallDeltaVolatilitySurfaceFunction.class));
functions.add(functionConfiguration(ForexPutDeltaVolatilitySurfaceFunction.class));
functions.add(functionConfiguration(ForexFlatWithTermStructureVolatilitySurfaceFunction.class));
functions.add(functionConfiguration(ForexStrangleRiskReversalVolatilitySurfaceFunction.class));
functions.add(functionConfiguration(InterpolatedVolatilitySurfaceFunction.class));
}
protected FunctionConfigurationSource blackFunctionConfiguration() {
return BlackFunctions.instance();
}
@Override
protected FunctionConfigurationSource createObject() {
return CombiningFunctionConfigurationSource.of(super.createObject(), blackFunctionConfiguration());
}
}