QuantumAlgo
Accueil›Blog›Indicateurs
Indicateurs

Pine Script v6 : guide de démarrage pour les développeurs d'indicateurs

Pine Script v6 : guide de démarrage pour les développeurs d'indicateurs
◆ LA RÉPONSE COURTE

Pine Script v6 est la version actuelle du langage de TradingView pour les indicateurs et stratégies personnalisés ; chaque script commence par la directive //@version=6 suivie d'une déclaration indicator(). Par rapport à la v5, il impose un typage plus strict, s'exécute plus vite, gère request.security() de façon plus sûre et ajoute de nouvelles fonctions intégrées : la plupart des erreurs de migration sont des incompatibilités de type corrigées par un cast int() ou float().

Qu'est-ce que Pine Script ?

Pine Script est le langage spécifique à TradingView pour écrire des indicateurs techniques et des stratégies personnalisés qui s'exécutent dans le moteur graphique de TradingView. Ce n'est pas un langage de programmation généraliste — chaque script s'exécute une fois par barre sur l'historique du graphique, avec un état géré implicitement à travers la série de barres. Si vous ne l'avez jamais utilisé auparavant, le modèle mental prend environ une journée ; les pièges prennent environ un an.

La version 6, sortie en novembre 2024, est la version de production actuelle. Les versions 4 et 5 fonctionnent toujours mais ne sont plus celles par défaut pour les nouveaux scripts.

Comment écrire votre premier script v6 ?

Chaque Pine Script commence par une directive de version sur la ligne 1. Pour créer un indicateur v6 :

//@version=6 indicator("My First v6 Indicator", overlay=true) // Tracer le cours de clôture sous forme de ligne sur le graphique plot(close, color=color.new(color.aqua, 0), linewidth=2)

Enregistrez ceci dans l'éditeur Pine de TradingView et ajoutez-le au graphique. Vous verrez le prix de clôture tracé sous forme de ligne cyan. Trois points à noter : la directive //@version=6 est obligatoire et doit être la première ligne non vide ; indicator() est la déclaration qui définit si votre script est un indicateur (en superposition ou dans un panneau) ou une stratégie (avec des trades simulés) ; et overlay=true signifie que le script se dessine par-dessus le graphique de prix plutôt que dans un panneau séparé en dessous.

Ce qui a changé entre v5 et v6

1. Système de types plus strict

Le plus grand changement. La v6 impose une vérification de type que la v5 ignorait ou gérait silencieusement. Le cas le plus courant : la v5 vous laissait passer un series int là où un simple int était attendu et le rétrogradait silencieusement. La v6 génère une erreur à la compilation.

Conséquence pratique : lorsque vous migrez un script v5 et qu'il refuse soudain de compiler, l'erreur est presque toujours une incompatibilité de type dans un argument de fonction. La solution consiste généralement à encapsuler la valeur dans int() ou float(), ou à utiliser la fonction intégrée appropriée pour convertir explicitement les types.

2. Exécution plus rapide

La v6 a introduit des optimisations du compilateur qui améliorent sensiblement la vitesse d'exécution de la plupart des scripts. Les gains sont les plus visibles sur les scripts qui utilisent intensivement request.security() (analyse multi-timeframe), la manipulation de tableaux ou les opérations matricielles. Les scripts simples de tracé et de couleur ne verront pas de différence notable.

3. Comportement amélioré de request.security()

La fonction permettant de demander des données d'un autre timeframe bénéficie d'une gestion des arguments plus propre et d'une meilleure protection contre le piège historique du « biais d'anticipation (lookahead bias) ». L'erreur classique des v4/v5 — utiliser lookahead=barmerge.lookahead_on sans en comprendre les conséquences — déclenche désormais un avertissement plus clair lors de la publication du script.

4. Nouvelles fonctions intégrées

Plusieurs fonctions utilitaires qui nécessitaient auparavant une implémentation manuelle sont désormais intégrées. Ajouts notables : formatage de chaînes amélioré, meilleur découpage de matrices, et méthodes pratiques sur le type array qui réduisent le code répétitif.

Quels patterns Pine Script comptent pour les indicateurs SMC ?

Si vous écrivez des indicateurs Smart Money Concepts (order blocks, FVG, détection de BOS, liquidity sweeps), trois patterns Pine Script reviennent sans cesse. Maîtrisez-les et vous pourrez construire l'essentiel de ce que contiennent les suites SMC commerciales.

Pattern 1 : comment détecter les swing highs et swing lows ?

La fondation de tout indicateur de structure de marché. Utilisez ta.pivothigh() et ta.pivotlow() avec une fenêtre de barres gauche/droite :

