sf_quant.optimizer.mve_optimizer#

sf_quant.optimizer.mve_optimizer(ids: list[str], alphas: ndarray, covariance_matrix: ndarray, constraints: list[Constraint], gamma: float = 2, betas: ndarray | None = None) DataFrame#

Mean-variance optimizer with constraints.

This function solves the constrained mean-variance optimization problem and returns optimal portfolio weights aligned with the provided ids.

Parameters#

idslist of str

Identifiers for the assets, used to label the output.

alphasnp.ndarray

Expected returns for each asset, shape (n_assets,).

covariance_matrixnp.ndarray

Covariance matrix of asset returns, shape (n_assets, n_assets).

constraintslist of Constraint

List of constraint objects implementing the Constraint protocol.

gammafloat

Risk-aversion parameter. Higher values penalize variance more strongly. Defaults to 2.

betasnp.ndarray, optional

Predicted betas, required for certain constraints (e.g., UnitBeta).

Returns#

pl.DataFrame

A Polars DataFrame with barrid and weight columns.

Examples#

>>> import sf_quant.optimizer as sfo
>>> import numpy as np
>>> ids = ['AAPL', 'IBM']
>>> alphas = np.array([1.1, 1.2])
>>> covariance_matrix = np.array([
...     [.5, .1],
...     [.1, .2]
... ])
>>> constraints = [sfo.FullInvestment()]
>>> weights = sfo.mve_optimizer(
...     ids=ids,
...     alphas=alphas,
...     covariance_matrix=covariance_matrix,
...     constraints=constraints
... )
>>> weights
shape: (2, 2)
┌────────┬────────┐
│ barrid ┆ weight │
│ ---    ┆ ---    │
│ str    ┆ f64    │
╞════════╪════════╡
│ AAPL   ┆ 0.1    │
│ IBM    ┆ 0.9    │
└────────┴────────┘