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

FOR

La boucle FOR en ProBuilder répète un bloc de code un nombre fixe de fois, en comptant vers le haut avec TO ou vers le bas avec DOWNTO. Chaque bloc FOR est fermé par NEXT.

Syntaxe

probuilder
FOR variable = start TO end DO
  // commands repeated on each pass
NEXT

Compter vers le bas :

probuilder
FOR variable = start DOWNTO end DO
  // commands repeated on each pass
NEXT

Comment ça marche

À chaque bar, la boucle initialise la variable compteur à la valeur de départ, exécute le bloc, puis incrémente le compteur de 1 (TO) ou le décrémente de 1 (DOWNTO). Lorsque le compteur dépasse la valeur de fin, l'exécution se poursuit après NEXT. Le mot-clé DO est facultatif dans les versions actuelles de ProRealTime™ mais le conserver améliore la lisibilité.

Le compteur est une variable ordinaire et sert couramment de décalage de bar, donc close[i] dans une boucle lit le cours de clôture i barres en arrière. FOR est donc l'outil standard pour sommer, parcourir ou dessiner sur une plage de barres historiques.

Les boucles peuvent être imbriquées. L'ensemble de la boucle est réexécuté sur chaque bar du graphique, donc une boucle de 100 passages sur un graphique de 10,000 bars exécute un million d'itérations. Gardez les plages aussi petites que le calcul le permet, et utilisez BREAK pour sortir tôt une fois le résultat connu.

Exemples

Exemple 1, Somme des prix d'ouverture sur une plage de bars (Indicateur)

probuilder
a = 0
FOR i = 10 TO 20 DO
  // add the open of each bar in the range to the running total
  a = open[i] + a
NEXT
RETURN a AS "Sum of Opens"

Le compteur i parcourt les bars du décalage 10 au décalage 20, en accumulant chaque prix d'ouverture dans a, qui est renvoyée une fois la boucle terminée.

Exemple 2, Comptage des bars haussiers dans une fenêtre (ProScreener)

probuilder
count = 0
FOR i = 0 TO 19 DO
  // count the bars that closed above their open
  IF close[i] > open[i] THEN
    count = count + 1
  ENDIF
NEXT
SCREENER[count >= 15] (count AS "Bullish bars")

La boucle examine les 20 derniers bars et le screener liste les instruments où au moins 15 d'entre eux ont clôturé plus haut qu'ils n'ont ouvert.

Exemple 3, Parcours arrière avec DOWNTO (ProOrder)

probuilder
// find the most recent bar that matches the 50-bar high
hh = highest[50](high)
found = 50
FOR i = 50 DOWNTO 0 DO
  IF high[i] = hh THEN
    found = i
  ENDIF
NEXT
// enter only if the high was printed within the last 5 bars
IF found <= 5 AND NOT onmarket THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

DOWNTO balaie du décalage le plus ancien vers le bar courant, laissant found au décalage le plus récent où le plus haut sur 50 bars a été établi.

Erreurs et pièges courants

  • NEXT manquant. Chaque FOR doit avoir un NEXT correspondant. Avec des boucles imbriquées, le compilateur peut signaler l'erreur loin de la boucle réellement non fermée, donc associez les paires de l'intérieur vers l'extérieur.
  • Départ au-delà de la fin. A FOR i = 10 TO 5 boucle ne s'exécute jamais, et pas davantage FOR i = 5 DOWNTO 10. Le mot-clé de direction doit correspondre au sens de la plage, sinon le bloc est ignoré silencieusement.
  • Modification du compteur à l'intérieur de la boucle. Réaffecter la variable de boucle à l'intérieur du bloc interfère avec l'incrémentation automatique et peut produire des passages sautés ou des sorties inattendues. Utilisez une variable distincte pour les calculs intermédiaires.
  • Performance sur de grandes plages. La boucle se réexécute à chaque bar, les larges intervalles se multiplient donc vite. Préférez les fonctions intégrées telles que summation ou highest lorsqu'il en existe un, et sortez tôt avec BREAK lorsque la réponse est trouvée.
  • TO, séparateur de plage ascendante dans un en-tête FOR.
  • DOWNTO, séparateur de plage descendante dans un en-tête FOR.
  • NEXT, ferme un bloc FOR et déclenche le passage suivant.
  • DO, mot-clé optionnel terminant un en-tête FOR ou WHILE.
  • BREAK, sort de la boucle courante avant que la plage ne soit épuisée.
  • WHILE, boucle pilotée par une condition pour un nombre de passages inconnu.
  • WEND, ferme un bloc WHILE.
  • BarIndex, compteur de bars utile pour borner les plages de boucle.