//@version=6 indicator("Swing Detection", overlay=true) length = input.int(5, "Pivot Length", minval=1) ph = ta.pivothigh(high, length, length) pl = ta.pivotlow(low, length, length) // Tracer des cercles sur les points de swing confirmés plotshape(not na(ph), location=location.abovebar, style=shape.circle, color=color.red, size=size.tiny) plotshape(not na(pl), location=location.belowbar, style=shape.circle, color=color.green, size=size.tiny)

Remarque : les pivots sont confirmés length barres après leur formation. Il s'agit d'une confirmation sans repainting — une fois affiché, le pivot ne bouge plus. La contrepartie est la latence : vous ne savez que le pivot existe que 5 barres plus tard (avec length=5).

Pattern 2 : comment tracer des boxes pour les order blocks et les FVG ?

Utilisez la fonction intégrée box.new() pour dessiner des rectangles. Les boîtes peuvent être mises à jour, prolongées vers la droite à mesure que de nouvelles barres apparaissent, ou supprimées une fois invalidées :

Quantum Algo
//@version=6 indicator("Bullish FVG Detector", overlay=true, max_boxes_count=500) // FVG haussier : plus bas de la barre actuelle > plus haut de la barre d'il y a 2 barres fvg_top = low fvg_bot = high[2] isFVG = fvg_top > fvg_bot if isFVG box.new(left=bar_index[2], top=fvg_top, right=bar_index, bottom=fvg_bot, bgcolor=color.new(color.green, 80), border_color=color.new(color.green, 50))

Deux choses piègent les développeurs débutants ici. Premièrement, max_boxes_count vaut 50 par défaut — augmentez-le pour tout indicateur qui trace des zones sur de longs historiques. Deuxièmement, les boxes sont tracées à la compilation, barre par barre ; si vous dessinez une box à chaque barre sans logique conditionnelle, vous épuiserez vite la limite.

Pattern 3 : suivre un état d'une barre à l'autre (le mot-clé var)

Pine Script exécute votre code une fois par barre, mais vous avez souvent besoin d'un état qui persiste. Le mot-clé var déclare une variable qui s'initialise une seule fois et persiste d'une exécution de barre à l'autre :

//@version=6 indicator("BOS Tracker", overlay=true) // État persistant : suivre le dernier swing high confirmé var float lastSwingHigh = na // Mettre à jour lorsqu'un nouveau pivot haut est confirmé ph = ta.pivothigh(high, 5, 5) if not na(ph) lastSwingHigh := ph // Détecter le BOS : clôture au-dessus du dernier swing high isBOS = not na(lastSwingHigh) and close > lastSwingHigh if isBOS label.new(bar_index, high, "BOS", color=color.new(color.green, 0), textcolor=color.white)

Sans var, la variable serait réinitialisée à chaque barre. Avec var, la valeur persiste. C'est le pattern fondamental de tout indicateur qui doit garder la mémoire d'événements passés — chaque détecteur de BOS, détecteur de MSS, suivi de mitigation et système de vieillissement des order blocks repose sur ce pattern.

Quels pièges guettent les développeurs Pine Script débutants ?

Piège 1 Des indicateurs qui repeignent, superbes en backtest mais perdants en réel. La cause : l'utilisation de lookahead=barmerge.lookahead_on dans les appels request.security(), ou de constructions qui regardent vers le futur comme ta.pivothigh() sans tenir compte du délai de confirmation de la barre. Si les signaux de votre indicateur semblent parfaits sur les données historiques, soupçonnez d'abord le repainting.
Piège 2 Ne pas utiliser format.mintick pour les labels de prix. Une précision décimale codée en dur ne fonctionne plus lorsque le script est appliqué à des instruments aux tailles de tick différentes (BTC vs EURUSD vs ES). Utilisez str.tostring(price, format.mintick) pour tout prix affiché dans les labels ou les alertes.
Piège 3 Dessiner trop d'objets. Pine Script impose des limites strictes au nombre de lignes, boîtes, étiquettes et tableaux qu'un script peut dessiner (50 par défaut, 500 au maximum). Les indicateurs qui dessinent une étiquette à chaque barre ou une boîte pour chaque signal supprimeront silencieusement les objets les plus anciens. Définissez explicitement max_lines_count, max_boxes_count, etc. dans la déclaration indicator() lorsque vous avez besoin de davantage.
Piège 4 Affectation ou réaffectation de variable. Pine utilise = pour la première affectation et := pour la réaffectation. x = 5 à deux endroits crée deux variables de portées distinctes. x := 5 réaffecte une variable existante. Confondez-les et vous passerez une heure à déboguer des valeurs qui ne se mettent pas à jour.

Les briques de base de Pine Script v6 en un coup d'œil

