Backtesting de Estrategias de Trading Sistemático en Python: Consideraciones y Librerías de Código Abierto

0
850
librerias backtesting python

Librerías de backtesting de Python

El backtesting es, sin duda, una de las partes más críticas del proceso de producción de una estrategia de trading sistemática, ubicándose entre el desarrollo de la estrategia y su implementación (trading en vivo). Si una estrategia tiene fallas, un backtesting riguroso debería exponerlas, evitando que una estrategia que genere pérdidas sea implementada.

Existen varias capacidades relacionadas que se superponen con el backtesting, como la simulación de operaciones y el trading en vivo. El backtesting utiliza datos históricos para cuantificar el rendimiento de la estrategia. Los simuladores de trading llevan el backtesting un paso más allá al visualizar la activación de operaciones y el rendimiento de los precios en un análisis detallado de barra por barra. El trading simulado/en vivo implementa una estrategia de trading probada en tiempo real: señalando operaciones, generando órdenes, enviando órdenes a los brokers y manteniendo posiciones a medida que las órdenes se ejecutan.

La mayoría de las librerías de python van más allá del backtesting para incluir algunas capacidades de trading en vivo. Esto es conveniente si deseas implementar la estrategia desde la librería de backtesting, la cual también funciona con tu broker y fuentes de datos de precios preferidos. Quantopian/Zipline va un paso más allá, ofreciendo una solución completamente integrada para el desarrollo, backtesting e implementación.

La comunidad de Python está bien servida, con al menos seis librerías de backtesting de código abierto disponibles. Sin embargo, están en diferentes etapas de desarrollo y documentación. Si disfrutas trabajar con un equipo que construye un marco de backtesting de código abierto, consulta sus repositorios en Github.

Antes de evaluar los marcos de backtesting, vale la pena definir los requisitos de tu estrategia de trading.

¿Qué clase(s) de activos estás negociando? Aunque la mayoría de las librerías aceptan datos del mercado de acciones estadounidenses a través de YahooFinance, si una estrategia incluye derivados, ETF o valores de mercados emergentes, los datos deben ser importables o proporcionados por la librería. La cobertura de clases de activos va más allá de los datos. ¿Puede el programa manejar futuros y opciones de duración limitada y generar operaciones de roll-over automáticamente? ¿Qué pasa con los mercados ilíquidos? ¿Qué tan realista debe ser la suposición al ejecutar órdenes grandes?

¿Qué frecuencia y detalle de datos utiliza la estrategia? Un sistema de trading que requiera cada tick o las ofertas/demandas tiene un conjunto de problemas de gestión de datos muy diferente a uno que opere en intervalos de 5 minutos o una hora. Los fondos de cobertura y las empresas de HFT han invertido significativamente en la construcción de marcos de backtesting robustos y escalables para manejar esos volúmenes y frecuencias de datos. Algunas plataformas ofrecen un conjunto rico y profundo de datos para varias clases de activos, como acciones del S&P, con una resolución de un minuto o incluso menos.

¿Qué tipo(s) de órdenes requiere la estrategia de trading? Como mínimo, el marco debe admitir órdenes limitadas, stops y OCO (una cancela a la otra).

Nivel de soporte y documentación requerida. Los marcos en etapas tempranas tienen poca documentación, y pocos ofrecen soporte más allá de los foros comunitarios.

Pueden acceder a un directorio completo de sistemas de trading que pueden evaluar mediante las bibliotecas de backtesting de Python: Lista de estrategias de trading

Los Componentes de una librería de Backtesting

Adquisición de datos del mercado: Los componentes de adquisición leen el archivo de script/definición de la estrategia de trading y proporcionan los datos necesarios para realizar las pruebas de backtesting. Si el marco requiere que cualquier estrategia sea recodificada antes del backtesting, entonces debería ofrecer funciones predefinidas para los indicadores técnicos más populares, con el fin de acelerar las pruebas del sistema de trading. Los usuarios determinan el período histórico a evaluar en función de lo que el marco proporciona o de lo que son capaces de importar.

Prueba de rendimiento: La prueba de rendimiento aplica la lógica de la estrategia de trading a la ventana de datos históricos solicitada y calcula una amplia gama de métricas de riesgo y rendimiento, incluyendo la máxima caída (max drawdown), y las ratios de Sharpe y Sortino. Casi todas las librerías soportan un número considerable de capacidades de visualización, incluyendo curvas de equidad y estadísticas en deciles.

Optimización: La optimización tiende a requerir la mayor parte de los recursos computacionales en el proceso de análisis de una estrategia de trading. Si tu estrategia requiere optimización, entonces debes enfocarte en una librería que soporte procesamiento distribuido/parallelizable escalable.

En el contexto de las estrategias desarrolladas utilizando indicadores técnicos, los desarrolladores de sistemas intentan encontrar un conjunto óptimo de parámetros para cada indicador. De manera simple, la optimización podría encontrar que una estrategia de cruce de medias móviles de 10 y 20 días acumuló más ganancias en los datos históricos de prueba que cualquier otra combinación de períodos entre 1 y 20. Ya con este ejemplo trivial, se deben calcular y clasificar 20 * 20 = 400 combinaciones de parámetros.

En un contexto de un portafolio de inversión, la optimización busca encontrar la ponderación óptima de cada activo en el portafolio, incluidos los instrumentos en corto y apalancados. De manera periódica, el portafolio se rebalancea, lo que resulta en la compra y venta de activos del portafolio según sea necesario para alinearse con las ponderaciones optimizadas.

El dimensionamiento de posiciones es otro uso de la optimización, ayudando a los desarrolladores de sistemas a simular y analizar el impacto del apalancamiento y el dimensionamiento dinámico de posiciones en el rendimiento de la estrategia y del portafolio.

