Rejoignez-nous
Instructions/probuilder · probacktest · proorder · proscreener

NEXT

NEXT ferme un bloc de boucle FOR dans ProBuilder, en renvoyant l'exécution à l'en-tête de la boucle jusqu'à ce que le compteur dépasse sa valeur de fin. Chaque FOR requiert un NEXT.

Syntaxe

probuilder
FOR variable = start TO end DO
  // statements executed on each iteration
NEXT

Comment ça marche

Une boucle FOR dans ProBuilder se compose d'un en-tête, d'un corps et du mot-clé de fermeture NEXT. L'en-tête affecte une valeur de départ à la variable compteur et déclare la valeur de fin avec TO pour les boucles croissantes ou DOWNTO pour les boucles décroissantes. Tout ce qui se trouve entre DO et NEXT forme le corps.

Chaque fois que l'exécution atteint NEXT, le compteur est incrémenté (ou décrémenté avec DOWNTO) puis comparé à la valeur de fin. Tant que le compteur reste dans la plage, l'exécution repart en haut du corps de boucle. Lorsqu'il a dépassé la valeur de fin, l'exécution continue à la première instruction après NEXT. Les deux bornes sont incluses, donc FOR i = 10 TO 20 effectue onze itérations.

NEXT est purement structurel, il ne prend aucun argument et ne produit aucune valeur. Chaque FOR doit être fermé par exactement un NEXT, et les boucles imbriquées requièrent un NEXT par FOR, en fermant de la boucle la plus interne vers l'extérieur. Pour quitter une boucle avant que le compteur ne soit épuisé, utilisez BREAK, qui transfère le contrôle à l'instruction suivant le NEXT correspondant.

Comme le script entier s'exécute déjà une fois par bar, les boucles délimitées par NEXT servent généralement à des calculs sur une plage de périodes ou d'indices de tableau à l'intérieur d'un seul bar, et non à parcourir le temps.

Exemples

Exemple 1, Somme de moyennes sur une plage de périodes (Indicateur)

probuilder
a = 0
FOR i = 10 TO 20 DO
  // accumulate the moving average of the open for each period length
  a = average[i](open) + a
NEXT
RETURN a AS "compound averages direction"

La boucle s'exécute avec i à 10 jusqu'à 20. NEXT incrémente le compteur et répète le corps, et après la dernière itération la somme accumulée est renvoyée.

Exemple 2, Compter les bars haussiers dans une fenêtre (ProOrder)

probuilder
// Count how many of the last 10 bars closed up
bullCount = 0
FOR k = 0 TO 9 DO
  IF close[k] > open[k] THEN
    bullCount = bullCount + 1
  ENDIF
NEXT

IF bullCount >= 7 AND NOT onmarket THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

Le corps situé entre DO et NEXT examine un bar historique par itération. Une fois que NEXT a terminé le dixième passage, le compteur alimente la condition d'entrée.

Exemple 3, Moyenne d'une plage de clôtures (ProScreener)

probuilder
// Mean close of the last 15 bars, computed manually
total = 0
FOR n = 0 TO 14 DO
  total = total + close[n]
NEXT
meanClose = total / 15

SCREENER[close > meanClose * 1.02] (meanClose AS "15-bar mean")

NEXT ferme la boucle d'accumulation, après quoi la moyenne est comparée à la clôture courante pour filtrer les instruments.

Erreurs et pièges courants

  • NEXT manquant ou en trop. Chaque FOR a besoin d'exactement un NEXT. Dans les boucles imbriquées, le compilateur associe chaque NEXT au FOR ouvert le plus proche, de sorte qu'un NEXT manquant produit souvent une erreur à plusieurs lignes de la véritable faute.
  • Modifier le compteur à l'intérieur du corps. Réaffecter la variable de boucle entre DO et NEXT modifie le nombre d'itérations restantes et peut créer des boucles qui ne se terminent jamais à l'intérieur du bar. Préférez BREAK pour une sortie anticipée.
  • Mauvais mot-clé de direction. FOR i = 20 TO 10 n'entre jamais dans le corps parce que le compteur dépasse déjà la valeur finale. Les plages décroissantes exigent DOWNTO au lieu de TO.
  • Boucles lourdes sur chaque bar. L'intégralité du bloc FOR...NEXT s'exécute une fois par bar. De larges intervalles combinés à des appels coûteux tels que average[i] multiplient le temps de calcul sur tout le graphique.
  • FOR, ouvre la boucle comptée que NEXT ferme.
  • TO, déclare la valeur de fin croissante du compteur de boucle.
  • DOWNTO, déclare une plage de boucle décroissante.
  • DO, sépare l'en-tête de la boucle de son corps.
  • BREAK, sort de la boucle avant que le compteur ne soit épuisé.
  • WHILE, alternative de boucle pilotée par une condition.
  • WEND, ferme une boucle WHILE, l'équivalent de NEXT.