Python: Obtener datos financieros
En este capítulo, primero veremos un ejemplo simple de aplicación de cuantificación en Python: podemos utilizar la estrategia de media móvil y usar datos financieros de Yahoo para implementarlo.
La idea básica de esta estrategia es generar señales de compra y venta comparando las medias móviles de corto y largo plazo.
Antes de realizar este ejemplo simple, es necesario instalar tres paquetes:
pip install pandas numpy matplotlib yfinance
Descripción de los paquetes:
- pandasEs una biblioteca de código abierto potente para procesamiento y análisis de datos, diseñada específicamente para realizar análisis y manipulación de datos de manera eficiente.
- numpyProporciona soporte para arreglos y matrices, utilizado para cálculos matemáticos.
- yfinanceEs una biblioteca para obtener datos financieros, compatible con la obtención de acciones, índices y otros datos de mercados financieros desde Yahoo Finance.
- matplotlibEs una biblioteca de trazado 2D, utilizada para crear gráficos de visualización de datos estáticos, dinámicos e interactivos.
Obtener datos históricos de acciones
Use yfinance para obtener datos históricos de acciones; a continuación se muestra un ejemplo simple:
Ejemplo
# Obtener datos de acciones
symbol = "600519.SS"
start_date = "2022-01-01"
end_date = "2023-01-01"
data = yf.download(symbol, start=start_date, end=end_date)
print(data.head())
El resultado de salida es el siguiente:
Open High Low Close Adj Close Volume
Date
2022-01-04 2055.00000 2068.949951 2014.000000 2051.229980 1973.508057 3384262
2022-01-05 2045.00000 2065.000000 2018.000000 2024.000000 1947.309937 2839551
2022-01-06 2022.01001 2036.000000 1938.510010 1982.219971 1907.112915 5179475
2022-01-07 1975.00000 1988.880005 1939.319946 1942.000000 1868.416870 2981669
2022-01-10 1928.01001 1977.000000 1917.550049 1966.000000 1891.507446 2962670
Análisis de datos simple y visualización
Use pandas para el análisis de datos y matplotlib para la visualización:
Ejemplo
import pandas as pd
import matplotlib.pyplot as plt
# Obtener datos de acciones
symbol = "600519.SS"
start_date = "2022-01-01"
end_date = "2023-01-01"
data = yf.download(symbol, start=start_date, end=end_date)
# Análisis de datos simple
print(data.describe())
# Graficar el gráfico de tendencia del precio de las acciones
data['Close'].plot(figsize=(10, 6), label=symbol)
plt.title(f"{symbol} Stock Price")
plt.xlabel("Date")
plt.ylabel("Price")
plt.legend()
plt.show()
El gráfico de tendencia se muestra a continuación:

Estrategia de cruce de medias móviles
Luego, podemos usar la biblioteca financiera de Yahoo (yfinance) para obtener los datos de acciones de Kweichow Moutai (600519.SS) y realizar una demostración simple basada en la estrategia de media móvil:
Ejemplo
import yfinance as yf
import matplotlib.pyplot as plt
# Obtener datos de acciones de Kweichow Moutai
symbol = "600519.SS"
start_date = "2022-05-01"
end_date = "2023-12-01"
data = yf.download(symbol, start=start_date, end=end_date)
# Calcular la media móvil de corto plazo (50 días) y largo plazo (200 días)
data['MA_50'] = data['Close'].rolling(window=50).mean()
data['MA_200'] = data['Close'].rolling(window=200).mean()
# Generar señales de compra y venta
data['Signal'] = 0
data['Signal'][data['MA_50'] > data['MA_200']] = 1 # La media móvil de corto plazo cruza por encima de la de largo plazo, generando una señal de compra
data['Signal'][data['MA_50'] < data['MA_200']] = -1 # La media móvil de corto plazo cruza por debajo de la de largo plazo, generando una señal de venta
# Graficar el precio de las acciones y las medias móviles
plt.figure(figsize=(10, 6))
plt.plot(data['Close'], label='Close Price')
plt.plot(data['MA_50'], label='50-day Moving Average')
plt.plot(data['MA_200'], label='200-day Moving Average')
# Marcar señales de compra y venta
plt.scatter(data[data['Signal'] == 1].index, data[data['Signal'] == 1]['MA_50'], marker='^', color='g', label='Buy Signal')
plt.scatter(data[data['Signal'] == -1].index, data[data['Signal'] == -1]['MA_50'], marker='v', color='r', label='Sell Signal')
plt.title("Maotai Stock Price with Moving Averages")
plt.xlabel("Date")
plt.ylabel("Price (CNY)")
plt.legend()
plt.show()
El código del ejemplo anterior utiliza los datos de las acciones de Kweichow Moutai (600519.SS), calcula las medias móviles de 50 y 200 días, y genera señales de compra y venta al comparar la relación entre ambas.
Finalmente, se utiliza Matplotlib para graficar la tendencia del precio de las acciones y se marcan las señales de compra y venta.
Recuerde investigar y probar cuidadosamente la estrategia en la negociación real; no realice inversiones reales directamente basándose en lo anterior.
Al ejecutar el código anterior, el gráfico de salida es el siguiente: la parte verde son señales de compra, la parte roja son señales de venta. Haga clic en la imagen para ampliarla:
Estrategia de backtesting
He utilizado el signo positivo o negativo del rendimiento diario de las acciones para generar señales de trading, con el fin de demostrar un ejemplo simple; puedes modificar esta condición según tu propia estrategia.
Ejemplo
import pandas as pd
import matplotlib.pyplot as plt
# Obtener datos de acciones
symbol = "600519.SS"
start_date = "2023-01-01"
end_date = "2023-12-01"
data = yf.download(symbol, start=start_date, end=end_date)
# Inicializar la columna de señales de cruce
data['Signal'] = 0
# Calcular el rendimiento diario
data['Daily_Return'] = data['Close'].pct_change()
# Calcular la señal de la estrategia
data['Signal'] = 0
data.loc[data['Daily_Return'] > 0, 'Signal'] = 1 # Usar el cambio porcentual como señal; la condición se puede modificar según sea necesario
# Calcular el rendimiento de la estrategia
data['Strategy_Return'] = data['Signal'].shift(1) * data['Daily_Return']
# Calcular el rendimiento acumulado
data['Cumulative_Return'] = (1 + data['Strategy_Return']).cumprod()
# Graficar la curva de rendimiento acumulado
plt.figure(figsize=(10, 6))
plt.plot(data['Cumulative_Return'], label='Strategy Cumulative Return', color='b')
plt.plot(data['Close'] / data['Close'].iloc[0], label='Stock Cumulative Return', color='g')
plt.title("Cumulative Return of Strategy vs. Stock")
plt.xlabel("Date")
plt.ylabel("Cumulative Return")
plt.legend()
plt.show()
Al ejecutar el código anterior, el gráfico de salida es el siguiente:

