dcfArrayCalculator

 1import yfinance as yf
 2from dcfCalculator import DcfCalculator
 3
 4
 5class DcfArrayCalculator:
 6    def __init__(self):
 7        """Inicializa el objeto DcfArrayCalculator."""
 8        pass
 9
10    def getValue(self, ticker, method, format, percentage):
11        """
12        Obtiene el valor de un método específico y lo formatea según sea necesario.
13
14        Args:
15            ticker (str): El símbolo del ticker de la acción.
16            method (method): El método para obtener el valor.
17            format (bool): Indica si el valor debe ser formateado.
18            percentage (bool): Indica si el valor es un porcentaje.
19
20        Returns:
21            obj: El valor obtenido.
22        """
23        try:
24            value = method()
25            if format:
26                if percentage:
27                    value = "{:.2f}%".format(value)
28                else:
29                    value = "{:,.2f}".format(value)
30            return value
31        except Exception as e:
32            raise Exception(f"No se pudo obtener el valor de {ticker}\n {e}") from e
33
34    def arrDcf(self, tickerStr, g, rf, rm, hasEbitda, hasEarnings, hasRoe, hasPer, growth):
35        """
36        Calcula los valores DCF para una lista de tickers.
37
38        Args:
39            tickerStr (list): Lista de símbolos de ticker de las acciones.
40            g (float): Tasa de crecimiento a perpetuidad.
41            rf (float): Tasa libre de riesgo.
42            rm (float): Retorno del mercado.
43            hasEbitda (bool): Indica si se requiere el cálculo de EBITDA.
44            hasEarnings (bool): Indica si se requiere el cálculo de las ganancias.
45            hasRoe (bool): Indica si se requiere el cálculo de ROE.
46            hasPer (bool): Indica si se requiere el cálculo de PER.
47
48        Returns:
49            list: Una lista que contiene los valores DCF calculados para cada ticker.
50        """
51        finalResult = []
52
53        for ticker in filter(None, tickerStr):
54            dcfCalculator = DcfCalculator(yf.Ticker(ticker))
55
56            values = [
57                (hasEbitda, dcfCalculator.getEbitda, False, False),
58                (hasEarnings, dcfCalculator.getEarnings, True, True),
59                (hasRoe, dcfCalculator.getRoe, True, True),
60                (hasPer, dcfCalculator.getPer, True, False),
61            ]
62
63            finalsOptions = []
64            for has_value, method, format, percentage in values:
65                if has_value:
66                    try:
67                        value = self.getValue(ticker, method, format, percentage)
68                        if value is not None:
69                            finalsOptions.append(value)
70                    except Exception as e:
71                        print(e)
72                        finalsOptions = ["Error"]
73                        break
74
75            resultDCF = dcfCalculator.dcf(ticker, g, rf, rm, growth)
76            if isinstance(resultDCF, str):
77                finalResult.append([ticker.upper(), "Error"])
78            else:
79                arrayWithUSD = [
80                    ("$ " + "{:,.0f}".format(value).replace(",", "."))
81                    for value in resultDCF[2]
82                ]
83                finalResult.append(
84                    [ticker.upper(), resultDCF[0], resultDCF[1]]
85                    + arrayWithUSD
86                    + resultDCF[3:]
87                    + finalsOptions
88                )
89
90        return finalResult
class DcfArrayCalculator:
 6class DcfArrayCalculator:
 7    def __init__(self):
 8        """Inicializa el objeto DcfArrayCalculator."""
 9        pass
10
11    def getValue(self, ticker, method, format, percentage):
12        """
13        Obtiene el valor de un método específico y lo formatea según sea necesario.
14
15        Args:
16            ticker (str): El símbolo del ticker de la acción.
17            method (method): El método para obtener el valor.
18            format (bool): Indica si el valor debe ser formateado.
19            percentage (bool): Indica si el valor es un porcentaje.
20
21        Returns:
22            obj: El valor obtenido.
23        """
24        try:
25            value = method()
26            if format:
27                if percentage:
28                    value = "{:.2f}%".format(value)
29                else:
30                    value = "{:,.2f}".format(value)
31            return value
32        except Exception as e:
33            raise Exception(f"No se pudo obtener el valor de {ticker}\n {e}") from e
34
35    def arrDcf(self, tickerStr, g, rf, rm, hasEbitda, hasEarnings, hasRoe, hasPer, growth):
36        """
37        Calcula los valores DCF para una lista de tickers.
38
39        Args:
40            tickerStr (list): Lista de símbolos de ticker de las acciones.
41            g (float): Tasa de crecimiento a perpetuidad.
42            rf (float): Tasa libre de riesgo.
43            rm (float): Retorno del mercado.
44            hasEbitda (bool): Indica si se requiere el cálculo de EBITDA.
45            hasEarnings (bool): Indica si se requiere el cálculo de las ganancias.
46            hasRoe (bool): Indica si se requiere el cálculo de ROE.
47            hasPer (bool): Indica si se requiere el cálculo de PER.
48
49        Returns:
50            list: Una lista que contiene los valores DCF calculados para cada ticker.
51        """
52        finalResult = []
53
54        for ticker in filter(None, tickerStr):
55            dcfCalculator = DcfCalculator(yf.Ticker(ticker))
56
57            values = [
58                (hasEbitda, dcfCalculator.getEbitda, False, False),
59                (hasEarnings, dcfCalculator.getEarnings, True, True),
60                (hasRoe, dcfCalculator.getRoe, True, True),
61                (hasPer, dcfCalculator.getPer, True, False),
62            ]
63
64            finalsOptions = []
65            for has_value, method, format, percentage in values:
66                if has_value:
67                    try:
68                        value = self.getValue(ticker, method, format, percentage)
69                        if value is not None:
70                            finalsOptions.append(value)
71                    except Exception as e:
72                        print(e)
73                        finalsOptions = ["Error"]
74                        break
75
76            resultDCF = dcfCalculator.dcf(ticker, g, rf, rm, growth)
77            if isinstance(resultDCF, str):
78                finalResult.append([ticker.upper(), "Error"])
79            else:
80                arrayWithUSD = [
81                    ("$ " + "{:,.0f}".format(value).replace(",", "."))
82                    for value in resultDCF[2]
83                ]
84                finalResult.append(
85                    [ticker.upper(), resultDCF[0], resultDCF[1]]
86                    + arrayWithUSD
87                    + resultDCF[3:]
88                    + finalsOptions
89                )
90
91        return finalResult
DcfArrayCalculator()
7    def __init__(self):
8        """Inicializa el objeto DcfArrayCalculator."""
9        pass

