Código fuente para portfolio_toolkit.portfolio.portfolio

from dataclasses import dataclass
from typing import List

from portfolio_toolkit.account.account import Account
from portfolio_toolkit.asset.portfolio.portfolio_asset import PortfolioAsset
from portfolio_toolkit.data_provider.data_provider import DataProvider


[documentos] @dataclass class Portfolio: name: str currency: str assets: List[PortfolioAsset] data_provider: DataProvider account: Account start_date: str # = field(init=False) def __post_init__(self): self.account.sort_transactions() # def __post_init__(self): # # Determina la fecha más antigua de las transacciones de todos los activos # all_dates = [] # for asset in self.assets: # for tx in asset.transactions: # all_dates.append(tx.date) # if all_dates: # self.start_date = min(all_dates) # else: # self.start_date = "N/A" # o lanzar una excepción si es requerido
[documentos] @classmethod def from_dict(cls, data: dict, data_provider: DataProvider) -> "Portfolio": from .portfolio_from_dict import portfolio_from_dict """ Alternate constructor that builds PortfolioStats from a Portfolio and year. """ return portfolio_from_dict(data, data_provider)
def __repr__(self): return ( f"Portfolio(name={self.name}, currency={self.currency}, " f"assets={len(self.assets)}, start_date={self.start_date}, " f"data_provider={type(self.data_provider).__name__}, " f"account={self.account})" )
[documentos] def get_stats(self, year: str) -> "PortfolioStats": """ Returns PortfolioStats for the given year. """ from .stats.portfolio_stats import PortfolioStats return PortfolioStats.from_portfolio(self, year)
[documentos] def get_time_series(self) -> "PortfolioTimeSeries": """ Returns a PortfolioTimeSeries for the given portfolio. """ from .time_series.portfolio_time_series import PortfolioTimeSeries return PortfolioTimeSeries.from_portfolio(self)
[documentos] def get_open_positions(self, date: str) -> "OpenPositionList": """ Returns OpenPositionList for the given date. """ from portfolio_toolkit.position.open.open_position_list import OpenPositionList return OpenPositionList.from_portfolio(self.assets, date)
[documentos] def get_closed_positions( self, from_date: str, to_date: str ) -> "ClosedPositionList": """ Returns ClosedPositionList for the given date. """ from portfolio_toolkit.position.closed.closed_position_list import ( ClosedPositionList, ) return ClosedPositionList.from_portfolio(self.assets, from_date, to_date)