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

import yfinance as yf

# 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 yfinance as yf
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 pandas as pd
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 yfinance as yf
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