PyEventBT es un framework open source que permite diseñar, backtestear y ejecutar estrategias algorítmicas en Python directamente sobre MetaTrader 5, sin reescribir código ni pasar por MQL5. Una solución pensada para traders que buscan rigor institucional, coherencia entre backtest y trading en real, y un flujo de trabajo profesional de principio a fin.
Si estás en el mundo del trading algorítmico, ya sea profesionalmente o por hobby, seguramente conoces de primera mano las maravillas que un lenguaje como Python te puede ofrecer. Es el lenguaje indiscutible para el análisis de datos: flexible, con una gran cantidad de librerías y una sintaxis que convierte el prototipar ideas complejas en casi un juego.
Sin embargo, esta facilidad choca contra un muro de realidad cuando llega la hora de operar con la plataforma MetaTrader 5. Si bien es cierto que tienen una API para poder operar mediante Python, no existe ninguna solución integrada para poder hacer primero un backtest de la estrategia que quisiéramos poner en producción.
Aunque MT5 es el estándar para el trading retail dado que la mayoría de brokers la ofrecen, su lenguaje de programación nativo, MQL5, suele ser un dolor de cabeza para los traders. Es más rígido, tiene una curva de aprendizaje más larga y carece del vasto ecosistema de librerías que ofrece Python. Además, MQL5 está creado para vivir “dentro” de MetaTrader, lo que no te permite conectarte fácilmente a APIs externas, como sí puede hacerse con Python.
Esto nos ha llevado históricamente a un flujo de trabajo frustrante y peligroso:
- Investigamos y validamos una estrategia en Python, normalmente haciendo un backtest vectorizado.
- Intentamos «traducir» esa lógica a MQL5 para poder ejecutarla, o adaptamos el código de investigación para que pueda trabajar con datos a tiempo real.
- Descubrimos que los resultados no coinciden, que la lógica es difícil de replicar o, peor aún, introducimos errores -sin darnos cuenta- que se traducen en pérdidas de dinero real.
Pero… ¿Y si pudieras saltarte esa traducción y no necesitar MT5 para nada más que no fuera la ejecución?
PyEventBT es un proyecto que nació en 2023 dentro del equipo de KomaLogic para resolver precisamente este mismo problema. Es un framework que te permite desarrollar, validar y operar estrategias usando únicamente Python, sin tocar MQL5 ni necesitar el Strategy Tester de MT5.
La magia de PyEventBT reside en su arquitectura: hemos creado un entorno de backtesting que emula completamente la API y el comportamiento de MT5. Esto significa que puedes ejecutar tu código Python sobre datos históricos y obtener un backtest realista —idéntico al que te daría el Strategy Tester de MT5— porque el framework simula las mismas condiciones de ejecución (spreads, comisiones y lógica de eventos) (Figura 1).
Pero lo mejor viene después: una vez estás satisfecho con los resultados en el backtest, puedes usar exactamente el mismo código para operar en real. PyEventBT se conecta a tu terminal MT5 y ejecuta tus órdenes basándose en la misma lógica que ya validaste. Sin reescrituras, sin adaptaciones y, sobre todo, sin errores de traducción.

