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
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
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.
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.