Finanzas Cuantitativas con Python
Ingesta de Datos Financieros
Automatiza tu Recolección de Datos
Tu lógica de inversión es sólida, pero el trabajo manual de descargar datos de mercado es un cuello de botella. En lugar de hacer clic y exportar archivos CSV, vamos a automatizar el proceso. Utilizaremos una librería de Python llamada yfinance para conectarnos directamente a las fuentes de datos y obtener información histórica de precios con solo unas pocas líneas de código.
El primer paso es instalar la librería. Si tienes Python y su gestor de paquetes, pip, configurado en tu sistema, la instalación es una sola línea en tu terminal o consola de comandos.
# Instala la librería yfinance usando pip
pip install yfinance
Una vez instalada, ya puedes empezar a importar datos. Empecemos por lo más sencillo: obtener los datos históricos de un solo activo. Para ello, necesitas el del activo, que es el símbolo único que lo identifica en el mercado. Por ejemplo, el ticker de Apple es "AAPL" y el del S&P 500 ETF es "SPY".
Descargando Datos Históricos
Con yfinance importado en tu script de Python, puedes crear un objeto Ticker para un activo específico. Este objeto será tu puerta de entrada para acceder a toda la información disponible sobre ese activo. El método más importante para nosotros es history(), que nos permite descargar series temporales de precios.
import yfinance as yf
import pandas as pd
# Crea un objeto Ticker para Apple
aapl = yf.Ticker("AAPL")
# Descarga el historial de precios para el último año
datos_aapl = aapl.history(period="1y")
# Muestra los últimos 5 registros del DataFrame
print(datos_aapl.tail())
El resultado es un que contiene los datos de apertura, máximo, mínimo y cierre (OHLC), además del volumen de negociación. Pandas es el estándar de facto en el ecosistema de Python para la manipulación de datos estructurados, y dominarlo es clave para cualquier análisis cuantitativo. La estructura de DataFrame es ideal para aplicar modelos y realizar visualizaciones.
Puedes personalizar fácilmente el rango de fechas y la periodicidad de los datos. Por ejemplo, si necesitas datos intradiarios de la última semana, puedes especificarlo en los parámetros.
# Descarga datos intradiarios de la última semana (intervalo de 1 hora)
datos_intradiarios = yf.Ticker("MSFT").history(period="1wk", interval="1h")
# Observa la estructura
print(datos_intradiarios.head())
Múltiples Activos y Metadatos
Rara vez analizarás un solo activo. La verdadera potencia de este enfoque se revela cuando descargas datos para un portafolio completo. La función yf.download() está optimizada para esta tarea, obteniendo datos de múltiples tickers de forma concurrente.
# Define una lista de tickers para tu portafolio
tickers_portafolio = ["GOOGL", "META", "AMZN", "NVDA"]
# Descarga los precios de cierre del último año para todos los tickers
datos_portafolio = yf.download(tickers_portafolio, period="1y")['Close']
print(datos_portafolio.head())
El DataFrame resultante tendrá las fechas como índice y una columna para el precio de cierre de cada ticker. Esto prepara tus datos para analizar correlaciones, construir portafolios optimizados o ejecutar estrategias de trading de pares.
La gestión de errores es fundamental. Si un ticker no existe o los datos para un período no están disponibles,
yfinancepodría generar un error. Es buena práctica envolver tus descargas en bloquestry...exceptpara manejar estas situaciones sin que tu script se detenga.
Además de los datos OHLCV, puedes obtener metadatos útiles sobre los activos, como el sector, la industria o información sobre dividendos y desdoblamientos de acciones (splits). Esto enriquece tu análisis y permite filtrar o agrupar activos según sus características fundamentales.
# Obtiene el objeto Ticker para Nvidia
nvda = yf.Ticker("NVDA")
# Accede a la información general (metadatos)
info_nvda = nvda.info
# Imprime el sector y la industria
print(f"Sector: {info_nvda['sector']}")
print(f"Industria: {info_nvda['industry']}")
# Muestra el historial de dividendos
print("\nDividendos:")
print(nvda.dividends)
Ahora que tienes las herramientas para automatizar la ingesta de datos, el siguiente paso es comenzar a analizarlos. Has transformado un proceso manual y propenso a errores en una base de código robusta y escalable, lista para alimentar cualquier estrategia que diseñes.
¿Cuál es el comando de terminal para instalar la librería yfinance si tienes Python y pip configurados?
Una vez que creas un objeto Ticker para un activo específico (por ejemplo, aapl = yf.Ticker("AAPL")), ¿qué método usas para descargar su serie temporal de precios históricos?