¿QUÉ ES PYEVENTBT?
PyEventBT es un ecosistema completo escrito en Python para investigar, diseñar y ejecutar estrategias de trading algorítmico de manera integrada. Está programado con un estándar institucional: siguiendo una arquitectura de software hexagonal, y basado en eventos.
El proyecto es la evolución natural del curso «Trading con Python: Crea tu propio Framework» (Udemy/Quantdemy), y nace con la misión de democratizar el acceso a herramientas profesionales a cualquier trader del mundo. Al ser open source, permite a la comunidad no solo usarlo gratuitamente, sino auditar, mejorar y adaptar el código a sus necesidades específicas.
FILOSOFÍA «WRITE ONCE, RUN ANYWHERE»
La mayor propuesta de valor de PyEventBT es la reutilización total del código.
Tradicionalmente, los traders solíamos mantener dos bases de código: una para investigación (Python vectorizado/Jupyter) y otra para producción (C++/MQL/Python). Esto duplica el trabajo y multiplica los puntos de fallo.
PyEventBT elimina esta duplicidad mediante su gestión inteligente del contexto (TradingContext). Tu estrategia, definida en una clase o función de Python, no necesita saber si está operando con dinero real o simulado.
- En modo Backtest: El framework alimenta tu estrategia, de manera secuencial, con datos históricos que provienen de un CSV o de Quantdle. También simula la ejecución de órdenes (tanto market como pendientes), la activación de stop-loss o take-profits, monitoriza el nivel de margen disponible y gestiona el portfolio virtualmente, entre muchas otras cosas.
- En modo Live: El framework cambia «los cables» por debajo, sin que tengas que hacer nada. Se conecta a la API de MT5, recibe datos de mercado en tiempo real y envía las órdenes a tu broker.
Para ti, el código es el mismo. La lógica de entrada, la gestión de riesgo y el cálculo de indicadores no cambian. Simplemente, cambias el interruptor de «Backtest» a «Live», y estás operando.
ARQUITECTURA EVENT-DRIVEN: ¿POR QUÉ ES SUPERIOR?
Muchos traders que trabajan con Python usan el backtesting vectorizado por su altísima velocidad. Yo mismo lo uso aún en ocasiones para hacer pruebas rápidas de ideas. Sin embargo, es muy sencillo introducir errores como el lookahead bias al disponer de todos los datos desde el principio: sin querer, tu código puede estar usando el precio de cierre de mañana para decidir la compra de hoy, generando resultados falsos.
Del mismo modo, es muy difícil diseñar estrategias que usen datos de distintas temporalidades simultáneamente, o que operen múltiples reglas (como las estrategias generadas mediante Rule Extraction). Lo mismo para el caso de múltiples activos. La versatilidad del backtest vectorizado se pierde cuando nos acercamos a los niveles de complejidad que necesitamos para una estrategia real.
Del mismo modo, aparecen problemas respecto al cálculo de las posiciones; en un backtest vectorizado solemos trabajar con los propios retornos del subyacente para crear nuestras curvas de equity. Sin embargo, en el entorno real los resultados serían distintos, ya que existen unidades mínimas que comprar: un lote, un contrato o una acción. Del mismo modo, no puedes simular la evolución del margen si operas con apalancamiento (como en FX, CFDs y futuros).
Para resolver todos estos problemas, hemos diseñado PyEventBT para que utilice una arquitectura basada en eventos, construida alrededor de una events-queue que comunica (y desacopla) los distintos módulos, permitiendo que hablen entre sí.
El sistema procesa el mercado evento por evento, vela a vela, en estricto orden cronológico:
- Llega un nuevo precio en forma de DataEvent.
- La estrategia lo analiza y decide si actuar.
- Si hay señal, se genera un SignalEvent.
- Si hay SignalEvent, el sistema le da un tamaño a la posición (SizingEvent).
- Luego, se evalúa si esa posición cumple con las normas de riesgo.
- Si el riesgo es válido, se genera y ejecuta la orden (OrderEvent -> FillEvent).
- Se reciben los datos de ejecución para poder analizarlos y guardarlos.
Este flujo garantiza que, por diseño, nuestras estrategias nunca puedan ver el futuro, ofreciendo una simulación extremadamente realista de cómo se comportaría el algoritmo en el mercado real.
UNA ARQUITECTURA MODULAR: CONTROL TOTAL
Un sistema de trading robusto es mucho más que una señal de entrada. PyEventBT te da control granular sobre cada aspecto mediante módulos independientes e intercambiables:
- Data Provider: El conector de datos con el mercado, real o simulado.
- Signal Engine: Aquí es donde definimos nuestro «edge»: cuándo entrar y salir.
- Sizing Engine: ¿Cuánto comprar? Puedes usar modelos de capital fijo, porcentaje de riesgo, criterio de Kelly, etc., sin tocar la lógica de la señal.
- Risk Engine: El guardián. Valida cada orden antes de enviarla al mercado. Si una operación viola tus reglas de exposición máxima o de apalancamiento, el Risk Engine la bloqueará, protegiendo tu capital incluso si tu estrategia falla. Permite tener una capa unificada de control de riesgo para distintas señales de manera simultánea.
- Execution Engine & Portfolio: Gestionan la comunicación con el broker (o el simulador) y llevan el registro preciso del P&L, margen disponible, órdenes pendientes y posiciones.
Siendo un poco más técnicos, todo el framework está construido mediante una arquitectura hexagonal. Cada módulo se compone de una interfaz, distintos conectores y un servicio que lo unifica todo. Esto nos permite añadir nuevos brokers, proveedores de datos u otros sistemas de gestión de riesgo simplemente incorporando un adaptador que implemente la interfaz adecuada, sin necesidad de cambiar el core del sistema.
EN LA PRÁCTICA: EJEMPLO DE CÓDIGO
Lo mejor de PyEventBT es su sencillez. Gracias al uso de decoradores y una API intuitiva, puedes definir una estrategia completa en pocas líneas. Aquí tienes un ejemplo de la estructura de una estrategia:
from pyeventbt import ( … ) # Importamos todos los módulos necesarios
from datetime import datetime
# Instanciamos la estrategia
strategy = Strategy()
# Definimos la lógica usando el decorador
@strategy.custom_signal_engine(
strategy_id="mi_estrategia_demo", strategy_timeframes=[StrategyTimeframes.ONE_HOUR,
StrategyTimeframes.ONE_DAY]
)
def mi_estrategia(event: BarEvent, modules: Modules):
# Lógica de trading simple
# Si tenemos señal (o múltiples señales), retornamos lista de eventos
return [SignalEvent(...), SignalEvent(...)]
# Configuramos el Sizing Engine para operar el menor tamaño de cada símbolo
strategy.configure_predefined_sizing_ engine(MinSizingConfig())
# Configuramos el Risk Engine para que lo deje pasar todo
strategy.configure_predefined_risk_engine(PassthroughRiskConfig())
# Ejecutamos el Backtest con una sola llamada
backtest = strategy.backtest(
strategy_id="12345", initial_capital=100000, symbols_to_trade=['EURUSD', 'GBPUSD'], csv_dir='./data', # Tus datos históricos
start_date=datetime(2023, 1, 1),
end_date=datetime(2023, 12, 31)
)
# Analizamos los resultados visualmente
backtest.plot()

