Aller au contenu principal
← Retour au blog

Pine Script : [1] sur ta.dmi, ta.macd et les autres tuples

📅 2026-10-27
✍️ Strategy Arena
pine script tradingview ta.dmi tuple request.security débogage

Chercher "ta.dmi" "[1]" "tuple" veut presque toujours dire une chose : une ligne Pine Script comme ta.dmi(14, 14)[1] refuse de compiler. Ce court guide donne la règle derrière l'erreur, la correction, et la même correction pour toutes les fonctions intégrées qui renvoient plusieurs valeurs à la fois.

Réponse courte : ta.dmi renvoie un tuple de trois séries. L'opérateur d'historique [1] fonctionne sur une série, pas sur un appel de fonction qui renvoie un tuple. Décomposez d'abord le tuple en variables, puis appliquez [1] à la variable voulue.

L'erreur et la correction

La ligne qui échoue :

//@version=5
indicator("ADX de la bougie précédente")
adxPrev = ta.dmi(14, 14)[1]   // ne compile pas : [1] sur un appel qui renvoie un tuple

La version qui fonctionne :

//@version=5
indicator("ADX de la bougie précédente")
[diPlus, diMinus, adx] = ta.dmi(14, 14)
adxPrev = adx[1]
plot(adx, "ADX")
plot(adxPrev, "ADX, bougie précédente")

Deux détails comptent :

  • L'ordre est fixe : ta.dmi(diLength, adxSmoothing) renvoie [+DI, -DI, ADX]. Si vous écrivez [adx, diPlus, diMinus], le script compile quand même, car les trois sont des nombres, et votre stratégie trade sans bruit sur la mauvaise courbe.
  • Chaque élément reçoit un nom. Si seul l'ADX vous sert, nommez quand même les trois, par exemple [_dip, _dim, adx], et ignorez les deux premiers.

La même règle pour tous les tuples

Plusieurs fonctions ta.* renvoient plus d'une série. La correction est toujours la même : déstructurer, puis indexer.

Fonction Renvoie, dans l'ordre Valeur précédente du dernier élément
ta.dmi(14, 14) +DI, -DI, ADX [p, m, adx] = ta.dmi(14, 14) puis adx[1]
ta.macd(close, 12, 26, 9) ligne MACD, ligne de signal, histogramme [m, s, h] = ta.macd(close, 12, 26, 9) puis h[1]
ta.bb(close, 20, 2) bande centrale, haute, basse [mid, up, lo] = ta.bb(close, 20, 2) puis lo[1]
ta.kc(close, 20, 1.5) canal central, haut, bas [mid, up, lo] = ta.kc(close, 20, 1.5) puis lo[1]
ta.supertrend(3, 10) ligne SuperTrend, direction [st, dir] = ta.supertrend(3, 10) puis dir[1]

Les fonctions qui renvoient une seule série acceptent [1] directement : ta.rsi(close, 14)[1], ta.ema(close, 20)[1] ou ta.stoch(close, high, low, 14)[1] compilent tous.

SuperTrend : que veut dire direction < 0 ?

Avec [st, dir] = ta.supertrend(3, 10), une direction négative signale la tendance haussière (la ligne est sous le prix) et une direction positive la tendance baissière. C'est pourquoi le tracé habituel s'écrit plot(dir < 0 ? st : na, "Tendance haussière"). Un changement de direction s'écrit simplement dir != dir[1], ce qui, là encore, ne marche que sur la variable déstructurée.

request.security avec un tuple

request.security accepte une expression qui renvoie un tuple, donc ceci fonctionne :

[dPlus, dMinus, adxD] = request.security(syminfo.tickerid, "D", ta.dmi(14, 14))

Mais cette ligne ne se comporte pas pareil en direct et dans le backtest : sur l'historique, la valeur journalière n'apparaît qu'une fois la journée finie, alors qu'en temps réel elle change pendant la journée. Pour utiliser la journée précédente, terminée, sans repainting, placez le [1] dans une fonction et demandez-la avec lookahead_on :

//@version=5
indicator("ADX journalier de la veille")
dmiVeille() =>
    [p, m, a] = ta.dmi(14, 14)
    [p[1], m[1], a[1]]

[dPlusVeille, dMinusVeille, adxVeille] = request.security(syminfo.tickerid, "D", dmiVeille(), lookahead = barmerge.lookahead_on)
plot(adxVeille, "ADX journalier, veille")

Le [1] dans la fonction associé à lookahead_on est le schéma classique sans repainting : chaque valeur journalière n'est utilisée qu'une fois la journée clôturée.

