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
Constraintprotocol.- 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 │ └────────┴────────┘