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

BREAK

BREAK sort immédiatement d'une boucle FOR ou WHILE dans ProBuilder. Utilisez-le pour arrêter l'itération dès qu'une condition est remplie et ignorer les passages restants dans la boucle.

Syntaxe

probuilder
BREAK

Comment ça marche

Lorsque l'exécution atteint une instruction BREAK à l'intérieur d'une boucle, la boucle s'arrête immédiatement. Aucune itération supplémentaire n'est exécutée, le reste de l'itération en cours est ignoré, et l'exécution reprend à la première instruction après le mot-clé de fermeture de la boucle, NEXT pour une boucle FOR ou WEND pour une boucle WHILE.

BREAK est presque toujours encadré par un bloc IF, car un BREAK inconditionnel ferait exécuter le corps de la boucle au plus une fois. Le schéma est le suivant : itérer, tester une condition d'arrêt et sortir par anticipation lorsque continuer serait inutile. Cela compte pour la performance dans les scripts qui balaient en arrière de nombreux bars, car le balayage peut s'arrêter au premier bar qui répond à la question au lieu de parcourir systématiquement toute la plage.

Avec des boucles imbriquées, BREAK ne quitte que la boucle la plus interne qui le contient. Quitter également une boucle extérieure nécessite une variable drapeau que la boucle extérieure vérifie, ou une restructuration de la logique.

BREAK n'a de sens qu'à l'intérieur des boucles FOR et WHILE. Le placer ailleurs, par exemple directement dans un simple bloc IF au niveau supérieur d'un script, est une erreur de compilation.

Exemples

Exemple 1, Compter une série de bars baissiers (Indicateur)

probuilder
Value = 0
FOR i = 1 TO 20 DO
  IF (Close[i] < Open[i]) THEN
    Value = Value + 1
  ELSE
    BREAK // stop at the first bar that is not a down bar
  ENDIF
NEXT
RETURN Value

La boucle compte les bars consécutifs qui ont clôturé sous leur ouverture, en balayant jusqu'à 20 bars en arrière. Le premier bar qui échoue au test déclenche BREAK, de sorte que le compte reflète une série ininterrompue plutôt qu'un total.

Exemple 2, Trouver le dernier swing high (ProOrder)

probuilder
DEFPARAM CumulateOrders = false

swingHigh = 0
FOR i = 2 TO 100 DO
  // A local swing high: higher than its two neighbours
  IF high[i] > high[i + 1] AND high[i] > high[i - 1] THEN
    swingHigh = high[i]
    BREAK // nearest swing found, no need to scan older bars
  ENDIF
NEXT

// Enter long on a break of that level
IF swingHigh > 0 AND close CROSSES OVER swingHigh THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

SET STOP %LOSS 2

Le balayage en arrière s'arrête au premier swing high qualifiant. Sans BREAK, la boucle continuerait et écraserait le résultat avec des swings plus anciens et moins pertinents.

Exemple 3, Limiter une recherche avec WHILE (ProScreener)

probuilder
// Walk back until a bar with double the average volume is found
avgVol = Average[20](volume)
i = 1
found = 0
WHILE i <= 50 DO
  IF volume[i] > 2 * avgVol THEN
    found = i
    BREAK // record the distance and stop searching
  ENDIF
  i = i + 1
WEND

// Keep instruments with a volume spike in the last 10 bars
SCREENER[found > 0 AND found <= 10] (found AS "Bars since spike")

La boucle WHILE recherche un pic de volume jusqu'à 50 bars en arrière, et BREAK met fin à la recherche dès qu'un pic est trouvé.

Erreurs et pièges courants

  • Valide uniquement à l'intérieur des boucles. BREAK en dehors d'un corps FOR ou WHILE ne compile pas. Il ne peut pas servir à ignorer le reste du calcul d'un bar ; restructurez plutôt avec des blocs IF.
  • Seule la boucle la plus interne est quittée. Dans des boucles imbriquées, BREAK quitte la boucle qui l'entoure immédiatement. Sortir de plusieurs niveaux nécessite un drapeau vérifié par la boucle extérieure.
  • État après la boucle. Les variables conservent les valeurs qu'elles avaient au déclenchement de BREAK, et le compteur FOR n'atteint pas sa valeur finale. Ne supposez pas que le compteur est égal à la borne de la boucle après une sortie anticipée.
  • Coût en lisibilité. Plusieurs instructions BREAK dispersées dans une même boucle rendent le flux de contrôle difficile à suivre. Préférez une seule condition de sortie, clairement commentée.
  • FOR, boucle comptée dont BREAK peut sortir par anticipation.
  • WHILE, boucle conditionnelle dont BREAK peut sortir par anticipation.
  • DO, mot-clé optionnel ouvrant le corps d'une boucle.
  • NEXT, ferme une boucle FOR ; l'exécution reprend après elle à la suite d'un BREAK.
  • TO, spécificateur de plage croissante dans les boucles FOR.
  • DOWNTO, spécificateur de plage décroissante dans les boucles FOR.
  • WEND, ferme une boucle WHILE ; l'exécution reprend après elle à la suite d'un BREAK.
  • IF, bloc conditionnel qui encadre normalement un BREAK.