Python Cuantitativo
Python Cuantitativo se refiere al proceso de utilizar el lenguaje de programación Python, junto con bibliotecas y herramientas relacionadas, para realizar análisis de datos del mercado financiero, desarrollo de estrategias y ejecución de operaciones.
Python, debido a su simplicidad, facilidad de aprendizaje, poderoso ecosistema y ricas bibliotecas financieras, se ha convertido en uno de los lenguajes de programación preferidos para el comercio cuantitativo.
El comercio cuantitativo se utiliza ampliamente en el ámbito financiero; permite a los operadores formular y ejecutar estrategias de trading mediante métodos sistemáticos, mejorando la eficiencia de las operaciones y la cientificidad de las decisiones.
La cuantificación consiste principalmente en utilizar métodos matemáticos y estadísticos, junto con tecnología informática, para realizar análisis cuantitativos del mercado financiero, y así formular y ejecutar estrategias de trading.
Puedes ver más contenido sobre Python cuantitativo en:Trading cuantitativo con Python。
Ejemplos de aplicación
A continuación, veamos un ejemplo simple de aplicación de Python cuantitativo; podemos usar la estrategia de media móvil y los datos financieros de Yahoo para implementarlo.
La idea básica de esta estrategia es generar señales de compra y venta comparando medias móviles a corto y largo plazo.
Antes de realizar este ejemplo simple, es necesario instalar tres paquetes:
pip install pandas yfinance matplotlib
Descripción de paquetes:
- Pandas es una biblioteca de código abierto poderosa para el procesamiento y análisis de datos, diseñada específicamente para realizar análisis y operaciones de datos de manera eficiente.
- yfinance es una biblioteca para obtener datos financieros, que admite la obtención de acciones, índices y otros datos del mercado financiero desde Yahoo Finance.
- Matplotlib es una biblioteca de trazado 2D utilizada para crear gráficos de visualización de datos estáticos, animados e interactivos.
Obtener datos históricos de acciones
Usando 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
Usa 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())
# Trazar 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:

Backtesting de estrategia de cruce de medias móviles
El backtesting es el proceso de simular y evaluar una estrategia de trading en datos históricos del mercado.
El siguiente es un código de ejemplo de backtesting de una estrategia simple de cruce de medias móviles. La estrategia compra cuando la media móvil de 50 días cruza por encima de la media móvil de 200 días, y vende cuando cruza por debajo. El rendimiento de la estrategia muestra métricas como rendimiento total, rendimiento anualizado y drawdown máximo.
Ejemplo
import pandas as pd
import matplotlib.pyplot as plt
# Obtener datos de acciones
symbol = "600519.SS"
start_date = "2021-01-01"
end_date = "2023-01-01"
data = yf.download(symbol, start=start_date, end=end_date)
# Calcular media móvil
data['SMA_50'] = data['Close'].rolling(window=50).mean()
data['SMA_200'] = data['Close'].rolling(window=200).mean()
# Inicializar columna de señales de cruce
data['Signal'] = 0
# Calcular señales de cruce
data.loc[data['SMA_50'] > data['SMA_200'], 'Signal'] = 1
data.loc[data['SMA_50'] < data['SMA_200'], 'Signal'] = -1
# Calcular rendimiento diario
data['Daily_Return'] = data['Close'].pct_change()
# Calcular el rendimiento de la señal de la estrategia (shift(1) es para evitar el sesgo de datos futuros)
data['Strategy_Return'] = data['Signal'].shift(1) * data['Daily_Return']
# Calcular rendimiento acumulado
data['Cumulative_Return'] = (1 + data['Strategy_Return']).cumprod()
# Mostrar rendimiento de la estrategia
strategy_performance = {
'Total Return': data['Cumulative_Return'].iloc[-1] - 1,
'Annualized Return': (data['Cumulative_Return'].iloc[-1] ** (252 / len(data))) - 1,
'Max Drawdown': (data['Cumulative_Return'] / data['Cumulative_Return'].cummax() - 1).min(),
}
print("Rendimiento de la estrategia:")
for key, value in strategy_performance.items():
print(f"{key}: {value:.4f}")
# Trazar 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()
El gráfico se muestra a continuación:

Ten en cuenta que esto es solo un ejemplo simple; en aplicaciones reales se necesitan estrategias más complejas y más factores a considerar.
Otras extensiones