Jesse: framework de algo-trading para cripto con motor basado en minutos en Python y Rust

Reseña en profundidad de Jesse, un framework de algo-trading para mercados cripto. Simulación basada en minutos, estrategias como máquinas de estados, indicadores acelerados con Rust, optimización con protección contra el overfitting y el límite entre el núcleo open-source y el trading en vivo.

Jesse — algo-trading framework

La mayoría de los motores de backtesting open-source se dividen en dos bandos: stacks académicos que prueban de maravilla pero son inútiles para el trading real, y terminales curtidos en batalla que operan pero no permiten investigar como es debido. Jesse intenta ser ambas cosas a la vez: un framework de trading cripto con un motor unificado para backtesting, optimización y (mediante plugin) trading en vivo.

Arquitectura: no es una librería, es un pipeline

Jesse es un paquete de motor de ejecución de estrategias + API + UI: la CLI lanza uvicorn con FastAPI, PostgreSQL a través de Peewee, LSP para el editor de estrategias y, opcionalmente, el plugin jesse-live.

Simulación basada en minutos: la "fuente de verdad"

Jesse minute simulation

Un invariante crítico: en los backtests solo se aceptan velas de 1 minuto. Los timeframes superiores son agregados — la estrategia de 1h se dispara cada 60 minutos, pero las órdenes se ejecutan dentro de cada minuto según el high/low.

from jesse.research import backtest

result = backtest(
    config,
    routes=[("Binance", "BTC-USDT", "4h", "MyStrategy")],
    candles=candles_1m,  # strictly 60_000 ms between candles
)

Estrategia: una máquina de estados con órdenes declarativas

def go_long(self):
    qty = utils.size_to_qty(self.balance * 0.5, self.price)
    self.buy = qty, self.price
    self.stop_loss = qty, self.price * 0.97
    self.take_profit = qty, self.price * 1.05

El sistema decide: mercado, límite o stop, en función de la posición del precio respecto al precio actual. En modo live, el precio se redondea según la precisión del exchange.

Optimización: reducir el ruido, no maximizar el beneficio

La función de fitness combate el overfitting: filtro de mínimo 5 operaciones, número de operaciones log-normalizado, validación dual train/test y un Sharpe "inteligente" con penalización por autocorrelación.

Rust bajo el capó

Los indicadores (EMA, RSI, MACD, ATR…) usan jesse-rust. Incluso la aritmética básica está en Rust: la acumulación de errores de coma flotante a lo largo de miles de operaciones convierte los backtests en ficción.

Enlaces

Conclusión

Jesse intenta reducir el algo-trading cripto a un pipeline repetible: motor por minutos, clase Strategy estricta, indicadores en Rust, API de investigación sin fugas de estado y optimización con validación de periodo de test.