Aller au contenu

Pourquoi TradingView affiche un trade de plus que votre backtester

6 min de lecture

Le trade en trop, c’est le dernier : une position encore ouverte quand les données s’arrêtent, que TradingView comptabilise comme un trade fermé, au cours de clôture de la dernière barre. Ce qu’est cette ligne, pourquoi elle fait bouger vos statistiques, et comment PineForge la comptabilise.

Votre stratégie affiche un trade de plus sur TradingView que dans votre backtester. Ce trade en trop, c’est le dernier de la liste. Son signal de sortie indique Open, ou bien il est vide, et son prix de sortie n’est autre que la clôture de la dernière barre.

Aucun des deux outils ne se trompe. Cette ligne, c’est la façon dont TradingView présente une position encore ouverte au moment où les données s’arrêtent, et un backtester qui l’omet se retrouve en désaccord avec TradingView sur le nombre de trades, le profit net et toutes les statistiques qui en découlent.

Ce que TradingView comptabilise

Un backtest s’arrête à sa dernière barre, et rien n’oblige la stratégie à y avoir soldé sa position. Le rapport de TradingView ne fait pas disparaître pour autant la position ouverte : il la comptabilise comme un trade clôturé, avec pour sortie la dernière barre de la plage, à son cours de clôture, et la traite comme n’importe quel autre trade. PineForge émule cette règle, que décrit l’en-tête du moteur.

En voici un exemple tiré du corpus ouvert. stats-eventrades-zero-pnl-count-01 achète une unité sur la barre de minuit UTC, exécutée à l’ouverture de la barre suivante, puis la revend avec un ordre limite à ce même prix d’entrée. Sa dernière position longue n’est jamais revenue à ce prix. Voici la liste de trades de TradingView (heures dans le fuseau Asia/Taipei : 08:00 correspond donc à minuit UTC) :

Trade number,Type,Date and time,Signal,Price USDT,...,Net PnL USDT,...
140,Exit long,2026-05-01 08:00,,2261.44,...,-2525.12,...
140,Entry long,2025-08-25 08:15,even-trade entry,4786.56,...,-2525.12,...

Regardez la ligne de sortie : aucun signal, et un prix qui n’est rien d’autre que la clôture de la dernière barre. La stratégie n’a jamais vendu. Ces −2 525,12 représentent une perte latente sur une position détenue depuis huit mois ; ils figurent pourtant dans la liste de trades et dans le profit net comme s’ils avaient été réalisés.

Cette ligne s’écrit de deux façons. L’export CSV natif de la liste de trades de TradingView inscrit Open dans la colonne Signal (c’était le cas du précédent export de cette stratégie). Le rapport de deep backtesting de TradingView laisse la colonne vide, et c’est aussi le cas dans la plupart des fichiers du corpus aujourd’hui, comme ci-dessus (script de notation).

Pourquoi une seule ligne compte

Sur une stratégie lente ou une plage courte, la position ouverte peut représenter l’essentiel du résultat. Sur des graphiques journaliers, c’est souvent le seul trade de la fenêtre : avant que PineForge ne comptabilise cette ligne, il n’affichait aucun trade sur ce type de stratégie, là où TradingView en affichait un. Tous les chiffres calculés à partir de la liste de trades bougent avec elle : le nombre de trades, le taux de réussite, le profit net, le trade moyen.

Ce que PineForge comptabilise

Le moteur n’exportait auparavant que les trades clôturés. Il comptabilise désormais la même ligne que TradingView : une par lot encore ouvert après la dernière barre, datée de cette barre, au cours de clôture arrondi au tick, avec commission mais sans slippage, car cette ligne « est une valorisation, pas un ordre » (guide du moteur). La liste de trades du moteur pour cette stratégie signale la ligne dans une dernière colonne :

Trade #,Type,Date and time,Price,Qty,Net PnL,...,Engine range-end
140,Exit long,2026-05-01 00:00,2261.440000,1,-2525.120000,...,open

Même barre, même prix et même perte que chez TradingView, avec open pour signaler qu’il s’agit d’une valorisation. Le script, lui, ne voit jamais cette ligne : pendant l’exécution, la position est toujours ouverte, donc la variable Pine strategy.closedtrades ne la compte pas, et la documentation du moteur recommande d’écarter cette ligne si vous voulez retrouver la valeur de cette variable (correspondance Pine vers natif).

C’est la fin des données qui fixe le prix

La valorisation est comptabilisée sur la dernière barre du backtester : cette barre doit donc être aussi la dernière barre de TradingView. La plage de TradingView se termine sur la dernière barre ouverte au plus tard à minuit UTC à la date de fin (harnais). Le fichier de prix du corpus va plus loin, jusqu’au 4 mai. Avec le fichier entier, le moteur comptabiliserait le trade 140 sur la dernière barre de ce jour-là, à 2 365,09, soit environ 4,6 % au-dessus des 2 261,44 de TradingView (même fichier) : c’est pourquoi le harnais coupe les données à la dernière barre de TradingView avant l’exécution.

Le script de notation du moteur apparie ensuite les deux lignes comme n’importe quel autre trade, et note leur prix de sortie et leur P&L de la même façon. Ce n’est que lorsque TradingView écrit Open sur cette ligne qu’il traite la paire comme une valorisation face à une autre : appariée et comptée, entrée vérifiée, sortie et P&L exclus de la note, et concordance du P&L rapportée au centime près (script de notation).

29 stratégies, un trade de plus

Quand nous avons régénéré les listes de trades du corpus avec le moteur actuel, 29 de ses 312 stratégies ont changé de nombre de trades. Pour 26 d’entre elles, l’un des nouveaux trades est cette ligne. Les trois autres ont gagné un trade clôturé parce que les listes de TradingView elles-mêmes avaient été mises à jour pour inclure les trades jusqu’à la fin de la journée.

L’ancienne liste de stats-eventrades-zero-pnl-count-01 avait pourtant obtenu le meilleur niveau du script de notation. Celui-ci rogne les trades aux deux bords de la fenêtre couverte par les deux listes, pour qu’un trade en trop au début ou à la fin ne puisse pas faire échouer une stratégie. Ici, ce rognage a masqué un trade manquant : l’ancien rapport notait 139 trades de chaque côté, alors que TradingView en listait 140 ; le nouveau en note 140 contre 140.

Pour 131 des 312 stratégies du corpus, la liste de trades de PineForge se termine sur une position encore ouverte, soit plus de quatre sur dix (README du corpus).

Ce que cela change pour vous

  • Si TradingView affiche un trade de plus que votre backtester et que ce trade en trop est le dernier, cherchez une position encore ouverte à la fin. C’est le comportement normal de TradingView.
  • Le profit net et le taux de réussite de TradingView incluent cette position, valorisée à la dernière clôture. Pour ne garder que les résultats réalisés, écartez le dernier trade si son signal de sortie est Open ou vide ; dans la liste de PineForge, c’est celui qui est marqué open.
  • Avant de comparer deux backtests, faites-les s’arrêter sur la même barre : la dernière ouverte au plus tard à minuit UTC à la date de fin de TradingView.

Mesuré le 2026-10-02 avec le moteur et le codegen PineForge 1.0.1, sortis ce jour-là.

Pour aller plus loin