Estrategias básicas de trading cuantitativo
El trading cuantitativo se basa en modelos matemáticos, estadística y algoritmos informáticos, identificando y ejecutando oportunidades de trading mediante métodos sistemáticos.
A continuación se presentan algunas estrategias básicas comunes de trading cuantitativo:
El trading cuantitativo se basa en modelos matemáticos, estadística y algoritmos informáticos, identificando y ejecutando oportunidades de trading mediante métodos sistemáticos.
A continuación se presentan algunas estrategias básicas comunes de trading cuantitativo:
1. Estrategia de media móvil
Idea de la estrategia:Basada en el promedio histórico del precio de las acciones, genera señales de compra y venta calculando la diferencia entre las medias móviles de corto y largo plazo.
Forma de implementación:Calcular las medias móviles de corto y largo plazo; cuando la media móvil de corto plazo cruza por encima de la de largo plazo, se genera una señal de compra; en caso contrario, se genera una señal de venta.
2. Estrategia de reversión a la media
Idea de la estrategia:Basada en la volatilidad histórica del precio, considera que el precio volverá a su nivel promedio después de las fluctuaciones.
Forma de implementación:Calculando la diferencia entre el precio y la media, se genera una señal de compra o venta cuando el precio se desvía demasiado de la media.
3. Estrategia de momentum
Idea de la estrategia:Basada en la tendencia del precio, considera que la tendencia del precio se prolongará durante un tiempo.
Forma de implementación:Calculando la tasa de cambio del precio u otros indicadores de tendencia, se generan señales de compra o venta.
4. Estrategia neutral al mercado
Idea de la estrategia:Mediante la compra y venta simultáneas, se aprovecha la fortaleza o debilidad relativa del mercado.
Forma de implementación:Basándose en el diferencial o la correlación entre dos o más activos relacionados, se generan señales de trading.
5. Estrategia de arbitraje estadístico
Idea de la estrategia:Basada en principios estadísticos, busca desequilibrios temporales entre precios para lograr arbitraje.
Forma de implementación:Mediante la búsqueda de valores atípicos en precios, volatilidad u otros indicadores estadísticos, se generan señales de trading.
6. Estrategia basada en eventos
Idea de la estrategia:Basada en la ocurrencia de eventos o información específicos, genera señales de trading.
Forma de implementación:Monitorear noticias, informes financieros, indicadores económicos, etc., y ejecutar operaciones cuando ocurran eventos específicos.
7. Estrategia de machine learning
Idea de la estrategia:Utiliza algoritmos de machine learning para aprender patrones de grandes volúmenes de datos y predecir la tendencia futura de los precios.
Forma de implementación:Utiliza modelos de regresión, clasificación o aprendizaje profundo para entrenar modelos que predigan la tendencia del mercado.
8. Estrategia de trading de alta frecuencia
Idea de la estrategia:Aprovecha los pequeños diferenciales de precios en períodos muy cortos mediante la ejecución rápida de un gran número de operaciones.
Forma de implementación:Utiliza algoritmos de alto rendimiento y sistemas de ejecución rápida, generalmente involucra un gran volumen de operaciones y un tiempo de tenencia bajo.
Estas estrategias son solo una pequeña parte del campo del trading cuantitativo. En realidad, las estrategias de trading cuantitativo adoptan formas muy diversas y pueden ajustarse según el mercado, la clase de activo y las preferencias del operador. Lo importante es que el diseño de la estrategia cuantitativa requiere un backtesting suficiente y la consideración de la gestión de riesgos para garantizar su efectividad en diferentes entornos de mercado.
Otras extensiones