/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.model;
import java.util.Collections;
import java.util.List;
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.FunctionConfigurationBundle;
import com.opengamma.engine.function.config.FunctionConfigurationSource;
import com.opengamma.engine.function.config.SimpleFunctionConfigurationSource;
import com.opengamma.financial.analytics.model.black.BlackDiscountingPricingFunctions;
import com.opengamma.financial.analytics.model.bond.BondFunctions;
import com.opengamma.financial.analytics.model.bondcleanprice.BondCleanPriceFunctions;
import com.opengamma.financial.analytics.model.bondcurves.BondCurveFunctions;
import com.opengamma.financial.analytics.model.bondcurves.inflationbondcurves.InflationBondCurveFunctions;
import com.opengamma.financial.analytics.model.bondyield.BondYieldFunctions;
import com.opengamma.financial.analytics.model.carrlee.CarrLeeFunctions;
import com.opengamma.financial.analytics.model.curve.CurveFunctions;
import com.opengamma.financial.analytics.model.curve.forward.ForwardFunctions;
import com.opengamma.financial.analytics.model.curve.interestrate.InterestRateFunctions;
import com.opengamma.financial.analytics.model.discounting.DiscountingPricingFunctions;
import com.opengamma.financial.analytics.model.equity.EquityFunctions;
import com.opengamma.financial.analytics.model.forex.ForexFunctions;
import com.opengamma.financial.analytics.model.future.FutureFunctions;
import com.opengamma.financial.analytics.model.futureoption.FutureOptionFunctions;
import com.opengamma.financial.analytics.model.fx.FXForwardPricingFunctions;
import com.opengamma.financial.analytics.model.g2ppdiscounting.G2ppPricingFunctions;
import com.opengamma.financial.analytics.model.hullwhitediscounting.HullWhitePricingFunctions;
import com.opengamma.financial.analytics.model.option.OptionFunctions;
import com.opengamma.financial.analytics.model.pnl.PNLFunctions;
import com.opengamma.financial.analytics.model.sabr.SABRDiscountingPricingFunctions;
import com.opengamma.financial.analytics.model.sabrcube.SABRCubeFunctions;
import com.opengamma.financial.analytics.model.sensitivities.SensitivitiesFunctions;
import com.opengamma.financial.analytics.model.swaption.SwaptionFunctions;
import com.opengamma.financial.analytics.model.timeseries.TimeSeriesFunctions;
import com.opengamma.financial.analytics.model.trs.TotalReturnSwapFunctions;
import com.opengamma.financial.analytics.model.var.VaRFunctions;
import com.opengamma.financial.analytics.model.volatility.VolatilityFunctions;
/**
* Function repository configuration source for the functions contained in this package and sub-packages.
*/
public class ModelFunctions 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 ModelFunctions().getObjectCreating();
}
@Override
protected void addAllConfigurations(final List<FunctionConfiguration> functions) {
functions.add(functionConfiguration(MarginPriceFunction.class));
functions.add(functionConfiguration(PVCashBalanceFunction.class));
functions.add(functionConfiguration(FXCurrencyExposureFunction.class));
/*functions.add(functionConfiguration(InflationBondFromCurvesFunction.class));*/
}
/**
* Adds deprecated bond functions.
* @return A configuration source containing deprecated bond functions
* @deprecated The new versions of these functions are added in {{@link #bondCleanPriceFunctionConfiguration()}
*/
@Deprecated
protected FunctionConfigurationSource bondFunctionConfiguration() {
return BondFunctions.instance();
}
/**
* Adds functions that produce bond analytics from the clean price.
* @return A configuration source containing bond functions
*/
protected FunctionConfigurationSource bondCleanPriceFunctionConfiguration() {
return BondCleanPriceFunctions.instance();
}
/**
* Adds functions that produce bond analytics from yield curves.
* @return A configuration source containing bond functions
*/
protected FunctionConfigurationSource bondCurveFunctionConfiguration() {
return BondCurveFunctions.instance();
}
/**
* Adds functions that produce bond analytics from yield curves.
* @return A configuration source containing bond functions
*/
protected FunctionConfigurationSource inflationbondCurveFunctionConfiguration() {
return InflationBondCurveFunctions.instance();
}
/**
* Adds functions that produce bond analytics from the clean price.
* @return A configuration source containing bond functions
*/
protected FunctionConfigurationSource bondYieldFunctionConfiguration() {
return BondYieldFunctions.instance();
}
/**
* Adds functions that produce analytics for volatility swaps using the Carr-Lee
* model.
* @return A configuration source containing pricing and analytics functions
*/
protected FunctionConfigurationSource carrLeeFunctionConfiguration() {
return CarrLeeFunctions.instance();
}
/**
* Adds functions that produce curves.
* @return A configuration source containing curve functions
*/
protected FunctionConfigurationSource curveFunctionConfiguration() {
return CurveFunctions.instance();
}
/**
* Adds equity functions.
* @return A configuration source containing equity functions
*/
protected FunctionConfigurationSource equityFunctionConfiguration() {
return EquityFunctions.instance();
}
/**
* Adds deprecated interest rate instrument functions.
* @return A configuration source containing the deprecated interest rate instrument functions
* @deprecated The current versions of these functions are added in {@link #discountingFunctionConfiguration}
*/
@Deprecated
protected FunctionConfigurationSource fixedIncomeFunctionConfiguration() {
return com.opengamma.financial.analytics.model.fixedincome.DeprecatedFunctions.instance();
}
/**
* Adds pricing functions that use curves constructed with the discounting method.
* @return A configuration source containing these functions.
*/
protected FunctionConfigurationSource discountingFunctionConfiguration() {
return DiscountingPricingFunctions.instance();
}
/**
* Adds pricing functions that use Black surfaces and curve constructed with
* the discounting method.
* @return A configuration source containing these functions
*/
protected FunctionConfigurationSource blackDiscountingFunctionConfiguration() {
return BlackDiscountingPricingFunctions.instance();
}
/**
* Adds pricing functions that use curves constructed using the Hull-White
* one factor discounting method.
* @return A configuration source containing these functions
*/
protected FunctionConfigurationSource hullWhitePricingFunctionConfiguration() {
return HullWhitePricingFunctions.instance();
}
/**
* Adds pricing functions that use curves constructed using the G2++
* discounting method
* @return A configuration source containing these functions
*/
protected FunctionConfigurationSource g2ppPricingFunctionConfiguration() {
return G2ppPricingFunctions.instance();
}
protected FunctionConfigurationSource fxPricingFunctionConfiguration() {
return FXForwardPricingFunctions.instance();
}
protected FunctionConfigurationSource yieldCurveFunctionConfiguration() {
return InterestRateFunctions.instance();
}
protected FunctionConfigurationSource forwardFunctionConfiguration() {
return ForwardFunctions.instance();
}
protected FunctionConfigurationSource forexFunctionConfiguration() {
return ForexFunctions.instance();
}
protected FunctionConfigurationSource futureFunctionConfiguration() {
return FutureFunctions.instance();
}
protected FunctionConfigurationSource futureOptionFunctionConfiguration() {
return FutureOptionFunctions.instance();
}
/**
* Adds interest rate future-specific functions.
* @return A configuration source containing the deprecated interest rate future functions.
* @deprecated The current versions of these functions are added in {@link ModelFunctions#blackDiscountingFunctionConfiguration}
*/
@Deprecated
protected FunctionConfigurationSource interestRateFutureFunctionConfiguration() {
return FutureFunctions.deprecated();
}
/**
* Adds general option functions.
* @return A configuration source containing option functions
* @deprecated The underlying-specific functions should be used
*/
@Deprecated
protected FunctionConfigurationSource optionFunctionConfiguration() {
return OptionFunctions.instance();
}
protected FunctionConfigurationSource pnlFunctionConfiguration() {
return PNLFunctions.instance();
}
protected FunctionConfigurationSource riskFactorFunctionConfiguration() {
// TODO
return new SimpleFunctionConfigurationSource(new FunctionConfigurationBundle(Collections.<FunctionConfiguration>emptyList()));
}
/**
* Adds SABR pricing functions for swaptions, cap/floors, CMS and cap/floor CMS spreads
* @return A configuration source containing the deprecated functions
* @deprecated The current versions of these functions are added in {@link ModelFunctions#sabrDiscountingFunctionConfiguration()}
*/
@Deprecated
protected FunctionConfigurationSource sabrCubeFunctionConfiguration() {
return SABRCubeFunctions.instance();
}
protected FunctionConfigurationSource sabrDiscountingFunctionConfiguration() {
return SABRDiscountingPricingFunctions.instance();
}
protected FunctionConfigurationSource sensitivitiesFunctionConfiguration() {
return SensitivitiesFunctions.instance();
}
protected FunctionConfigurationSource swaptionFunctionConfiguration() {
return SwaptionFunctions.instance();
}
protected FunctionConfigurationSource varFunctionConfiguration() {
return VaRFunctions.instance();
}
protected FunctionConfigurationSource volatilityFunctionConfiguration() {
return VolatilityFunctions.instance();
}
protected FunctionConfigurationSource futureCurveFunctionConfiguration() {
return com.opengamma.financial.analytics.model.curve.future.FutureFunctions.instance();
}
/**
* Adds time series functions.
* @return A configuration source containing time series functions
*/
protected FunctionConfigurationSource timeSeriesFunctionConfiguration() {
return TimeSeriesFunctions.instance();
}
/**
* Adds total return swap functions.
* @return A configuration source containing total return swap functions
*/
protected FunctionConfigurationSource totalReturnSwapFunctionConfiguration() {
return TotalReturnSwapFunctions.instance();
}
@Override
protected FunctionConfigurationSource createObject() {
return CombiningFunctionConfigurationSource.of(super.createObject(),
bondFunctionConfiguration(),
bondCleanPriceFunctionConfiguration(),
bondCurveFunctionConfiguration(),
inflationbondCurveFunctionConfiguration(),
bondYieldFunctionConfiguration(),
carrLeeFunctionConfiguration(),
curveFunctionConfiguration(),
equityFunctionConfiguration(),
fixedIncomeFunctionConfiguration(),
forexFunctionConfiguration(),
futureFunctionConfiguration(),
futureOptionFunctionConfiguration(),
optionFunctionConfiguration(),
pnlFunctionConfiguration(),
riskFactorFunctionConfiguration(),
sabrCubeFunctionConfiguration(),
sensitivitiesFunctionConfiguration(),
swaptionFunctionConfiguration(),
varFunctionConfiguration(),
volatilityFunctionConfiguration(),
yieldCurveFunctionConfiguration(),
forwardFunctionConfiguration(),
futureCurveFunctionConfiguration(),
discountingFunctionConfiguration(),
hullWhitePricingFunctionConfiguration(),
interestRateFutureFunctionConfiguration(),
fxPricingFunctionConfiguration(),
blackDiscountingFunctionConfiguration(),
sabrDiscountingFunctionConfiguration(),
g2ppPricingFunctionConfiguration(),
timeSeriesFunctionConfiguration(),
totalReturnSwapFunctionConfiguration());
}
}