Ce qu'est Pine Script, en bref
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 2025, 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.
Configuration — 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)
// Plot the close price as a line on the chart
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 : le //@version=6 directive 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 (superposition ou panneau) ou une stratégie (avec trades simulés) ; et overlay=true signifie que le script se dessine au-dessus du 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. v6 impose une vérification de type que v5 ignorait ou gérait silencieusement. Le cas le plus courant : v5 vous permettait de passer un series int où un simple int était attendu et le rétrograder silencieusement. v6 génèrera une erreur lors de la compilation.
Conséquence pratique : lorsque vous migrez un script v5 et qu'il refuse soudainement de compiler, l'erreur provient presque toujours d'une incompatibilité de type dans un argument de fonction. La solution consiste généralement à encapsuler la valeur dans int(), float(), ou utilisez la fonction intégrée appropriée pour convertir les types explicitement.
2. Exécution plus rapide
v6 a introduit des optimisations du compilateur qui améliorent matériellement la vitesse d'exécution pour la plupart des scripts. Les améliorations sont plus visibles sur les scripts avec une utilisation intensive request.security() l'utilisation (analyse multi-timeframe), la manipulation de tableaux, ou les opérations matricielles. Les scripts simples de tracé et couleur ne verront pas de différence significative.
3. Amélioration request.security() comportement
La fonction de demande de données depuis un timeframe différent a obtenu une gestion d'arguments plus claire et une meilleure protection contre le piège historique du "biais de lookahead". L'erreur classique v4/v5 — utiliser lookahead=barmerge.lookahead_on sans comprendre les conséquences — déclenche maintenant 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.
Les patterns qui comptent pour les indicateurs SMC
Si vous développez des indicateurs Smart Money Concepts (order blocks, FVGs, détection de BOS, liquidity sweeps), trois modèles Pine Script reviennent constamment. Maîtrisez-les et vous pourrez construire la plupart de ce qui se trouve dans les suites SMC commerciales.
Pattern 1 : détecter les swing highs et 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)
// Plot circles at confirmed swing points
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. Le compromis est la latence : vous ne savez que le pivot existe que 5 barres plus tard (avec length=5).
Pattern 2 : tracer des zones (boxes pour les order blocks et les FVGs)
Utilisez le box.new() intégré pour tracer des rectangles. Les boxes peuvent être mises à jour, étendues vers la droite au fur et à mesure de l'apparition de nouvelles barres, ou supprimées lorsqu'elles sont invalidées :
//@version=6
indicator("Bullish FVG Detector", overlay=true, max_boxes_count=500)
// Bullish FVG: low of current bar > high of bar 2 ago
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 éléments piègent les développeurs débutants ici. Premièrement, max_boxes_count par défaut à 50 — augmentez-le pour tout indicateur qui trace des zones sur de longs historiques. Deuxièmement, les boxes sont tracées à temps de compilation par barre; si vous dessinez une box à chaque barre sans logique conditionnelle, vous épuiserez rapidement la limite.
Pattern 3 : suivre l'état à travers les barres (le var mot-clé)
Pine Script exécute votre code une fois par barre, mais vous avez souvent besoin d'un état qui persiste. Le var le mot-clé déclare une variable qui s'initialise une fois et persiste à travers les exécutions de barres :
//@version=6
indicator("BOS Tracker", overlay=true)
// Persistent state: track the last confirmed swing high
var float lastSwingHigh = na
// Update when a new pivot high is confirmed
ph = ta.pivothigh(high, 5, 5)
if not na(ph)
lastSwingHigh := ph
// Detect BOS: close above the last 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 se réinitialiserait à chaque barre. Avec var, la valeur persiste. C'est le modèle fondamental pour tout indicateur nécessitant une mémoire des événements passés — chaque détecteur de BOS, détecteur de MSS, tracker de mitigation et système de vieillissement d'order block utilise ce modèle en arrière-plan.
Pièges courants qui piègent les développeurs débutants
lookahead=barmerge.lookahead_on dans request.security() appels ou l'utilisation de constructions orientées vers le futur comme ta.pivothigh() sans tenir compte du délai de confirmation de barre. Si les signaux de votre indicateur semblent parfaits sur les données historiques, soupçonnez d'abord le repainting.
format.mintick pour les labels de prix. La précision décimale codée en dur échoue lorsque le script est appliqué à des instruments avec des 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.
max_lines_count, max_boxes_count, etc. dans le indicator() déclaration explicitement lorsque vous en avez besoin.
= pour la première assignation et := pour réassignation. x = 5 à deux endroits crée deux variables de portée locale. x := 5 réassigne une variable existante. Confondez-les et vous passerez une heure à déboguer des valeurs qui ne se mettent pas à jour.
Publier sur TradingView
Une fois que votre script fonctionne, vous pouvez le publier dans la bibliothèque publique de TradingView — soit en open-source (tout le monde peut lire et copier le code) soit en accès privé (vous contrôlez l'accès). Les deux options touchent la base d'utilisateurs de TradingView ; les publications open-source sont examinées selon les règles de la maison et classées dans le pipeline des choix des éditeurs si la qualité est élevée.
Trois règles de base qui piègent le plus souvent les nouveaux auteurs : ne pas inclure de liens promotionnels externes dans les titres ou descriptions de scripts, ne pas utiliser de techniques de repainting sans les divulguer, et ne pas référencer votre marque dans la sortie graphique (pas de logos, pas de labels en filigrane). Les deux premières sont techniques ; la troisième concerne l'application et pose régulièrement problème aux éditeurs commerciaux.
Questions fréquemment posées
Dois-je migrer mes scripts v5 vers v6 ?
Les scripts v5 existants continueront de fonctionner sur TradingView indéfiniment — il n'y a pas de date de fin forcée. La migration n'est recommandée que lorsque vous avez besoin d'une fonctionnalité spécifique à v6 (système de types amélioré, meilleures performances, nouvelles fonctions intégrées) ou lors du démarrage d'un nouveau script. Pour les indicateurs publiés, le coût de migration vaut rarement le bénéfice sauf si vous maintenez activement le script.
Quel est le changement majeur le plus important dans 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 effectue une optimisation plus agressive et dispose d'un runtime d'exécution plus rapide pour la plupart des patterns courants. L'amélioration est particulièrement visible sur les scripts avec une manipulation intensive d'arrays ou de nombreux request.security appels.
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 à la fois les scripts v5 et v6. Les scripts open-source sont examinés par les modérateurs de TradingView selon les règles de base — les mêmes règles s'appliquent quelle que soit la version. Les scripts à source fermée (sur invitation uniquement) ont moins de contrôle mais ne peuvent pas être promus sur la bibliothèque publique.
Voir les indicateurs v6 de production en action
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 →