Jesse : framework d'algo-trading crypto avec moteur à la minute en Python et Rust

Revue approfondie de Jesse, un framework d'algo-trading pour les marchés crypto. Simulation à la minute, stratégies conçues comme des machines à états, indicateurs accélérés par Rust, optimisation avec protection contre l'overfitting, et la frontière entre le noyau open-source et le trading en direct.

Jesse — algo-trading framework

La plupart des moteurs de backtesting open-source se répartissent en deux camps : les stacks académiques qui testent à merveille mais sont inutilisables pour le trading réel, et les terminaux éprouvés au combat qui tradent mais ne permettent pas de faire de la recherche correctement. Jesse tente de concilier les deux — un framework de trading crypto avec un moteur unifié pour le backtesting, l'optimisation et (via un plugin) le trading en direct.

Architecture : pas une bibliothèque, mais un pipeline

Jesse est un ensemble moteur d'exécution de stratégies + API + UI : la CLI démarre uvicorn avec FastAPI, PostgreSQL via Peewee, un LSP pour l'éditeur de stratégies, et en option le plugin jesse-live.

Simulation à la minute : la "source de vérité"

Jesse minute simulation

Un invariant critique : seules les bougies d'1 minute sont acceptées en backtest. Les unités de temps supérieures sont des agrégats — la stratégie en 1h se déclenche toutes les 60 minutes, mais les ordres s'exécutent au sein de chaque minute selon le 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
)

Stratégie : une machine à états avec des ordres déclaratifs

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

Le système décide : marché, limite ou stop — en fonction de la position du prix par rapport au prix courant. En mode live, le prix est arrondi selon la précision de l'exchange.

Optimisation : réduire le bruit, pas maximiser le profit

La fonction de fitness lutte contre l'overfitting : filtre d'un minimum de 5 trades, nombre de trades log-normalisé, double validation train/test, et un Sharpe "intelligent" avec pénalité d'autocorrélation.

Rust sous le capot

Les indicateurs (EMA, RSI, MACD, ATR…) utilisent jesse-rust. Même l'arithmétique de base est en Rust : l'accumulation d'erreurs de flottants sur des milliers de trades transforme sinon les backtests en fiction.

Liens

Conclusion

Jesse tente de réduire l'algo-trading crypto à un pipeline reproductible : moteur à la minute, classe Strategy stricte, indicateurs en Rust, API de recherche sans fuite d'état, et optimisation avec validation sur période de test.