/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.model.equity.portfoliotheory; import java.util.List; import com.opengamma.analytics.financial.schedule.ScheduleCalculatorFactory; import com.opengamma.analytics.financial.schedule.TimeSeriesSamplingFunctionFactory; import com.opengamma.analytics.financial.timeseries.returns.TimeSeriesReturnCalculatorFactory; import com.opengamma.analytics.math.statistics.descriptive.StatisticsCalculatorFactory; import com.opengamma.engine.function.config.AbstractFunctionConfigurationBean; import com.opengamma.engine.function.config.FunctionConfiguration; import com.opengamma.engine.function.config.FunctionConfigurationSource; import com.opengamma.master.historicaltimeseries.impl.HistoricalTimeSeriesRatingFieldNames; import com.opengamma.util.ArgumentChecker; /** * Function repository configuration source for the functions contained in this package. */ public class PortfolioTheoryFunctions extends AbstractFunctionConfigurationBean { /** * Default instance of a repository configuration source exposing the functions from this package. * * @return the configuration source exposing functions from this package */ public static FunctionConfigurationSource instance() { return new PortfolioTheoryFunctions().getObjectCreating(); } /** * Function repository configuration source for the functions contained in this package. */ public static class Calculators extends AbstractFunctionConfigurationBean { private String _htsResolutionKey = HistoricalTimeSeriesRatingFieldNames.DEFAULT_CONFIG_NAME; public String getHtsResolutionKey() { return _htsResolutionKey; } public void setHtsResolutionKey(final String htsResolutionKey) { _htsResolutionKey = htsResolutionKey; } @Override public void afterPropertiesSet() { ArgumentChecker.notNullInjected(getHtsResolutionKey(), "htsResolutionKey"); super.afterPropertiesSet(); } @Override protected void addAllConfigurations(final List<FunctionConfiguration> functions) { functions.add(functionConfiguration(CAPMBetaModelPositionFunction.class, getHtsResolutionKey())); functions.add(functionConfiguration(CAPMBetaModelPortfolioNodeFunction.class, getHtsResolutionKey())); functions.add(functionConfiguration(CAPMFromRegressionModelFunction.class, getHtsResolutionKey())); functions.add(functionConfiguration(SharpeRatioPositionFunction.class, getHtsResolutionKey())); functions.add(functionConfiguration(SharpeRatioPortfolioNodeFunction.class, getHtsResolutionKey())); functions.add(functionConfiguration(TreynorRatioPositionFunction.class, getHtsResolutionKey())); functions.add(functionConfiguration(TreynorRatioPortfolioNodeFunction.class, getHtsResolutionKey())); functions.add(functionConfiguration(JensenAlphaFunction.class, getHtsResolutionKey())); functions.add(functionConfiguration(TotalRiskAlphaPositionFunction.class, getHtsResolutionKey())); functions.add(functionConfiguration(TotalRiskAlphaPortfolioNodeFunction.class, getHtsResolutionKey())); } } /** * Function repository configuration source for the default functions contained in this package. */ public static class Defaults extends AbstractFunctionConfigurationBean { private String _returnCalculatorName = TimeSeriesReturnCalculatorFactory.SIMPLE_NET_STRICT; private final String _samplingPeriodName = "P2Y"; private String _scheduleName = ScheduleCalculatorFactory.DAILY; private String _samplingFunctionName = TimeSeriesSamplingFunctionFactory.PREVIOUS_AND_FIRST_VALUE_PADDING; private String _stdDevCalculatorName = StatisticsCalculatorFactory.SAMPLE_STANDARD_DEVIATION; private String _covarianceCalculatorName = StatisticsCalculatorFactory.SAMPLE_COVARIANCE; private String _varianceCalculatorName = StatisticsCalculatorFactory.SAMPLE_VARIANCE; private String _excessReturnCalculatorName = StatisticsCalculatorFactory.MEAN; public void setReturnCalculatorName(final String returnCalculatorName) { _returnCalculatorName = returnCalculatorName; } public String getReturnCalculatorName() { return _returnCalculatorName; } public void setSamplingPeriodName(final String samplingPeriodName) { _samplingFunctionName = samplingPeriodName; } public String getSamplingPeriodName() { return _samplingPeriodName; } public void setScheduleName(final String scheduleName) { _scheduleName = scheduleName; } public String getScheduleName() { return _scheduleName; } public void setSamplingFunctionName(final String samplingFunctionName) { _samplingFunctionName = samplingFunctionName; } public String getSamplingFunctionName() { return _samplingFunctionName; } public void setStdDevCalculatorName(final String stdDevCalculatorName) { _stdDevCalculatorName = stdDevCalculatorName; } public String getStdDevCalculatorName() { return _stdDevCalculatorName; } public void setCovarianceCalculatorName(final String covarianceCalculatorName) { _covarianceCalculatorName = covarianceCalculatorName; } public String getCovarianceCalculatorName() { return _covarianceCalculatorName; } public void setVarianceCalculatorName(final String varianceCalculatorName) { _varianceCalculatorName = varianceCalculatorName; } public String getVarianceCalculatorName() { return _varianceCalculatorName; } public void setExcessReturnCalculatorName(final String excessReturnCalculatorName) { _excessReturnCalculatorName = excessReturnCalculatorName; } public String getExcessReturnCalculatorName() { return _excessReturnCalculatorName; } @Override public void afterPropertiesSet() { ArgumentChecker.notNullInjected(getReturnCalculatorName(), "returnCalculatorName"); ArgumentChecker.notNullInjected(getSamplingPeriodName(), "samplingPeriodName"); ArgumentChecker.notNullInjected(getScheduleName(), "scheduleName"); ArgumentChecker.notNullInjected(getSamplingFunctionName(), "samplingFunctionName"); ArgumentChecker.notNullInjected(getStdDevCalculatorName(), "stdDevCalculatorName"); ArgumentChecker.notNullInjected(getCovarianceCalculatorName(), "covarianceCalculatorName"); ArgumentChecker.notNullInjected(getVarianceCalculatorName(), "varianceCalculatorName"); ArgumentChecker.notNullInjected(getExcessReturnCalculatorName(), "excessReturnCalculatorName"); super.afterPropertiesSet(); } @Override protected void addAllConfigurations(final List<FunctionConfiguration> functions) { functions.add(functionConfiguration(CAPMBetaDefaultPropertiesPortfolioNodeFunction.class, getSamplingPeriodName(), getScheduleName(), getSamplingFunctionName(), getReturnCalculatorName(), getCovarianceCalculatorName(), getVarianceCalculatorName())); functions.add(functionConfiguration(CAPMBetaDefaultPropertiesPositionFunction.class, getSamplingPeriodName(), getScheduleName(), getSamplingFunctionName(), getReturnCalculatorName(), getCovarianceCalculatorName(), getVarianceCalculatorName())); functions.add(functionConfiguration(CAPMFromRegressionDefaultPropertiesPortfolioNodeFunction.class, getSamplingPeriodName(), getScheduleName(), getSamplingFunctionName(), getReturnCalculatorName())); functions.add(functionConfiguration(CAPMFromRegressionDefaultPropertiesPositionFunction.class, getSamplingPeriodName(), getScheduleName(), getSamplingFunctionName(), getReturnCalculatorName())); functions.add(functionConfiguration(SharpeRatioDefaultPropertiesPortfolioNodeFunction.class, getSamplingPeriodName(), getScheduleName(), getSamplingFunctionName(), getReturnCalculatorName(), getStdDevCalculatorName(), getExcessReturnCalculatorName())); functions.add(functionConfiguration(SharpeRatioDefaultPropertiesPositionFunction.class, getSamplingPeriodName(), getScheduleName(), getSamplingFunctionName(), getReturnCalculatorName(), getStdDevCalculatorName(), getExcessReturnCalculatorName())); functions.add(functionConfiguration(TreynorRatioDefaultPropertiesPortfolioNodeFunction.class, getSamplingPeriodName(), getScheduleName(), getSamplingFunctionName(), getReturnCalculatorName(), getStdDevCalculatorName(), getExcessReturnCalculatorName(), getCovarianceCalculatorName(), getVarianceCalculatorName())); functions.add(functionConfiguration(TreynorRatioDefaultPropertiesPositionFunction.class, getSamplingPeriodName(), getScheduleName(), getSamplingFunctionName(), getReturnCalculatorName(), getStdDevCalculatorName(), getExcessReturnCalculatorName(), getCovarianceCalculatorName(), getVarianceCalculatorName())); functions.add(functionConfiguration(JensenAlphaDefaultPropertiesPortfolioNodeFunction.class, getSamplingPeriodName(), getScheduleName(), getSamplingFunctionName(), getReturnCalculatorName(), getStdDevCalculatorName(), getExcessReturnCalculatorName(), getCovarianceCalculatorName(), getVarianceCalculatorName())); functions.add(functionConfiguration(JensenAlphaDefaultPropertiesPositionFunction.class, getSamplingPeriodName(), getScheduleName(), getSamplingFunctionName(), getReturnCalculatorName(), getStdDevCalculatorName(), getExcessReturnCalculatorName(), getCovarianceCalculatorName(), getVarianceCalculatorName())); functions.add(functionConfiguration(TotalRiskAlphaDefaultPropertiesPortfolioNodeFunction.class, getSamplingPeriodName(), getScheduleName(), getSamplingFunctionName(), getReturnCalculatorName(), getStdDevCalculatorName(), getExcessReturnCalculatorName())); functions.add(functionConfiguration(TotalRiskAlphaDefaultPropertiesPositionFunction.class, getSamplingPeriodName(), getScheduleName(), getSamplingFunctionName(), getReturnCalculatorName(), getStdDevCalculatorName(), getExcessReturnCalculatorName())); } } @Override protected void addAllConfigurations(final List<FunctionConfiguration> functions) { functions.add(functionConfiguration(StandardEquityModelFunction.class)); } }