sf_quant.optimizer.mve_optimizer#
- sf_quant.optimizer.mve_optimizer(ids: list[str], alphas: ndarray, factor_exposures: ndarray, factor_covariance: ndarray, specific_risk: ndarray, constraints: list[Constraint], gamma: float = 2, betas: ndarray | None = None) DataFrame#
Mean-variance optimizer using a factor risk model decomposition.
Solves a mean-variance optimization problem where portfolio variance is computed using a factor model with Fama-French style factor decomposition:
\[\Sigma = B F B^T + \text{diag}(D)\]Parameters#
- idslist[str]
Asset identifiers (e.g., ticker symbols or BARRAs).
- alphasnp.ndarray
Expected returns for each asset, shape (n_assets,).
- factor_exposuresnp.ndarray
B matrix of shape (n_assets, n_factors), containing asset factor exposures.
- factor_covariancenp.ndarray
F matrix of shape (n_factors, n_factors), factor covariance matrix.
- specific_risknp.ndarray
D vector of shape (n_assets,), idiosyncratic (specific) variance per asset.
- constraintslist[Constraint]
List of constraint objects implementing the
Constraintprotocol (e.g.,FullInvestment(),LongOnly()).- gammafloat, optional
Risk aversion parameter. Higher values penalize variance more strongly. Default is 2.
- betasnp.ndarray, optional
Predicted betas or other asset-level values required by certain constraints such as
UnitBetaorZeroBeta.
Returns#
- pl.DataFrame
Polars DataFrame with columns:
barrid: str, asset identifier.weight: float, optimized portfolio weight.
Examples#
>>> import sf_quant.optimizer as sfo >>> import numpy as np >>> ids = ['AAPL', 'IBM'] >>> alphas = np.array([1.1, 1.2]) >>> factor_exposures = np.array([[0.8, 0.5], [1.2, 0.3]]) >>> factor_covariance = np.array([[0.5, 0.1], [0.1, 0.2]]) >>> specific_risk = np.array([0.1, 0.15]) >>> constraints = [sfo.FullInvestment()] >>> weights = sfo.mve_optimizer( ... ids=ids, ... alphas=alphas, ... factor_exposures=factor_exposures, ... factor_covariance=factor_covariance, ... specific_risk=specific_risk, ... constraints=constraints ... ) >>> weights shape: (2, 2) ┌────────┬────────┐ │ barrid ┆ weight │ │ --- ┆ --- │ │ str ┆ f64 │ ╞════════╪════════╡ │ AAPL ┆ 0.45 │ │ IBM ┆ 0.55 │ └────────┴────────┘