Les fonctions intégrées sur lesquelles s'appuie ce guide, ce qu'elles font et le piège de chacune.
TâcheFonction intégréeCe qu'il faitPoints de vigilance
Swing highs et swing lowsta.pivothigh() / ta.pivotlow()Confirme les pivots à l'aide d'une fenêtre de barres gauche/droiteConfirmé seulement 'length' barres après le pivot
Zones d'order blocks et de FVGbox.new()Dessine des rectangles que vous pouvez prolonger ou supprimer50 boîtes par défaut ; augmentez max_boxes_count (500 max)
État d'une barre à l'autreMot-clé varS'initialise une seule fois et conserve sa valeurRéaffectez avec :=, pas avec =
Données d'un timeframe supérieurrequest.security()Demande des données d'un autre timeframelookahead_on peut divulguer des données futures et provoquer du repaint
Étiquettes de prixstr.tostring(price, format.mintick)Formate les prix selon la taille de tick du symboleDes décimales codées en dur ne fonctionnent pas d'un instrument à l'autre

◆Chaque script doit commencer par la directive //@version=6 sur sa première ligne non vide.

Comment publier un script sur TradingView ?

Une fois votre script fonctionnel, vous pouvez le publier dans la Public Library de TradingView — soit en open source (tout le monde peut lire et copier le code), soit sur invitation uniquement (vous contrôlez l'accès). Les deux options touchent la base d'utilisateurs de TradingView ; les publications open source sont examinées au regard des House Rules et classées dans le circuit des Editors' Picks si leur qualité est élevée.

Les trois House Rules qui piègent le plus souvent les nouveaux auteurs : n'incluez pas de liens promotionnels externes dans les titres ou descriptions de scripts, n'utilisez pas de techniques de repainting sans les signaler, et ne faites pas référence à votre marque dans l'affichage du graphique (pas de logos, pas d'étiquettes en filigrane). Les deux premières sont techniques ; la troisième relève de la modération et fait régulièrement trébucher les éditeurs commerciaux.

Questions fréquentes

Dois-je migrer mes scripts v5 vers v6 ?

Les scripts v5 existants continuent de fonctionner indéfiniment sur TradingView — aucune date de fin n'est imposée. La migration n'est recommandée que si vous avez besoin d'une fonctionnalité propre à v6 (système de types amélioré, meilleures performances, nouvelles fonctions intégrées) ou si vous créez un nouveau script à partir de zéro. Pour les indicateurs publiés, le coût de la migration en vaut rarement la peine, sauf si vous maintenez activement le script.

Quel est le changement incompatible le plus important de Pine Script v6 ?

Le système de types renforcé. v6 impose une vérification de type plus stricte — les conversions implicites qui fonctionnaient silencieusement dans v5 génèreront désormais des erreurs. Le problème de migration le plus courant concerne les incompatibilités de type series-vs-simple dans les arguments de fonction qui passaient auparavant inaperçues.

Est-ce que Pine Script v6 est plus rapide que v5 ?

Oui, en moyenne. Le compilateur v6 optimise de façon plus agressive et dispose d'un moteur d'exécution plus rapide pour la plupart des patterns courants. L'amélioration est surtout visible sur les scripts qui manipulent intensivement des arrays ou qui contiennent de nombreux appels request.security.

Puis-je utiliser v5 et v6 dans le même script ?

Non. La version est déclarée en haut du script (//@version=6 ou //@version=5) et s'applique à l'ensemble du script. Vous ne pouvez pas mélanger les versions au sein d'un seul indicateur ou d'une seule stratégie.

Où puis-je publier des indicateurs Pine Script v6 ?

La bibliothèque publique de TradingView accepte aussi bien les scripts v5 que v6. Les scripts open source sont examinés par les modérateurs de TradingView au regard des House Rules — les mêmes règles s'appliquent quelle que soit la version. Les scripts à code fermé (sur invitation uniquement) sont soumis à un contrôle moins lourd, mais ne peuvent pas être mis en avant dans la bibliothèque publique.

● Open source sur TradingView

Découvrez des indicateurs v6 en production

Le Neural Confluence Engine gratuit de Quantum Algo et l'ensemble de la suite Zeno sont écrits en Pine Script v6. Le script gratuit est open-source — clonez-le, étudiez-le, modifiez-le comme référence d'apprentissage.

Voir sur TradingView →
Utilisation gratuite · Scripts publiés vérifiés par les modérateurs TradingView

Références et guides associés

Guides associés

Pour aller plus loin

Sources faisant autorité

Rédacteur · Quantum Algo

ILY rédige les contenus pédagogiques de trading de Quantum Algo — il décortique les smart money concepts, la structure de marché et la price action en leçons claires et pratiques. Chaque guide est relu par Quant, le fondateur, et chaque idée de trade publiée par Quantum Algo est horodatée afin que chacun puisse la vérifier.

✓ Relu par Quant · fondateur et trader principal