Captura de pantalla 2023 06 07 a las 15.27.31

 Martí Castany es Quant Researcher, Co- Fundador y Portfolio Manager de KomaLogic, una pequeña firma de trading sistemático. Tiene más de 8 años de experiencia trabajando en el desarrollo de modelos cuantitativos y como consultor en el sector de la gestión de riesgos para el buy y el sell side.
Martí Castany / kjtradingsystems.com

  • 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 total entre backtest y trading en real, y un flujo de trabajo profesional de principio a fin.
  • Artículo publicado en Hispatrading 65.

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 un gran ecosistema de librerías y una sintaxis que convierte el prototipado de ideas complejas en casi un juego.

Pero esa facilidad choca contra un muro cuando llega la hora de operar con MetaTrader 5. Aunque MT5 dispone de API para operar desde Python, no existe una solución integrada para backtestear primero la estrategia que quieres poner en producción con el mismo entorno de ejecución que luego vas a usar en real.

MT5 sigue siendo el estándar del trading retail porque la mayoría de brokers lo ofrecen, pero su lenguaje nativo, MQL5, suele ser un dolor de cabeza para muchos 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á pensado para vivir “dentro” de MetaTrader, lo que complica conectarte a APIs externas o integrar fácilmente pipelines de datos, research y analítica como sí haces con Python.

Eso nos ha llevado históricamente a un flujo de trabajo frustrante y peligroso:

  • Investigar y validar una estrategia en Python (a menudo con backtests vectorizados).
  • Intentar traducir la lógica a MQL5 para ejecutarla, o adaptar el código para tiempo real.
  • Descubrir que los resultados no coinciden, que la lógica es difícil de replicar o, peor, introducir errores invisibles que acaban en pérdidas de dinero real.

Pero… ¿y si pudieras saltarte esa traducción y usar MT5 solo como capa de ejecución?

PyEventBT es un proyecto que nació en 2023 dentro del equipo de KomaLogic para resolver precisamente este problema. Es un framework que te permite desarrollar, validar y operar estrategias usando únicamente Python, sin tocar MQL5 ni depender del Strategy Tester de MT5.

La “magia” de PyEventBT está en su arquitectura: se ha creado un entorno de backtesting que emula 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 —coherente con lo que te daría MT5— porque el framework simula condiciones de ejecución como spreads, comisiones y lógica de eventos.

Figura 1
Figura 1. PyEventBT.

Y lo mejor viene después: cuando estás satisfecho con el backtest, puedes usar exactamente el mismo código para operar en real. PyEventBT se conecta a tu terminal MT5 y ejecuta las ó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 hexagonal y un enfoque event-driven.

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. Al ser open source, permite a la comunidad no solo usarlo gratuitamente, sino también auditar, mejorar y adaptar el código a necesidades específicas.

Filosofía “Write Once, Run Anywhere”

La propuesta de valor central de PyEventBT es la reutilización total del código.

Tradicionalmente, muchos traders mantienen dos bases de código: una para investigación (Python vectorizado/Jupyter) y otra para producción (C++/MQL/Python). Eso duplica el trabajo y multiplica los puntos de fallo.

PyEventBT elimina esa 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:

  • Modo Backtest: el framework alimenta tu estrategia de forma secuencial con datos históricos (CSV o Quantdle), simula ejecución de órdenes (market y pendientes), activa stop-loss y take-profits, monitoriza margen disponible y gestiona el portfolio virtual.
  • Modo Live: el framework cambia “los cables” por debajo sin que tengas que hacer nada: se conecta a la API de MT5, recibe datos en tiempo real y envía órdenes al 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. Cambias el interruptor de Backtest a Live y estás operando.

Arquitectura event-driven: por qué importa

El backtesting vectorizado en Python es rápido y útil para probar ideas, pero es fácil introducir sesgos como el lookahead bias (usar, sin querer, información futura). Además, se vuelve complicado cuando necesitas múltiples temporalidades, múltiples activos, reglas simultáneas, gestión realista de órdenes o simulación de margen y tamaños mínimos (lotes/contratos/acciones).

