ADR-015 : LEAN tourne dans son image publique, sans lean-cli, sur des barres exportées par le laboratoire¶
Statut : acceptée le 2026-09-03, phase 9.
Contexte¶
L'ADR-008 a réservé LEAN à la réimplémentation indépendante des stratégies
retenues. Aucune ne l'a été, et le moteur du laboratoire n'avait jamais été
confronté à un moteur écrit par d'autres. L'outil officiel, lean-cli, exige
à l'initialisation un identifiant et un jeton d'API QuantConnect, mesuré le
2026-09-03 : la commande lean init s'interrompt sur cette demande. Le
laboratoire ne dépend d'aucun compte tiers pour se reproduire.
Décision¶
LEAN tourne directement dans l'image publique quantconnect/lean, épinglée
par son empreinte, lancée par un script shell qui monte trois dossiers :
l'algorithme, les données, les résultats. Les deux bases de référence du moteur, les heures de marché et les
propriétés des symboles, sont copiées depuis l'image elle-même.
Les données de LEAN sont écrites par le laboratoire depuis les mêmes prix que
ceux qu'il utilise, par quantlab.backtest.lean_bridge. Trois conventions
sont fixées et testées. Dans le premier jeu de données, l'ouverture du jour est
la clôture de la veille, pour que l'exécution à l'ouverture suivante de LEAN
désigne le prix que le moteur du laboratoire suppose. C'est ce qui vérifie
l'arithmétique. Un second jeu porte l'ouverture réelle de Yahoo, ajustée par
le facteur de la clôture, pour mesurer ce que cette convention vaut. Les prix sont déjà ajustés et LEAN les lit en mode
Raw, sans fichier de correspondance ni de facteurs. Le taux sans risque est
fourni en CSV, et l'algorithme n'en lit jamais une valeur future.
L'algorithme de contrôle n'importe rien de quantlab, et un test le vérifie
sur le texte du fichier. Il ne recopie pas non plus l'univers ni les
paramètres : l'export les écrit dans custom/params.json depuis la
configuration de l'étude, et l'algorithme les lit là.
La réconciliation compare trois choses, et chacune est une table publiée. Les rendements mensuels après retrait du financement, les poids à chaque date de décision, et le prix de chaque exécution contre les clôtures voisines. Un écart mensuel au-delà de 1e-4 est un écart à expliquer, seuil déclaré avant la première lecture.
Conséquences¶
Le moteur du laboratoire est contrôlé sur l'étude 001 à 5e-6 par mois. Deux
coûts que le moteur mensuel ne peut pas voir sont mesurés : l'ouverture
réelle du lendemain, 25 points de base par an, et une séance de retard, 71.
L'audit du 2026-09-03 a demandé le second jeu de données, l'épinglage de
l'image et la lecture des paramètres, tous trois absents de la première
version. Le prix est une image de 19,4 Go et Docker en marche. Le passage à une
stratégie retenue, si une l'est un jour, ne demande qu'un nouvel algorithme
dans lean/algorithm/ et un nouvel export.
Les prix encodés en dix-millièmes de dollar bornent la précision : l'effet a été mesuré, 0,05 % sur la volatilité du seul instrument à 0,45 % de volatilité, et il est déclaré plutôt que corrigé.
Options écartées¶
lean-cli. Rejeté parce que son initialisation exige un compte, ce qui
rendrait la reproduction dépendante d'un tiers.
Un second moteur écrit dans le dépôt. Rejeté par l'ADR-008 : un moteur écrit par la même personne partage les angles morts du premier.
Des barres à ouverture réelle de Yahoo. Rejeté : l'ouverture de Yahoo n'est pas ajustée de la même façon que la clôture ajustée, et la comparaison ne porterait plus sur la même série de prix. La convention retenue est déclarée et mesurée sur toutes les exécutions.