Inicializa el objeto DcfArrayCalculator.

def getValue(self, ticker, method, format, percentage):
11    def getValue(self, ticker, method, format, percentage):
12        """
13        Obtiene el valor de un método específico y lo formatea según sea necesario.
14
15        Args:
16            ticker (str): El símbolo del ticker de la acción.
17            method (method): El método para obtener el valor.
18            format (bool): Indica si el valor debe ser formateado.
19            percentage (bool): Indica si el valor es un porcentaje.
20
21        Returns:
22            obj: El valor obtenido.
23        """
24        try:
25            value = method()
26            if format:
27                if percentage:
28                    value = "{:.2f}%".format(value)
29                else:
30                    value = "{:,.2f}".format(value)
31            return value
32        except Exception as e:
33            raise Exception(f"No se pudo obtener el valor de {ticker}\n {e}") from e

Obtiene el valor de un método específico y lo formatea según sea necesario.

Args: ticker (str): El símbolo del ticker de la acción. method (method): El método para obtener el valor. format (bool): Indica si el valor debe ser formateado. percentage (bool): Indica si el valor es un porcentaje.

Returns: obj: El valor obtenido.

def arrDcf( self, tickerStr, g, rf, rm, hasEbitda, hasEarnings, hasRoe, hasPer, growth):
35    def arrDcf(self, tickerStr, g, rf, rm, hasEbitda, hasEarnings, hasRoe, hasPer, growth):
36        """
37        Calcula los valores DCF para una lista de tickers.
38
39        Args:
40            tickerStr (list): Lista de símbolos de ticker de las acciones.
41            g (float): Tasa de crecimiento a perpetuidad.
42            rf (float): Tasa libre de riesgo.
43            rm (float): Retorno del mercado.
44            hasEbitda (bool): Indica si se requiere el cálculo de EBITDA.
45            hasEarnings (bool): Indica si se requiere el cálculo de las ganancias.
46            hasRoe (bool): Indica si se requiere el cálculo de ROE.
47            hasPer (bool): Indica si se requiere el cálculo de PER.
48
49        Returns:
50            list: Una lista que contiene los valores DCF calculados para cada ticker.
51        """
52        finalResult = []
53
54        for ticker in filter(None, tickerStr):
55            dcfCalculator = DcfCalculator(yf.Ticker(ticker))
56
57            values = [
58                (hasEbitda, dcfCalculator.getEbitda, False, False),
59                (hasEarnings, dcfCalculator.getEarnings, True, True),
60                (hasRoe, dcfCalculator.getRoe, True, True),
61                (hasPer, dcfCalculator.getPer, True, False),
62            ]
63
64            finalsOptions = []
65            for has_value, method, format, percentage in values:
66                if has_value:
67                    try:
68                        value = self.getValue(ticker, method, format, percentage)
69                        if value is not None:
70                            finalsOptions.append(value)
71                    except Exception as e:
72                        print(e)
73                        finalsOptions = ["Error"]
74                        break
75
76            resultDCF = dcfCalculator.dcf(ticker, g, rf, rm, growth)
77            if isinstance(resultDCF, str):
78                finalResult.append([ticker.upper(), "Error"])
79            else:
80                arrayWithUSD = [
81                    ("$ " + "{:,.0f}".format(value).replace(",", "."))
82                    for value in resultDCF[2]
83                ]
84                finalResult.append(
85                    [ticker.upper(), resultDCF[0], resultDCF[1]]
86                    + arrayWithUSD
87                    + resultDCF[3:]
88                    + finalsOptions
89                )
90
91        return finalResult

Calcula los valores DCF para una lista de tickers.

Args: tickerStr (list): Lista de símbolos de ticker de las acciones. g (float): Tasa de crecimiento a perpetuidad. rf (float): Tasa libre de riesgo. rm (float): Retorno del mercado. hasEbitda (bool): Indica si se requiere el cálculo de EBITDA. hasEarnings (bool): Indica si se requiere el cálculo de las ganancias. hasRoe (bool): Indica si se requiere el cálculo de ROE. hasPer (bool): Indica si se requiere el cálculo de PER.

Returns: list: Una lista que contiene los valores DCF calculados para cada ticker.