Para resolverlo, PyEventBT está construido alrededor de una cola de eventos que comunica y desacopla módulos. El sistema procesa el mercado evento por evento, en estricto orden cronológico:

  1. Llega un nuevo precio como DataEvent.
  2. La estrategia lo analiza y decide si actuar.
  3. Si hay señal, se genera un SignalEvent.
  4. El sistema asigna tamaño (SizingEvent).
  5. Se valida riesgo.
  6. Se genera y ejecuta la orden (OrderEvent → FillEvent).
  7. Se registran ejecuciones para análisis y almacenamiento.

Este flujo garantiza que, por diseño, la estrategia no pueda ver el futuro y que la simulación sea mucho más realista respecto a la operativa real.

Arquitectura modular: control total

Un sistema robusto es mucho más que una señal. PyEventBT te da control granular con módulos independientes e intercambiables:

  • Data Provider: conector de datos (real o simulado).
  • Signal Engine: donde defines tu edge: cuándo entrar y salir.
  • Sizing Engine: cuánto comprar (capital fijo, % riesgo, Kelly, etc.) sin tocar la lógica de señal.
  • Risk Engine: el guardián: valida cada orden antes de enviarla. Si viola reglas de exposición o apalancamiento, bloquea la operación, protegiendo tu capital incluso si tu estrategia falla.
  • Execution Engine & Portfolio: comunicación con broker/simulador y registro preciso de P&L, margen, órdenes pendientes y posiciones.
Figura 2
Figura 2. Backtest.

En términos de ingeniería, el framework sigue una arquitectura hexagonal: cada módulo se compone de una interfaz, conectores/adaptadores y un servicio que unifica. Eso permite añadir nuevos brokers, proveedores de datos o motores de riesgo incorporando adaptadores que implementen la interfaz, sin tocar el core.

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. Ejemplo de estructura:

from pyeventbt import ( … ) # Importamos módulos
from datetime import datetime

strategy = Strategy()

@strategy.custom_signal_engine(
    strategy_id="mi_estrategia_demo",
    strategy_timeframes=[StrategyTimeframes.ONE_HOUR, StrategyTimeframes.ONE_DAY]
)
def mi_estrategia(event: BarEvent, modules: Modules):
    return [SignalEvent(...), SignalEvent(...)]

strategy.configure_predefined_sizing_engine(MinSizingConfig())
strategy.configure_predefined_risk_engine(PassthroughRiskConfig())

backtest = strategy.backtest(
    strategy_id="12345",
    initial_capital=100000,
    symbols_to_trade=['EURUSD', 'GBPUSD'],
    csv_dir='./data',
    start_date=datetime(2023, 1, 1),
    end_date=datetime(2023, 12, 31)
)

backtest.plot()

La estructura es limpia y legible. Y ese mismo bloque, cambiando la llamada de ejecución (por ejemplo, strategy.run_live(…)), estaría operando en tu cuenta real de MT5.

Roadmap y comunidad

Esto es solo el comienzo. PyEventBT es un proyecto vivo y el objetivo es seguir añadiendo funcionalidades, indicadores, herramientas de análisis avanzado y nuevos brokers o plataformas.

Se invita a desarrolladores, quants y traders a colaborar: reportar bugs, proponer mejoras o contribuir con código. En un proyecto open source, la comunidad es el multiplicador real.

Conclusión

Con PyEventBT se elimina la dependencia de MQL5 y se reduce el riesgo de 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 fidelidad absoluta entre backtest y trading real (siempre que no haya sobreoptimización, claro).

PyEventBT no es “otra librería más”. Es la pieza que faltaba para que traders independientes y pequeñas firmas trabajen con un ecosistema integrado, flexible y modular. Si todo esto te suena bien, tiene sentido echarle un ojo y unirte a la iniciativa.

Instálalo ahora: pip install pyeventbt
Documentación: https://pyeventbt.com
GitHub: https://github.com/marticastany/pyeventbt

Gracias por tu lectura.