
El análisis fundamental es uno de los principales enfoques usados para la predicción del precio de las acciones. Aunque muchos traders usan el análisis fundamental, el hecho es que son los fundamentos los que determinan la dirección del mercado, sobre todo a largo plazo. En este artículo explicamos como obtener datos de indicadores fundamentales de compañías mediante Python por medio de un código sencillo que vamos a explicar en detalle.
Actualmente podemos obtener datos fundamentales de una acción en Python utilizando, por ejemplo, la biblioteca yfinance que puede obtener datos de precios, volumen e indicadores de Yahoo Finance. Esta biblioteca permite acceder a una variedad de información financiera de forma sencilla, incluyendo datos fundamentales.
A continuación, mostramos el código que vamos a usar como ejemplo. Además del código, vamos a explicar en qué consiste y qué hace cada parte para que el lector comprenda realmente lo que hace y pueda adaptarlo a sus propios programas.
Código para la obtención de datos fundamentales mediante Python
import yfinance as yf
# Crear un objeto Ticker para la acción deseada (por ejemplo, Apple)
ticker = yf.Ticker("AAPL")
# Acceder a los datos fundamentales a través del atributo 'info'
datos_fundamentales = ticker.info
# Imprimir algunos datos fundamentales
print("Nombre:", datos_fundamentales.get("longName"))
print("Sector:", datos_fundamentales.get("sector"))
print("Capitalización de mercado:", datos_fundamentales.get("marketCap"))
print("P/E Ratio:", datos_fundamentales.get("trailingPE"))
print("Dividend Yield:", datos_fundamentales.get("dividendYield"))
Este código crea un objeto Ticker para la acción de Apple, posteriormente extrae la información fundamental en forma de diccionario mediante la biblioteca yfinance y luego imprime algunos valores clave, como la capitalización de mercado.
Es importante recordar que los datos disponibles pueden variar según la acción y la fuente. Además, si se necesitan datos más especializados o históricos de informes financieros, podemos considerar el uso de otras APIs o servicios como Alpha Vantage, Financial Modeling Prep o IEX Cloud. Cada uno tiene sus propias características y límites de uso.
¿Qué otros datos financieros podemos obtener a partir de yfinance?
Además del diccionario info que mostramos anteriormente y que proporciona información general, yfinance ofrece la posibilidad de acceder a una variedad de datos fundamentales y financieros de una compañía (en tanto esta aparezca en Yahoo Finance). Algunos ejemplos incluyen:
- Datos del perfil de la empresa:
- Nombre completo y nombre corto
- Sector e industria
- Descripción de la empresa
- Página web oficial, país y estado
- Estadísticas de valoración y ratios:
- Capitalización de mercado
- P/E ratio (relación precio-beneficio)
- Precio/valor contable (price-to-book)
- Dividend yield (rendimiento por dividendo)
- Beta (volatilidad relativa)
- Ratio EV/Revenue y EV/EBITDA (valor de la empresa vs ingresos y EBITDA)
- Datos financieros históricos:
- Dividendos y splits a lo largo del tiempo (con ticker.dividends y ticker.splits)
- Estados financieros:
- Balance general (ticker.balance_sheet)
- Estado de resultados (ticker.financials)
- Flujo de caja (ticker.cashflow)
- Información de ganancias:
- Historial de ganancias trimestrales y anuales (ticker.earnings y ticker.quarterly_earnings)
- Crecimiento de ganancias, estimaciones de analistas, etc.
Por medio de estos datos podemos realizar análisis más profundos sobre la salud financiera y el desempeño de la compañía de nuestro interés. Por ejemplo, podemos comparar ratios financieros entre diferentes compañías (para detectar divergencias dentro de un mismo sector) o analizar tendencias en los estados financieros a lo largo del tiempo. También podemos comparar los valores actuales con valores promedio para encontrar desviaciones que representen oportunidades.
El siguiente es un ejemplo que muestra cómo acceder a algunos de estos datos:
import yfinance as yf
# Crear un objeto Ticker para la acción deseada (por ejemplo, Apple)
ticker = yf.Ticker("AAPL")
# Datos generales y fundamentales
info = ticker.info
print("Nombre:", info.get("longName"))
print("Sector:", info.get("sector"))
print("Industria:", info.get("industry"))
print("Capitalización de mercado:", info.get("marketCap"))
print("P/E Ratio:", info.get("trailingPE"))
print("Dividend Yield:", info.get("dividendYield"))
# Dividendos históricos
dividendos = ticker.dividends
print("\nHistorial de dividendos:")
print(dividendos)
# Splits históricos
splits = ticker.splits
print("\nHistorial de splits:")
print(splits)
# Estados financieros
balance = ticker.balance_sheet
print("\nBalance general:")
print(balance)
estado_resultados = ticker.financials
print("\nEstado de resultados:")
print(estado_resultados)
flujo_caja = ticker.cashflow
print("\nFlujo de caja:")
print(flujo_caja)
Con este código podemos obtener una buena cantidad de datos que podemos usar para tener un panorama general de los fundamentos de una compañía, lo que a su vez nos puede ayudar a tomar decisiones sobre la compra o venta de sus acciones. El código además puede usarse para obtener los datos financieros y fundamentales y hacer comparaciones directas dentro de un sector o entre acciones de sectores diversos.
En comparación con otros códigos de Python que hemos mostrado en este sitio, el programa anterior es bastante simple. En realidad, yfinance se encarga de casi todo el trabajo de scrapping de datos y lo único que tenemos que hacer es indicar qué datos queremos mostrar.
¿Cómo podemos usar estos datos fundamentales aprovechando Python?
Los datos fundamentales obtenidos mediante un programa como el anterior podrían usarse de la siguiente forma:
Análisis Comparativo:
Por medio de bibliotecas como Pandas, es posible comparar indicadores financieros (P/E, P/B, Dividend Yield, etc.) entre empresas de un mismo sector económico con el fin de identificar oportunidades de inversión o evaluar la solidez financiera.
Modelos de Valoración:
Mediante el uso de datos de estados financieros (balance, flujo de caja, estado de resultados), podemos implementar modelos como el descuento de flujos de caja (DCF) o hacer comparaciones de mercado para estimar el valor intrínseco de una acción.
Filtrado y Screener de Acciones:
Utilizando los datos fundamentales, también podemos diseñar “screeners” que filtren acciones de acuerdo a criterios predefinidos, como empresas con bajo P/E, alto crecimiento de ingresos o dividendos consistentes.
Análisis de Tendencias Históricas:
Con base en análisis de series temporales de estados financieros o de crecimiento de ingresos y ganancias, podemos detectar tendencias y ciclos económicos que ayuden a la predicción de futuros desempeños.
Visualización y Reportes:
Con el uso de bibliotecas como Matplotlib o Seaborn, el programador puede crear gráficos que muestran la evolución de indicadores clave a lo largo del tiempo, facilitando la comunicación de resultados a otros analistas o inversores. Para las personas que tienen una mayor capacidad de análisis visual, estas herramientas pueden ser de utilidad.
Integración con el análisis de Machine Learning:
Los datos de los indicadores fundamentales y financieros pueden formar parte importante en modelos predictivos de precios o de riesgo de la inversión. Utilizando bibliotecas como scikit-learn o TensorFlow, podemos desarrollar modelos que combinen datos cuantitativos y fundamentales para tomar decisiones de inversión más informadas.
Ejemplo
Por ejemplo, podemos combinar datos financieros y fundamentales de una acción con datos de precio e indicadores técnicos y usarlos para analizar el comportamiento del precio mediante redes neuronales. scikit-learn o TensorFlow son excelentes bibliotecas que permiten usar redes neuronales sin tener que programar una desde cero.
Los siguientes son puntos clave que debemos considerar para esto:
- Integración de múltiples fuentes de datos: Como ya mostramos, podemos extraer datos fundamentales (como ratios financieros, balances, dividendos) y datos de precios (históricos, volúmenes, etc.) usando bibliotecas de Python como yfinance. Así mismo, podemos calcular indicadores técnicos (como medias móviles, RSI, MACD) utilizando librerías como TA-Lib o Pandas o incluso calcularlos manualmente.
- Preprocesamiento y alineación temporal de los datos: Es fundamental alinear los datos en función de los marcos de tiempo. Por ejemplo, los datos fundamentales pueden tener actualizaciones trimestrales o anuales, mientras que los precios e indicadores técnicos son diarios o intradiarios. Por eso, es importante alinearlos. Una opción es interpolar o asignar el mismo valor fundamental a cada día correspondiente hasta el siguiente reporte.
- Normalización y escalado de los datos: Debido a la diversidad en las escalas y distribuciones de los distintos tipos de datos, se recomienda utilizar técnicas de normalización o estandarización para que la red neuronal aprenda de la forma más eficiente.
- Diseño de la red neuronal: El diseño de la red neuronal desde cero puede ser complejo y requiere de conocimientos de programación más avanzados. Por eso, podemos utilizar frameworks como TensorFlow o PyTorch para crear la arquitectura de la red neuronal de forma más simple. Una estrategia es emplear capas densas (fully connected layers) o incluso arquitecturas más especializadas (como redes recurrentes o modelos híbridos) que tengan la capacidad de capturar la dinámica temporal y la complejidad de la información. Todas estas arquitecturas están incluidas en estos paquetes y no es necesario programarlos desde cero.
- Fusión de características (feature fusion): Aquí la idea es combinar la información proveniente de diferentes fuentes en una misma representación de datos. Para esto podemos concatenar vectores de características o podemos diseñar submodelos que procesen cada tipo de dato de forma independiente antes de unirlos en una capa común.
- Validación y ajuste del modelo: Debido a que los mercados financieros pueden ser muy volátiles e impredecibles, es importante dividir los datos obtenidos en conjuntos de entrenamiento, validación y prueba, y realizar ajustes de hiperparámetros para evitar el sobreajuste y asegurar la generalización del modelo.
Por lo tanto, la integración de datos fundamentales, precios e indicadores técnicos en una red neuronal puede brindarnos una estrategia poderosa para desarrollar modelos financieros más robustos y completos. Aquí, la clave está en el preprocesamiento y la correcta alineación de la información para que el modelo pueda aprender las relaciones subyacentes entre estos diferentes tipos de datos.
Conclusión
Obtener datos financieros y fundamentales de acciones mediante Python es relativamente simple si usamos bibliotecas como yfinance. Sin embargo, los datos por sí solos no sirven de mucho si no sabemos cómo usarlos. Podemos usar estos datos en bruto para analizar las perspectivas de una acción o podemos usarlo en aplicaciones más complejas como las descritas anteriormente que pueden ayudarnos a tener una ventana en el mercado. Ya sea que queramos crear un screener que filtre acciones de acuerdo a criterios específicos o crear una red neuronal que analice el mercado y busque patrones con base en en datos de precios, indicadores técnicos o datos financieros, las posibilidades que ofrece Python son múltiples.
Pueden acceder a otros códigos interesantes de Python aplicados en el trading en la siguiente sección: Scripts de trading de Python