Como ves, la estructura básica está hecha con un código muy simple, limpio y legible. Y este mismo bloque, con un simple cambio en la llamada de ejecución (strategy.run_live(…)), estaría operando en tu cuenta real de MT5.
ROADMAP Y COMUNIDAD
Este lanzamiento va a ser solo el comienzo. PyEventBT es un proyecto vivo y estamos comprometidos con su evolución constante, añadiendo más funcionalidades, indicadores, herramientas de análisis avanzado e incluso nuevos brokers y plataformas en las que ejecutar.
De manera que invitamos a todos los desarrolladores, quants y traders a colaborar. Ya sea reportando bugs, sugiriendo funcionalidades o contribuyendo con código, tu ayuda es vital para construir la mejor herramienta de trading algorítmico.
CONCLUSIÓN
Con PyEventBT, hemos eliminado la dependencia del lenguaje MQL5 y eliminado el riesgo en adaptar el código de investigación al de producción. Ahora, el mismo código que valida tu tesis de inversión es el que ejecuta tus operaciones, garantizando una fidelidad absoluta entre tu backtest y tu trading en real (siempre que tu estrategia no haya sido sobreoptimizada, por supuesto).
PyEventBT no es solo una librería más; es la pieza que faltaba para que traders independientes y pequeñas firmas puedan trabajar en un ecosistema integrado, flexible y modular. Si todo esto te suena bien, te invito a unirte a este proyecto que aspira a redefinir el trading algorítmico con Python.
Instálalo ahora:
pip install pyeventbt
- Documentación: https://pyeventbt.com
Artículo publicado en el número 65 de la revista Hispatrading. Regístrate en Hispatrading.com de manera completamente gratuita para acceder a más artículos como este.





