Optimizer

Optimizer#

class sigtech.framework.analytics.optimization.optimizer.Optimizer

Subclasses: PortfolioOptimizer

A class implementing an optimisation task.

To run an optimisation problem, a OptimizationProblem object needs to be provided.

If fit requires Factors then the FactorExposures containing the data must also be passed and the weights are found with Optimizer.calculate_optimized_weights. Otherwise, if the optimization does not require knowledge of factors, FactorExposures=None is valid but calculate_optimized_weights_with_fit must be used.

See also

sigtech.framework.analytics.optimization.optimization_problem.OptimizationProblem

An example of running a mean-variance optimisation is provided below. Here, RETURNS_DATA_DICTIONARY is a dictionary of return series for each instrument.

from sigtech.framework.analytics.optimization.optimization_problem import TermTypes, MetricTypes

# Setup data
returns_data_dict = {}
factor_exposure = sig.FactorExposures()
factor_exposure.fit(returns_data_dict)

# Create a problem
problem = sig.OptimizationProblem()
problem.set_optimizer_objective(TermTypes.WEIGHT,
                                element='SUM_',
                                weights='AVG_RET.',
                                value=1)
problem.set_optimizer_objective(TermTypes.VARIANCE,
                                element='FULL',
                                metric=MetricTypes.VARIANCE,
                                value=-10) # Want to minimize the return so require a negative weight
problem.set_optimizer_bounds(TermTypes.WEIGHT,
                             element='ALL',
                             min_value=0)
problem.set_optimizer_bounds(TermTypes.WEIGHT,
                             element='SUM_',
                             min_value=1,
                             max_value=1)

# Run optimisation
optimizer = sig.Optimizer(factor_exposure, problem)
# Once `returns_data_dict` is populated, you can run `optimizer.calculate_optimized_weights()`
calculate_matrices()

Evaluate the standard matrices for use in the optimisation.

calculate_optimized_weights(initial_guess: Optional[Union[Series, ndarray]] = None)

Construct and try to solve the optimisation objectives with constraints.

The solvers stored in the list self.solvers will be used in order to attempt to solve the problem. If no solver is successful, an OptimizationError will be raised.

calculate_optimized_weights_with_fit(initial_guess: Optional[Union[Series, ndarray]] = None, *fit_args, **fit_kwargs)

Fit an empty FactorExposures object to allow us to use the Optimizer functionality without any factors.

Usually a pd.DataFrame of instrument returns is expected in fit_args.

Parameters:
  • fit_args – Args to pass to FactorExposures.fit.

  • fit_kwargs – Kwargs to pass to FactorExposures.fit.

covariance_df(covariance_array)

Convert an array to DataFrame.

Parameters:

covariance_array – Input array.

Returns:

pandas DataFrame.