Construction de moteurs décisionnels JAX pour le trading — pont DLPack PyTorch->JAX zéro-copie, World Model GRU, planification CEM (TD-MPC2), arène génétique vmap/jit, sanitizer de risque et disjoncteur drawdown. Couvre les pièges JIT/vmap, la calibration de contrat par actif et le sizing de lot.
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Une commande directe contourne le prompt de vérification. Examinez la source avant de l'exécuter.
Construction de moteurs décisionnels JAX pour le trading — pont DLPack PyTorch->JAX zéro-copie, World Model GRU, planification CEM (TD-MPC2), arène génétique vmap/jit, sanitizer de risque et disjoncteur drawdown. Couvre les pièges JIT/vmap, la calibration de contrat par actif et le sizing de lot.
category
mlops
Moteurs décisionnels JAX pour le trading
Présentation
Compétence pour construire le côté JAX d'un pipeline de trading souverain
dual-GPU : encodage latent PyTorch (GPU 0) -> DLPack -> moteur JAX (GPU 1)
-> garde-fous déterministes. Complète rl-trading-debugging (qui couvre le
diagnostic RL/ES/GA) en se concentrant sur la MÉCANIQUE JAX de production.
Cas d'usage : TD-MPC2, planification CEM, arène génétique sous jax.vmap/jit,
couche d'action avec règles de risque strictes (FTMO).
Hyperparamètres structurels = STATIQUES. Toute valeur servant à un
slice, jnp.arange, ou une forme de tableau doit être statique (int/float
Python). Les capturer via closure ou static_argnums — JAMAIS en argument
dynamique. Sinon ConcretizationTypeError (arange) ou IndexError: Slice entries must be static integers (slicing).
vmap : autant d'in_axes que d'args. Regrouper les arguments non-mappés
en un tuple passé in_axes=None. Erreur typique :
len(in_axes)=3, len(args)=2.
Méthodes jittées : @partial(jax.jit, static_argnums=(0,)) pour
self, + indices des hyperparamètres de slicing.
Règles d'or trading (sizing / risque)
Calibration contrat par actif (CRITIQUE).taille_contrat = 100 pour
XAUUSD/métaux (1 lot = 100 oz), 100_000 pour le forex. Une mauvaise
valeur fausse le risque par des ordres de grandeur, SILENCIEUSEMENT.
Sizing : lot = risque% × equity / (SL_dist × contrat), plafonné par la
marge (equity × levier / (prix × contrat)). Le levier déplafonne le
profit, le risque est contrôlé par le SL.
CEM non entraîné : actions dans [-1,1]. Utiliser fraction = |signal[1]|
(magnitude = conviction), et borner lot_souhaite par le risque calculé,
JAMAIS par une borne arbitraire (sinon lot ~0, ordres refusés en masse).
Protection absolue : si lot_max_risque < lot_min (stop trop serré),
REFUSER l'ordre plutôt que forcer lot_min qui dépasserait le risque.
Disjoncteur drawdown : seuil journalier (ex. 4%) sur perte latente +
réalisée. Coupe TOUTES les positions, suspend les ordres jusqu'à
réarmement MANUEL, journalise (JSONL) avec pénalité de fitness. Garde-fou
non soumis à l'IA, vérifié AVANT tout calcul de signal.
Checklist
jit/vmap : hyperparamètres structurels en closure/static_argnums
vmap : in_axes == nombre d'args positionnels
DLPack : tenseur .detach().contiguous().float() avant from_dlpack
taille_contrat calibré à l'actif (100 XAUUSD / 100k forex)
lot borné par risque calculé, refus si < lot_min
disjoncteur vérifié avant chaque émission d'ordre
warmup XLA avant la boucle temps réel (SIGTERM pendant compile = ptxas 15)