Deux erreurs voisines

  • ta.obv(close, volume) ne compile pas en Pine Script v5 : ta.obv est une variable intégrée, pas une fonction. Écrivez ta.obv, ou sa formule ta.cum(math.sign(ta.change(close)) * volume) si vous voulez une autre source.
  • ta.vwap existe à la fois comme variable (ta.vwap, calculée sur hlc3) et comme fonction (ta.vwap(close)). Appelée avec un multiplicateur d'écart type, elle renvoie dans les versions récentes un tuple [vwap, haute, basse], et la règle « déstructurer puis indexer » s'applique de nouveau.

Gardez aussi les fonctions qui dépendent de l'historique, comme ta.dmi ou ta.ema, hors des blocs if : Pine Script le signale par un avertissement, car une fonction sautée sur certaines bougies ne calcule plus la même série. Calculez-la à chaque bougie, puis utilisez le résultat dans la condition.

Une fois que ça compile : vérifier les trades, pas seulement le graphique

Un script qui compile peut encore trader sur la mauvaise courbe, sur une valeur qui repeint, ou sur un filtre calculé sur une partie des bougies seulement. Le Strategy Tester montre le résultat des réglages choisis ; il ne dit pas si la règle tient sur des données jamais regardées.

La Strategy Arena Lab est une application gratuite pour Windows et Linux qui rejoue le Pine pris en charge sur votre PC et compare ses trades un par un à ceux de TradingView. Le sous-ensemble pris en charge comprend les seuils d'ADX et les règles de direction +DI/-DI de ta.dmi, ainsi que ta.mfi et ta.obv (détail sur backtester un Pine Script en local). Elle juge ensuite la stratégie sur une période restée scellée pendant la recherche. Pour d'autres scripts prêts à copier, voir la bibliothèque Pine Script gratuite et le guide Pine Script pour débutant : premier backtest.

Questions fréquentes

Pourquoi ta.dmi(14, 14)[1] ne compile-t-il pas en Pine Script ? ta.dmi renvoie un tuple de trois séries (+DI, -DI, ADX). L'opérateur d'historique [1] s'applique à une série, pas à un appel de fonction qui renvoie un tuple. Déstructurez d'abord, puis indexez la variable : [diPlus, diMinus, adx] = ta.dmi(14, 14), puis adx[1].

Dans quel ordre ta.dmi renvoie-t-il ses valeurs ? ta.dmi(diLength, adxSmoothing) renvoie [+DI, -DI, ADX], dans cet ordre. Intervertir les noms donne une stratégie fausse sans aucune erreur, car les trois sont des nombres.

Comment lire l'ADX journalier de la veille avec request.security sans repainting ? Placez le calcul dans une fonction qui déstructure ta.dmi et renvoie les valeurs [1], puis appelez request.security sur l'unité journalière avec lookahead = barmerge.lookahead_on. Le décalage [1] garantit que la valeur journalière est définitive avant d'être utilisée.

ta.obv(close, volume) est-il valide en Pine Script v5 ? Non. En Pine Script v5, ta.obv est une variable intégrée, pas une fonction : écrivez ta.obv. Sa formule équivalente est ta.cum(math.sign(ta.change(close)) * volume).


Contenu pédagogique sur la syntaxe Pine Script. Strategy Arena ne donne aucun conseil en investissement, et la Lab ne passe aucun ordre.

⚠️ 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.

Cet article vous a plu ? Partagez-le

𝕏 Partager sur X ✈️ Telegram

Transformez un resultat local en preuve durable

Le Lab tourne gratuitement sur votre PC. Les options payantes conservent ou etendent le travail — elles ne changent jamais le verdict.

Obtenir le Lab (gratuit) Builder / Operator Publier un rapport Lab Hall des Lab Reports
TradingView Starter
Choisissez votre parcours de compte. Vérifiez votre stratégie séparément.
Votre premier graphique et votre première alerte de prix ne nécessitent pas le Lab. Une preuve Strategy Arena reste nécessaire avant de faire confiance à une stratégie ou de l'exporter.
L'attribution partenaire concerne les nouveaux utilisateurs et les achats web éligibles. Strategy Arena peut recevoir une commission ; commencer avec un compte gratuit ne demande aucun paiement.
Je n’ai jamais eu de compte · Commencer gratuitement J’ai déjà un compte Vérifier une stratégie
Autres parcours TradingView
Revue Pine sous contrôle de preuve