Hace ya unas cuantas kedadas, concretamente en la primera de Reus, tuve la suerte de conocer a Isaac Trullàs, gestor del Darwin TWCS, aunque seguramente muchos le conozcáis en las redes sociales como Trading en Pelotas. A primera vista, nadie diría que es un trader cuantitativo, pero a poco que hablas con él te das cuenta de que, además de ser una persona encantadora y tener un excelente sentido del humor, sabe latín.
Prueba de ello es que Isaac acaba de lanzar su primer libro, Trading Algorítmico con Python: Desarrolla tus habilidades en el Trading Algorítmico, el cual puede considerarse una guía para aquellos que sientan una curiosidad profunda por el mundo del trading algorítmico y buscan una manera de acercarse a él de forma práctica y directa, con la ventaja de que además está escrito en castellano.
A lo largo de este libro encontraréis una combinación de teoría y ejemplos prácticos, siempre con un enfoque progresivo. De este modo, cada concepto te lleva al siguiente paso, como una hoja de ruta clara. Desde la introducción hasta los capítulos finales, donde se construye un bot de trading que se conecta a MetaTrader 5, pasando por la optimización y prueba de nuestras estrategias, el objetivo es proporcionar un enfoque realista y cercano al trading algorítmico.
Si bien es recomendable que, para seguir los contenidos del libro, el lector posea ya algunas nociones de Python, tampoco se requiere un conocimiento en profundidad de este lenguaje. De hecho, en los primeros capítulos, se realiza un repaso de los conceptos básicos, avanzando progresivamente hasta llegar a programar herramientas complejas, como un detector de patrones anómalos en los precios o un sistema para ajustar el tamaño de las operaciones según el Drawdown. Además, todo el código utilizado está disponible en un repositorio de GitHub, listo para que el lector pueda practicar y experimentar.
En palabras del propio Isaac:
“Quiero que sepas que este libro es mucho más que un manual técnico. Se trata de un viaje personal, una conversación sincera sobre los desafíos y las realidades del trading algorítmico. Este campo está lleno de promesas de “bots milagrosos” que supuestamente pueden generar beneficios de manera pasiva, pero la verdad es que la clave está en el trabajo, la paciencia y una mejora constante. No busco darte un camino rápido hacia la riqueza, sino enseñarte a pescar: ofrecerte las bases y herramientas para que, al final, puedas aprender a investigar y construir tus propias estrategias de trading de manera independiente y consciente.”
En definitiva, un libro muy completo por cuanto todo lo que necesitas para crear tus propios algoritmos está en él.
No obstante, para que os podáis hacer una idea de cómo es el libro, Isaac ha tenido la cortesía de cedernos un extracto del capítulo 6 de su libro para que podáis haceros una idea de qué va, os lo dejo aquí debajo. También podéis descargar el índice en PDF haciendo click aquí.
Saludos,
X-Trader
Conceptos Básicos del Backtesting
El backtesting es una de las herramientas más importantes en el desarrollo de estrategias de trading algorítmico. Básicamente, consiste en aplicar las reglas de tu estrategia sobre datos históricos para ver cómo habría funcionado en el pasado. Aunque no es una bola de cristal que prediga el futuro, el backtesting te permite hacerte una idea de si la estrategia tiene potencial y cómo se comporta bajo diferentes condiciones de mercado.
¿Por qué es importante el backtesting?
- Validación de la estrategia: El primer objetivo del backtesting es confirmar que tu estrategia tiene sentido y, más importante, que podría haber sido rentable en el pasado. Si no funciona bien con datos históricos, es poco probable que funcione en tiempo real.
- Optimización de parámetros: Una vez que tienes una estrategia básica, puedes ajustar los parámetros para maximizar la rentabilidad o minimizar el riesgo. El backtesting te permite hacer esto de forma controlada, evaluando distintas configuraciones y viendo cómo afectan al rendimiento.
- Medición del riesgo: No se trata solo de cuántas ganancias puedes obtener, sino también de cómo se comporta la estrategia en situaciones de riesgo. ¿Qué tan profundo son los drawdowns? ¿Qué tan estable es a lo largo del tiempo? El backtesting te ofrece métricas importantes para evaluar este aspecto.
¿Cómo funciona el backtesting?
En esencia, el backtesting toma cada punto de datos históricos y aplica las reglas de tu estrategia. Si las condiciones de entrada de la estrategia se cumplen, simula la apertura de una operación; y cuando las reglas de salida se activan, cierra la posición. A lo largo de esta simulación, se rastrean las métricas de rendimiento clave, como:
- Ganancias/pérdidas por operación
- Tasa de éxito (porcentaje de operaciones ganadoras)
- Drawdown (pérdida máxima desde el punto más alto)
- Ratio de Sharpe (mide la rentabilidad según el riesgo tomado)
Estas métricas te ayudan a tener una idea de si tu estrategia tiene sentido y, lo más importante, si es robusta frente a las variaciones del mercado.
Limitaciones del backtesting
A pesar de sus ventajas, el backtesting tiene algunas limitaciones importantes:
- El rendimiento pasado no garantiza resultados futuros: Esto es algo que siempre se debe tener en cuenta. Aunque una estrategia haya funcionado en el pasado, no significa que funcionará igual de bien en el futuro. Los mercados cambian y las condiciones que hicieron rentable tu estrategia podrían desaparecer.
- Sesgos en el backtesting: Uno de los mayores riesgos es caer en sesgos, como el sesgo de anticipación (usar información que no estaría disponible en tiempo real) o el sobreajuste (optimizar tanto tu estrategia que solo funcione en el pasado).
- Calidad de los datos: Si los datos históricos que estás utilizando no son precisos o completos, los resultados del backtesting pueden estar distorsionados. Por lo tanto, es importante trabajar con datos de alta calidad. Hay una concepto Llamado «GIGO» (Garbage In, Garbage Out) que es especialmente relevante aquí. Significa que, si los datos que alimentan tu backtest son incorrectos, incompletos o de mala calidad, los resultados que obtendrás también serán inútiles o engañosos. ¡Si alimentas tu backtest con basura obtendrás basura!
Conclusión
El backtesting es una fase crucial para validar tu estrategia de trading antes de implementarla en el mundo real. Proporciona una visión clara de cómo tu estrategia habría funcionado en el pasado, lo que te permite optimizarla y ajustarla antes de arriesgar dinero real. Sin embargo, también debes ser consciente de sus limitaciones y sesgos, y no confiar ciegamente en los resultados.
Creación de un Entorno de Backtesting
El entorno de backtesting es donde se pone a prueba tu estrategia utilizando datos históricos. Se trata de simular cómo hubiera funcionado la estrategia en el pasado, lo que te permite evaluar su rendimiento sin arriesgar dinero en el mercado real. Pero no solo se trata de ejecutar una estrategia sobre datos pasados, sino de hacerlo en un entorno que sea lo más cercano posible a la realidad del mercado, incluyendo factores como los costos de transacción, slippage, y las reglas operativas.
Componentes Clave de un Entorno de Backtesting
1. Datos Históricos de Calidad
Los datos que alimentan el entorno de backtesting deben ser precisos y detallados. Dependiendo de tu estrategia, puedes necesitar datos de alta frecuencia (tick data) o simplemente datos de precios diarios. Es fundamental que los datos estén ajustados por dividendos, splits y otros eventos corporativos que puedan afectar los precios.
2. Simulación de Órdenes y Ejecuciones
No basta con generar señales de compra o venta; el backtest debe simular cómo las órdenes habrían sido ejecutadas en el mercado real. Esto incluye el manejo del slippage (diferencia entre el precio esperado y el precio real de ejecución) y los costos de transacción como comisiones y spreads. Un backtest sin estos elementos podría mostrar resultados demasiado optimistas.
3. Riesgo y Gestión de Capital
Un buen entorno de backtesting también debe permitirte aplicar reglas de gestión de riesgo y capital. Esto incluye establecer stop-loss, take-profits, y gestionar la cantidad de capital que se asigna a cada operación. Dejar de lado estos aspectos puede dar lugar a estrategias que no funcionen bien en la práctica.
4. Evaluación de Métricas de Rendimiento
Además de calcular el rendimiento bruto de una estrategia, un entorno de backtesting debe generar métricas de riesgo como el drawdown máximo, la volatilidad y el ratio de Sharpe, que te ayudarán a evaluar la calidad del rendimiento ajustado al riesgo. Estas métricas te permiten comparar estrategias de manera más efectiva.
5. Simulación en Tiempo Real vs Datos Históricos
Un entorno avanzado incluso podria permitirte ejecutar tanto simulaciones basadas en datos históricos como simulaciones en tiempo real. Las simulaciones en tiempo real te ayudarian a probar cómo responde tu estrategia a las condiciones actuales del mercado, antes de lanzarla en vivo.
Ejemplo de Backtesting Básico en Python
Veamos cómo podrías crear un entorno de backtesting básico utilizando Python, aplicando una estrategia simple de cruce de medias móviles sobre datos históricos:
import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt
# Descargar datos históricos
df = yf.download('NQ=F', start='2010-01-01', end='2024-01-01')
# Calcular medias móviles
df['SMA_50'] = df['Close'].rolling(window=50).mean()
df['SMA_200'] = df['Close'].rolling(window=200).mean()
# Definir reglas de entrada y salida
df['Signal'] = 0
df.loc[df['SMA_50'] > df['SMA_200'], 'Signal'] = 1 # Compra
df.loc[df['SMA_50'] < df['SMA_200'], 'Signal'] = -1 # Vende
# Simular la ejecución de las órdenes
df['Position'] = df['Signal'].shift() # Simular la ejecución al siguiente día
df['Strategy_Returns'] = df['Position'] * df['Close'].pct_change() # Retornos de la estrategia
# Eliminar NaNs
df.dropna(inplace=True)
# Graficar el rendimiento de la estrategia frente al activo
(df['Strategy_Returns'] + 1).cumprod().plot(label='Strategy', figsize=(10,5))
(df['Close'].pct_change() + 1).cumprod().plot(label='AAPL')
plt.legend()
plt.show()
En este código, hemos simulado una estrategia de cruce de medias móviles. La simulación de las órdenes se realiza con la función shift(), que mueve las señales un día hacia adelante para replicar la ejecución al siguiente día, una práctica estándar en los backtests para evitar el «sesgo de anticipación«.
Uso de Librerías de Backtesting: Pros y Contras
Si bien desarrollar tu propio entorno de backtesting te da un control total sobre cada detalle del proceso, también puede ser una tarea costosa en términos de tiempo y complejidad. Es por eso que existen varias librerías de backtesting que facilitan mucho este proceso. Sin embargo, también tienen sus limitaciones.
Pros de Usar Librerías de Backtesting
- Ahorro de Tiempo: Las librerías como Backtrader, Backtesting, o Vectorbt ya están diseñadas para manejar la mayoría de los aspectos clave del backtesting, como la simulación de órdenes, la gestión de capital, y la evaluación de rendimiento. Esto te permite concentrarte en desarrollar la estrategia en sí, en lugar de preocuparte por los detalles técnicos del backtest.
- Funcionalidades Avanzadas: Algunas librerías vienen con herramientas avanzadas como análisis de métricas de riesgo, gráficos, optimización de parámetros, y simulación de estrategias en tiempo real.
- Facilidad de Uso: En lugar de programar todo desde cero, puedes usar código predefinido para implementar rápidamente estrategias y obtener resultados. Para usuarios con menos experiencia en programación, esto es una gran ventaja.
Contras de Usar Librerías de Backtesting
- Menor Flexibilidad: Las librerías de backtesting suelen ofrecer una estructura fija. Si tu estrategia requiere condiciones muy personalizadas o técnicas avanzadas, podrías encontrar limitaciones al usar una librería predefinida.
- Sobreajuste a la Plataforma: Al depender de una librería específica, tu estrategia puede ser difícil de portar a otros entornos o plataformas.
- Cierre de Código: Algunas plataformas o librerías de backtesting no son de código abierto, lo que puede limitar tu capacidad para personalizar o entender a fondo cómo funcionan las simulaciones internas.