¿Se puede realizar análisis Fundamental con Python?
Utilizando Yahoo Finance para descargar fundamentales
En esta publicación mostraremos el abanico de posibilidades que permite Python en relación al mundo financiero y la bolsa, os he preparado un pequeño ejemplo de extracción de datos y visualización de los mismos.
En este caso vamos a adaptar una función que permite la descarga de estados financieros (de Yahoo Finance) y los modelizaremos hasta hacerlos operativos con muy pocas líneas de código.
Vamos a utilizar la librería yahoofinancials, de Connor Sanders, que hace “webscraping” sobre la web:
https://finance.yahoo.com
Haremos uso de la función get_financial_stmts(), aunque la vamos a adaptar para tener los datos ordenados de una forma muy concreta para poder trabajar.
Esta estructura nos permite buscar, por frecuencia anual o trimestral, todos los datos disponibles de ingresos, balance y flujo de efectivo que tenga la compañía. Estos datos son devueltos en formato JSON.
Al analizar la extracción, observamos que hay varios niveles de claves. El primero consiste en la clasificación de ingresos, balance o flujo de efectivo, luego el ticker de la compañía, y por último las fechas anuales o trimestrales disponibles, con todas sus correspondientes partidas y valores.
Sin embargo, este formato no es amigable para modelizar o graficar nada, así que os propongo definir una función que permita tener todos los datos bien ordenados, y no con la estructura que nos ofrece la librería por defecto:
La función que definimos en “financial_statements()” tiene dos parámetros: tickers, para poder escoger las compañías sobre las que queramos realizar la extracción, y freq, que nos permite seleccionar si queremos las partidas anuales o trimestrales en función de si escribimos “annual” o “quarterly”.
Lo que hacemos es obtener los JSON a través de la llamada a la clase Yahoofinancials y a la función get_financial_statements() para cada empresa en la lista de tickers, obtiene los informes financieros de ingresos, efectivo y balances de Yahoo Finance.
Luego, organiza estos informes financieros en DataFrames (estructuras de datos tipo tabla) separados por sección (ingresos, efectivo, balances).
Finalmente, combina todos estos DataFrames en una estructura de datos más grande llamada fundamentals, donde cada empresa tiene sus propias secciones.
A continuación hacemos una llamada a la función con los argumentos que queremos, por ejemplo:
Obtenemos un DataFrame multi-nivel con todos los estados financieros con el histórico disponible en Yahoo Finance.
Ahora ya sólo nos queda jugar con los filtros para seleccionar qué información queremos, teniendo en cuenta que podemos filtrar por tipo de estado financiero, partida o compañía.
En este caso vamos a quedarnos con las partidas de FCF de cada empresa.
Teniendo los valores para cada fecha, podemos graficarlo muy fácilmente con el método plot() de pandas. Eso sí, no todas las compañías publican los mismos días, hay que agrupar por años o trimestres en función de lo que queramos y cómo lo queramos mostrar.
Espero que os haya resultado interesante. No olvidéis que los datos de Yahoo Finance son gratuitos y pueden no reflejar correctamente la realidad, siempre es mejor tener un proveedor de confianza. Aun así, me parece que metodológicamente se puede comprobar la facilidad con la que Python nos puede ayudar a realizar cualquier tipo de análisis o modelización, por compleja que sea.
Os adjunto un Notebook aquí para probarlo vosotros mismos: https://colab.research.google.com/drive/1i4I6PvKUNPgn5q5dGkIVHcPjjoddz7_h?hl=es#scrollTo=qHXRTrPK3ETM
Si os ha gustado y queréis una segunda parte en la que sigamos con el ejemplo, os propongo ponderar los estados en factores y realizar un ranking, por ejemplo.
Si quieres seguir aprendiendo, te dejo mis datos de mi web, youtube, discord y twitter. Sigueme!
Usuario del substack: @Gsnchez. Co-fundador de BQuant. www.bquantfinance.com
Youtube: http://youtube.com/@Gsnchez
Discord: https://discord.gg/PE43PFeJyy
Twitter: @Gsnchez