Source code for portfolio_toolkit.optimization.optimization

from dataclasses import dataclass
from typing import List, Optional

import pandas as pd

from portfolio_toolkit.asset.optimization_asset import OptimizationAsset
from portfolio_toolkit.data_provider.data_provider import DataProvider
from portfolio_toolkit.math.get_matrix_returns import get_matrix_returns
from portfolio_toolkit.math.get_var import get_covariance_matrix


[docs] @dataclass class Optimization: """ Class to represent and manage an asset optimization. """ name: str currency: str assets: List[OptimizationAsset] data_provider: DataProvider returns: Optional[pd.DataFrame] = None covariance_matrix: Optional[pd.DataFrame] = None weights: Optional[pd.Series] = None def __post_init__(self): if not self.assets: raise ValueError("Optimization must have at least one asset.") self.weights = pd.Series([asset.quantity for asset in self.assets]) self.returns = get_matrix_returns(self.assets) self.covariance_matrix = get_covariance_matrix(self.assets) def __repr__(self): return f"Optimization(name={self.name}, currency={self.currency}, assets_count={len(self.assets)})"