Seis Librerías de Backtesting para Python Recomendadas

Las capacidades estándar de las librerías de backtesting de código abierto en Python usualmente incluyen:

  • Acceso a datos históricos del mercado de múltiples activos
  • Licencias muy flexibles y no restrictivas
  • Colección decente de indicadores técnicos predefinidos
  • Capacidades estándar de cálculo/visualización/informe de métricas de rendimiento

PyAlgoTrade

PyAlgoTrade es un marco de backtesting maduro y completamente documentado que cuenta con capacidades de trading en papel y en vivo. El soporte de datos incluye Yahoo! Finance, Google Finance, NinjaTrader y cualquier tipo de series temporales basadas en CSV, como Quandl. Los tipos de órdenes compatibles con esta librería incluyen órdenes de mercado, límite, stop y stop límite.

PyAlgoTrade admite el trading de Bitcoin a través de Bitstamp y el manejo de eventos en tiempo real de Twitter.

  • Página del proyecto: github.com/gbeced/pyalgotrade 

bt – Backtesting for Python

bt “tiene como objetivo fomentar la creación de bloques de lógica de estrategia fácilmente testeables, reutilizables y flexibles para facilitar el desarrollo rápido de estrategias de trading complejas”.

La librería es particularmente adecuada para probar estrategias de trading basadas en portafolios, con algoritmos para la ponderación de activos y el rebalanceo de portafolios. Modificar una estrategia para ejecutarla en diferentes frecuencias de tiempo o con pesos alternativos de activos implica un mínimo ajuste de código. bt está construido sobre ffn, una biblioteca de funciones financieras para Python.

  • Página del proyecto: pmorissette.github.io/bt

Backtrader

Esta plataforma está excepcionalmente bien documentada, con un blog adjunto y una comunidad en línea activa para publicar preguntas y solicitar nuevas características. Backtrader admite varios formatos de datos, incluidos archivos CSV, DataFrames de Pandas, iteradores de blaze y fuentes de datos en tiempo real de tres brokers. Estas fuentes de datos pueden accederse simultáneamente e incluso pueden representar diferentes marcos temporales. 

Los brokers compatibles incluyen Oanda para trading de Forex y trading de clases de activos múltiples a través de Interactive Brokers y Visual Chart.

  • Página del proyecto: www.backtrader.com

pysystemtrade

El desarrollador de pysystemtrade, Rob Carver, tiene una excelente publicación en la que explica por qué decidió crear otra librería de backtesting en Python y argumenta a favor y en contra del desarrollo de marcos. El marco de backtesting de pysystemtrade se discute en el libro de Rob, Systematic Trading.

pysystemtrade enumera una serie de capacidades en su hoja de ruta, incluido un backtester con todas las funciones, que incorpora técnicas de optimización y calibración, y trading de futuros completamente automatizado con Interactive Brokers. Los contribuyentes para la mejora del código abierto son bienvenidos.

  • Página del proyecto: github.com/robcarver17/pysystemtrade

Zipline

Zipline es un simulador de trading algorítmico con capacidades de trading en papel y en vivo. Accesible a través de la interfaz de IPython Notebook basada en navegador, Zipline ofrece una alternativa fácil de usar a las herramientas basadas en líneas de comandos. Desarrollado y mantenido por Quantopian, Zipline puede usarse como una librería de backtesting independiente o como parte de un entorno completo de desarrollo, prueba e implementación de estrategias de trading con Quantopian/Zipline. Zipline proporciona 10 años de datos históricos de acciones estadounidenses con resolución de un minuto y varias opciones de importación de datos.

  • Página del proyecto: zipline.io

QSTrader

QSTrader es un marco de backtesting con capacidades de trading en vivo. El fundador de QuantStart, Michael Halls-Moore, lanzó QSTrader con la intención de construir una plataforma lo suficientemente robusta y escalable para satisfacer las necesidades de los fondos de cobertura cuantitativos institucionales, así como de los traders cuantitativos minoristas. QSTrader actualmente admite datos de precios de tipo OHLCV en varias escalas de tiempo, pero también permite el uso de datos por tick.

Tanto el backtesting como el trading en vivo están completamente basados en eventos, lo que agiliza la transición de las estrategias desde la investigación hasta la prueba y finalmente al trading en vivo. El código principal de estrategia/portafolio suele ser idéntico en ambas implementaciones.

El principal beneficio de QSTrader es su modularidad, lo que permite una personalización extensa del código para aquellos que tienen requisitos específicos de gestión de riesgos o de portafolio.

  • Página del proyecto: QSTrader (quantstart.com)

Conclusiones

Es parte de la naturaleza humana enfocarse en la recompensa al desarrollar una estrategia de trading sistemático (con la esperanza de que sea rentable) y luego apresurarse a usar esta estrategia para operar con dinero real, sin dedicar suficiente tiempo y recursos a realizar un backtesting exhaustivo de la estrategia. Sin embargo, el backtesting no es solo un guardián que nos impide implementar estrategias defectuosas y perder capital de trading, sino que también proporciona una serie de diagnósticos que pueden informar el proceso de desarrollo de la estrategia. Por ejemplo, probar un método de trading idéntico en dos marcos temporales diferentes, comprender la máxima caída (max drawdown) de una estrategia en el contexto de las correlaciones de activos, y crear portafolios más inteligentes mediante el backtesting de asignaciones de activos en múltiples geografías.

En publicaciones futuras, abordaremos el uso de las librerías de backesting para evaluar sistemas de trading y carteras de inversión.


 

TagsPython
Raul Canessa

Leave a reply