Little
Bird Trading

Pine Script : clôture de barre ou intrabar, repainting, alertes et calc_on_every_tick

3 min de lecture · Mis à jour le

Un script Pine Script qui paraît propre sur l'historique peut émettre en direct des signaux qui disparaissent ensuite. Presque tous les cas se résument à une question : le script travaille-t-il sur la barre clôturée ou sur la barre encore en formation ?

Ce guide couvre chaque réglage qui le contrôle et ce que j'utilise pour les alertes de niveaux.

Barres historiques et barre en temps réel

Sur l'historique, Pine exécute votre script une fois par barre, à sa clôture. Sur la barre en cours, il s'exécute à chaque mise à jour de prix. Une condition comme close > level peut être vraie à 10:01, fausse à 10:03 et de nouveau vraie à 10:04. L'historique ne garde que la dernière réponse. Cet écart, c'est ce que les traders appellent le repainting.

barstate.isconfirmed

barstate.isconfirmed n'est vrai que sur la dernière mise à jour d'une barre, quand elle se clôture. L'ajouter à une condition fait se comporter la barre en cours comme l'historique :

crossUp = ta.crossover(close, level) and barstate.isconfirmed
plotshape(crossUp, style=shape.triangleup, location=location.belowbar)
alertcondition(crossUp, "Close above level")

Le prix à payer, c'est la vitesse. Vous recevez le signal à la clôture de la barre, soit une barre entière plus tard sur une unité de temps lente.

Fréquence des alertes

Quand vous créez une alerte, TradingView demande à quelle fréquence elle peut se déclencher :

  • Once Per Bar Close : ne se déclenche que lorsque la barre se clôture avec la condition vraie. C'est cohérent avec le backtest.
  • Once Per Bar : se déclenche la première fois que la condition devient vraie dans la barre, même si la barre se clôture dans l'autre sens.
  • Once Per Minute et Only Once : des limites sur le nombre de déclenchements.

Pour les alertes de niveaux, j'utilise Once Per Bar Close sur un graphique de 1 ou 5 minutes. Une mèche qui traverse un niveau et se referme à l'intérieur ne déclenche rien, ce qui élimine la plupart des fausses cassures.

Stratégies : calc_on_every_tick et process_orders_on_close

Par défaut, une stratégie s'exécute à la clôture de barre, aussi bien sur l'historique que sur les barres en direct. Deux réglages changent cela :

  • calc_on_every_tick=true exécute la stratégie à chaque mise à jour en direct. L'historique ne peut pas le faire, si bien que les trades réels commencent à différer du backtest.
  • process_orders_on_close=true exécute les ordres à la clôture de la barre du signal. Par défaut, ils sont exécutés à l'ouverture de la barre suivante. Cela convient à une sortie basée sur la clôture, mais peut embellir les entrées.

Laissez les deux désactivés tant que la stratégie ne fonctionne pas à la clôture de barre. Le guide indicateur ou stratégie couvre le reste des hypothèses du Strategy Tester.

Bar Magnifier

Sur l'historique, une stratégie ne connaît que l'ouverture, le plus haut, le plus bas et la clôture de chaque barre. Si votre stop et votre objectif se trouvent tous les deux dans une même barre, elle doit deviner lequel a été touché en premier. use_bar_magnifier=true utilise des données d'une unité de temps inférieure pour trancher, sur les offres payantes de TradingView. Activez-le avant de vous fier à un stop et un objectif serrés.

request.security et unités de temps supérieures

Importer le plus haut journalier dans un graphique de 5 minutes est une source fréquente de repainting. Sur l'historique, la barre journalière est déjà complète, donc le script voit le plus haut final dès la première barre de la journée. En direct, le plus haut continue de bouger. Demandez la valeur précédente, terminée :

prevHigh = request.security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on)

Le [1] avec lookahead_on donne le plus haut d'hier sur chaque barre d'aujourd'hui, sur l'historique comme en direct.

Une checklist

  • Les signaux utilisent barstate.isconfirmed ou l'alerte est en Once Per Bar Close.
  • Les valeurs d'unité de temps supérieure utilisent [1] avec lookahead_on.
  • La stratégie s'exécute à la clôture de barre, avec calc_on_every_tick désactivé.
  • Bar Magnifier est activé quand stops et objectifs sont proches l'un de l'autre.
  • Vous comparez une semaine d'alertes en direct avec le backtest avant de la trader.

Des niveaux qui ne bougent pas

Les niveaux de mes Plans de trading sont fixés avant la séance et restent figés toute la journée : un script qui les trace n'a donc rien à repeindre. Le guide des niveaux Pine Script montre comment les tracer sur TradingView.

FAQ

Quelle est la différence entre clôture de barre et intrabar dans Pine Script ?

La clôture de barre signifie que le script agit une seule fois, quand la barre est terminée. Intrabar signifie qu'il agit à chaque mise à jour de prix dans la barre, si bien qu'un signal peut apparaître et disparaître avant la clôture.

Comment empêcher une alerte Pine Script de faire du repainting ?

Réglez l'alerte sur Once Per Bar Close, ou ajoutez barstate.isconfirmed à la condition. Pour les données d'une unité de temps supérieure, utilisez la valeur de la barre précédente avec lookahead_on.

Un backtest de stratégie utilise-t-il les prix intrabar ?

Seulement pour les exécutions à l'intérieur d'une barre, et seulement avec Bar Magnifier activé. Les signaux sur l'historique sont calculés à la clôture de chaque barre.

Sources

  • Manuel utilisateur Pine Script TradingView : modèle d'exécution, repainting, alertes
  • Centre d'aide TradingView : Bar Magnifier

Contenu éducatif uniquement. Ceci n'est pas un conseil en investissement.