Pendant des mois, mon bot a publié des signaux issus d'un croisement de moyennes
mobiles EMA 9/21 filtré par le RSI. C'est la stratégie la plus enseignée du
trading amateur, et elle a l'avantage d'être facile à coder.
Puis je l'ai mesurée correctement, et c'était la mauvaise nouvelle.
Ce qui a changé dans la mesure
Trois erreurs de méthode rendaient les résultats précédents inutilisables.
Le biais du survivant. Je backtestais sur les paires qui existent
aujourd'hui. Or les cryptos qui ont disparu entre-temps sont précisément
celles qui se sont effondrées. Mesurer une stratégie sur les seules survivantes
revient à demander aux gagnants d'un casino s'ils ont gagné. En restreignant à
18 paires non contaminées, la performance s'est effondrée.
Le regard vers le futur. Évaluer la bougie k d'un DataFrame complet ne
donne pas le même résultat qu'évaluer la dernière bougie d'un DataFrame tronqué
à k, si le moindre indicateur regarde en avant. La propriété à tester est
simple, et elle mérite son propre test automatisé :
complet = detect_signal(df, pair, at_index=k)
tronque = detect_signal(df.iloc[:k + 1].reset_index(drop=True), pair)
assert (complet is None) == (tronque is None)
L'absence de témoin. Une stratégie positive sur 6 ans n'a rien démontré
tant qu'on ne l'a pas comparée à un tirage aléatoire de même densité — même
nombre de trades, mêmes durées de détention, mêmes paires. Sans ce témoin, on
mesure le marché, pas la stratégie.
Le résultat
Entre -24,9 % et +16,9 % par an selon les réglages, majoritairement négatif.
La stratégie n'était pas neutre : c'était la jambe perdante du système.
Elle a été désactivée. Les dix signaux qu'elle avait déjà émis sont restés en
base, et l'étiquette affichée à leur sujet a été changée en « moteur retiré » —
parce que continuer à afficher « haute confiance » sur les signaux d'un moteur
qu'on vient de désavouer serait un mensonge rétroactif.
Ce que j'en retiens
Un backtest positif est une hypothèse, pas une preuve. La question utile n'est
jamais « est-ce que ça gagne ? » mais « est-ce que ça gagne plus que le
hasard, à contraintes égales ? ». Les stratégies qui survivent à cette
question sont beaucoup moins nombreuses qu'on ne l'espère.
Le plus dur n'a pas été de coder le test. Ça a été d'accepter son résultat sur
du code que j'avais déjà mis en production.
Ce billet documente un projet réel : un bot de signaux crypto entièrement automatisé, dont le code, les backtests et les résultats — gagnants comme perdants — sont publics. Le détail est sur le site, et les signaux sont publiés en clair sur un canal Telegram ouvert.
Top comments (0)