Votre backtest TradingView est-il reproductible ? Nous avons rejoué nos stratégies trade pour trade
Un backtest affiché dans un outil n'est qu'une affirmation. Il devient une mesure le jour où quelqu'un d'autre, avec un autre moteur, retrouve les mêmes trades : mêmes dates, mêmes prix, mêmes frais, même capital final. C'est le vrai test de la reproductibilité, et il est rarement fait.
Le 13 octobre 2026, nous l'avons fait sur nos propres exports. La Lab Strategy Arena calcule ses backtests avec son propre moteur, puis exporte la stratégie en Pine Script. Nous avons collé ces Pine dans un vrai compte TradingView, puis comparé, trade par trade, ce que TradingView a exécuté avec ce que la Lab avait prévu.
Recherche sur données passées, pas un conseil d'investissement.
Le résultat en une table
Graphique BINANCE:BTCUSDT en 4 heures, compte TradingView au plan Basic (gratuit), capital 10 000, frais de 0,10 % par côté.
| Export | Règle | Trades TradingView / Lab | Capital final TradingView / Lab | Écarts |
|---|---|---|---|---|
| 02 | Suit l'ETH (lu par request.security) et le BTC au-dessus de sa SMA 50, stop 5 % |
258 / 258 | 5 755,23 / 5 755,23 | 0 |
| 03 | Calendrier : entrée le lundi 00:00 hors septembre, sortie le jeudi 20:00, stop 6 % | 97 / 97 (+ 1 position ouverte en fin) | 8 872,76 / 8 872,76 | 0 |
| 04 | Tournant du mois : entrée le dernier jour, sortie le 3ᵉ jour, stop 6 % | 26 / 26 | 9 344,72 / 9 344,72 | 0 |
Pour chaque trade : dates d'entrée et de sortie identiques, prix identiques (écart maximal : 0,00), rendement net identique à 5 dix-millionièmes de point près, commission identique, quantité identique.
Précision qui compte : ces stratégies ne gagnent pas. L'export 02 perd 42,45 %, l'export 03 perd 11,27 %, l'export 04 perd 6,55 %. Ce sont des règles de test, choisies pour exercer des mécaniques précises (un second marché, des conditions de calendrier). La question n'était pas « est-ce rentable ? », mais « les deux moteurs disent-ils exactement la même chose ? ». Pour ces trois exports, oui.
Comment c'est mesuré
- Export figé. La Lab exporte le Pine avec un reçu scellé : période exacte, frais, pas de quantité, capital, empreinte sha256 du Pine. Les trades attendus sont écrits à l'avance dans un fichier.
- Collage dans TradingView. Le Pine est collé tel quel dans l'éditeur, ajouté au graphique, puis le script écrit chacun de ses trades dans les Pine Logs, avec une ligne d'en-tête qui reprend l'identifiant de l'export et ses paramètres.
- Comparaison indépendante. Un comparateur écrit à part, sans appeler la Lab, confronte chaque ligne du journal TradingView aux trades attendus : dates, prix au demi-tick près, rendement net, commission à 10 points de base par côté, quantité rejouée, capital final.
Sur l'export 03, une position est encore ouverte à la dernière bougie. TradingView la compte dans son capital avec son gain latent ; la Lab aussi. Les deux donnent 8 872,76.
Ce que le contrôle a trouvé : deux défauts, chez nous
Un contrôle qui ne trouve jamais rien ne prouve rien. Celui-ci a trouvé deux défauts, tous les deux du côté de la Lab.
1. L'ordre stop qui plantait dans TradingView
L'export 01 utilisait un ordre stop d'entrée : acheter si le prix dépasse de 2 % le plus haut de la bougie, objectif 5 %, stop 4 %. Le Pine compilait sans erreur. Puis, au premier remplissage du stop, TradingView s'arrêtait :
Error on bar 1392: In 'array.get()' function. Index 0 is out of bounds, array size is 0.
La barre 1392 est le 20 août 2024, la bougie du premier trade attendu. Aucun trade, aucun journal.
La cause. Le générateur Pine de la Lab écrivait une lecture de tableau protégée par un and :
if saNlLevel >= 0 and array.get(saPend, math.max(saNlLevel, 0))
Dans beaucoup de langages, la seconde moitié d'un and n'est pas évaluée si la première est fausse. Pine v5 évalue les deux côtés. Avec un ordre stop seul, le tableau est vide, et la lecture de l'index 0 arrête le script. Notre simulateur interne ne modélisait pas cette règle de Pine : nos tests miroirs étaient verts, le vrai TradingView ne l'était pas.
La correction. La lecture passe dans un if imbriqué, trois lignes :
bool saNlPend = false
if saNlLevel >= 0
saNlPend := array.get(saPend, saNlLevel)
Avec ces trois lignes, le même Pine, rejoué dans le vrai TradingView, donne 62 trades sur 62 identiques, capital final 12 369,19 des deux côtés. La logique de l'ordre stop était juste ; seul le gabarit Pine était fautif. La version suivante de la Lab (249) corrige le générateur et ajoute un contrôle automatique qui refuse ce motif (une lecture de tableau sous un and ou un or) dans tous les gabarits Pine. Le soir même, l'export officiel de cette version, figé avec son reçu, a tourné dans le vrai TradingView : 62 trades sur 62 identiques, 0 désynchronisation, capital final 12 369,19 des deux côtés. Deux autres exports officiels de la 249, qui lisent eux aussi leur tableau dans un if imbriqué, concordent : des achats par lots soumis à une condition when (44 trades sur 44 identiques) et une allocation selon le régime de marché (519 trades sur 519 identiques). Dans les deux cas, les lots encore ouverts en fin de fenêtre sont identiques aussi, tout comme le capital final.
Ce bug n'était visible qu'au vrai test. Un export déclaré « exportable », scellé dans un reçu, était inutilisable dans TradingView. C'est exactement ce que ce contrôle sert à attraper.
2. Le second marché qui s'arrêtait en silence
L'export 05 reprenait la règle de l'export 02 sur une fenêtre plus longue. TradingView et la Lab sont identiques jusqu'au trade 258. Ensuite, TradingView continue : 167 trades de plus, jusqu'en octobre 2026. La Lab, elle, s'arrêtait.
La cause : pour lire l'ETH, la Lab prenait le jeu de données ETH qui avait le plus de bougies, et ce jeu s'arrêtait le 31 octobre 2025. Après cette date, plus de signal, sans aucun avertissement. TradingView, lui, lit le vrai ETHUSDT jusqu'au bout.
La correction choisit le jeu qui couvre la fenêtre, et l'écrit dans chaque réponse, export et reçu. Rejouée sur les données réelles, elle donne 420 trades, tous identiques au vrai journal TradingView ; les 5 derniers trades de TradingView tombent après la fin des données ETH disponibles dans la Lab, et la Lab le dit maintenant.
Pourquoi cela vous concerne
Si vous utilisez le Strategy Tester de TradingView, trois questions méritent d'être posées à tout backtest qu'on vous montre, y compris le vôtre :
- Les frais sont-ils ceux que vous paierez ? Sur 258 trades, 0,10 % par côté pèse lourd.
- Le script lit-il un autre marché ? Avec
lookahead_onmal employé,request.securitypeut lire le futur. Nos exports écrivent explicitementlookahead_off: le script ne lit que ce que la bougie fermée connaissait. - Un autre moteur retrouve-t-il les mêmes trades ? Si personne n'a vérifié, le chiffre affiché n'engage que le moteur qui l'a calculé.
Reproductible ne veut pas dire rentable. Une stratégie peut être reproduite au centime près et perdre 42 %. Le contrôle de reproductibilité vient avant le verdict, pas à sa place. Pour le verdict lui-même, voyez comment notre juge s'est pris en défaut et a été corrigé et notre méthode de validation des stratégies TradingView.
Faire le contrôle vous-même
- Le Lab Windows gratuit : backtest sur votre PC, export Pine figé avec son reçu, puis rejugement du journal TradingView trade par trade.
- Le Quick Check gratuit : collez une stratégie Pine et voyez ce qu'elle donne face à l'achat-conservation, frais compris.
- Pour coller un Pine, un compte TradingView gratuit suffit. Pas encore de compte ? Créer un compte TradingView gratuit (lien affilié). Lien partenaire : Strategy Arena peut toucher une commission sur un premier abonnement. Cela ne change aucun chiffre ni aucun verdict de cet article.
À retenir
- 3 exports collés dans un vrai TradingView : 258/258, 97/97, 26/26 trades identiques, capital final identique au centime.
- Le contrôle a trouvé un bug réel : l'ordre stop plantait dans TradingView parce que Pine v5 évalue les deux côtés d'un
and. Corrigé, l'export officiel de la version suivante donne 62/62 dans le vrai TradingView, 0 désynchronisation. - Il a aussi trouvé un second marché qui s'arrêtait en silence côté Lab ; corrigé, 420 trades identiques.
- Ces stratégies de test perdent de l'argent : la reproductibilité est un préalable, pas un verdict.
Recherche sur données passées, pas un conseil d'investissement. Aucun résultat passé ne garantit un résultat futur.
⚠️ Avertissement — Cet article est publié à titre informatif et éducatif uniquement. Il ne constitue en aucun cas un conseil en investissement ou une recommandation d'achat/vente. Les performances passées ne préjugent pas des performances futures. Strategy Arena est un simulateur éducatif avec capital virtuel. Faites vos propres recherches avant toute décision d'investissement.