Hola, soy Alex de DEV STORIES DOT EU. Zipline Backtesting Engine, episodio 7 de 7. Pasas meses perfeccionando un algoritmo en un simulador, pero el mercado real no acepta órdenes de trading simuladas. Zipline se diseñó principalmente para backtesting, pero su arquitectura modular significa que puedes omitir por completo la simulación interna y enrutar directamente a un motor de ejecución real. Extender la arquitectura de Zipline hace posible esta transición.
Por defecto, Zipline funciona como un sistema cerrado. Le pasas datos históricos de precios, calcula señales y empareja internamente tus órdenes con el comportamiento pasado del mercado. El sistema aísla intencionadamente tu algoritmo de las redes externas. Pero un sistema de trading moderno tarde o temprano necesita comunicarse con el mundo exterior. Necesitas una forma de intercambiar los componentes de simulación internos por módulos personalizados que gestionen datos en vivo y capital real.
Zipline gestiona este requisito mediante un mecanismo de extensión basado en un archivo de inicialización específico llamado extension punto py. Este archivo actúa como un registro local para tu entorno. Cuando arranca el framework Zipline, busca inmediatamente aquí los overrides definidos por el usuario. Usas este archivo para registrar nuevos bundles de datos, modelos de comisiones personalizados y motores de ejecución alternativos.
El componente más crítico que debes intercambiar para el trading en vivo es el Blotter. El Blotter actúa como el sistema interno de gestión de órdenes. Rastrea las órdenes abiertas, las cancela cuando se le indica y procesa los fills de las operaciones. El blotter de simulación por defecto finge ejecutar operaciones basándose en algoritmos históricos de volumen y slippage. Para hacer trading en vivo, debes omitir esto por completo.
Esto lo consigues escribiendo una clase Blotter personalizada. En lugar de simular la ejecución, los métodos de tu clase hacen llamadas de red a la API de un bróker real. Cuando el algoritmo solicita una operación, tu blotter personalizado formatea esa solicitud en una orden en vivo y la transmite al exchange.
Aquí está la clave. No modificas ni una sola línea del código fuente original de Zipline para implementar esto. Defines tu clase blotter personalizada en tu propio espacio de trabajo. Luego, abres extension punto py. Importas la función de registro del blotter desde el módulo de utilidades de Zipline. Le pasas a esta función un string único con el nombre de tu bróker, junto con tu clase blotter personalizada. Eso registra tu motor de ejecución a nivel global. Finalmente, cuando ejecutas tu script de trading desde la línea de comandos o un notebook, simplemente proporcionas el string con el nombre de tu blotter personalizado como parámetro de lanzamiento. El framework intercambia la maquinaria interna automáticamente. Exactamente el mismo algoritmo que se ejecutó en simulación ahora está haciendo trading con capital real.
Soportar este nivel de modularidad requiere una base central altamente estable. Zipline depende en gran medida de dataframes numéricos rápidos y almacenamiento en bases de datos relacionales para mover información entre el algoritmo y el blotter. Con el lanzamiento de Zipline 3.0, la arquitectura central recibió una importante actualización estructural para modernizar esta base.
Toda la plataforma se migró para soportar Pandas 2.0 y
SQLAlchemy 2.0. Actualizar a Pandas 2.0 aporta una gestión de memoria sustancialmente mejor y tiempos de ejecución más rápidos para los enormes arrays de series temporales que Zipline procesa en cada tick. SQLAlchemy 2.0 moderniza por completo la forma en que el motor interactúa con las bases de datos SQL subyacentes. Impone rutas de ejecución de queries más estrictas y explícitas cuando el sistema gestiona los metadatos de los activos y almacena los resultados del trading. Estas mejoras fundamentales garantizan que, tanto si estás ejecutando un backtest histórico masivo como si estás enrutando órdenes en vivo a través de una extensión de bróker personalizada, el motor opera sobre el estándar moderno de la infraestructura de datos de Python.
Al separar la lógica de trading de la mecánica de ejecución, la arquitectura garantiza que tu algoritmo permanezca completamente intacto mientras la capa de ejecución subyacente se adapta a la realidad. Te animo encarecidamente a que explores la documentación oficial y pruebes a escribir tus propias extensiones de forma práctica. Si tienes ideas sobre lo que deberíamos tratar a continuación, visita DEV STORIES DOT EU para sugerir temas para nuestras futuras series. Gracias por pasar unos minutos conmigo. Hasta la próxima, cuídate.