Jetzt beitreten
Befehle/probuilder · probacktest · proorder · proscreener

BREAK

BREAK verlässt in ProBuilder eine FOR- oder WHILE-Schleife sofort. Verwenden Sie es, um die Iteration zu beenden, sobald eine Bedingung erfüllt ist, und die verbleibenden Schleifendurchläufe zu überspringen.

Syntax

probuilder
BREAK

So funktioniert es

Wenn die Ausführung eine BREAK-Anweisung innerhalb einer Schleife erreicht, endet die Schleife sofort. Es laufen keine weiteren Iterationen, der Rest der aktuellen Iteration wird übersprungen, und die Ausführung setzt bei der ersten Anweisung nach dem schließenden Schlüsselwort der Schleife fort, NEXT für eine FOR-Schleife oder WEND für eine WHILE-Schleife.

BREAK wird fast immer in einen IF-Block eingeschlossen, da ein unbedingtes BREAK den Schleifenkörper höchstens einmal ausführen ließe. Das Muster lautet: iterieren, eine Abbruchbedingung prüfen und vorzeitig aussteigen, wenn ein Weitermachen sinnlos wäre. Für die Performance ist das in Skripten wichtig, die über viele Bars zurückscannen, denn der Scan kann beim ersten Bar stoppen, der die Frage beantwortet, statt immer den vollen Bereich durchzulaufen.

Bei verschachtelten Schleifen verlässt BREAK nur die innerste Schleife, die es enthält. Auch eine äußere Schleife zu verlassen erfordert eine Flag-Variable, die die äußere Schleife prüft, oder eine Umstrukturierung der Logik.

BREAK ist nur innerhalb von FOR- und WHILE-Schleifen sinnvoll. Es an einer anderen Stelle zu platzieren, zum Beispiel direkt in einem einfachen IF-Block auf der obersten Ebene eines Skripts, ist ein Kompilierungsfehler.

Beispiele

Beispiel 1, Eine Serie fallender Bars zählen (Indikator)

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

Die Schleife zählt aufeinanderfolgende Bars, die unter ihrer Eröffnung geschlossen haben, und scannt bis zu 20 Bars zurück. Der erste Bar, der den Test nicht erfüllt, löst BREAK aus, sodass der Zähler eine ununterbrochene Serie und nicht eine Gesamtzahl wiedergibt.

Beispiel 2, Das jüngste Swing High finden (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

Der Rückwärtsscan stoppt beim ersten passenden Swing High. Ohne BREAK würde die Schleife weiterlaufen und das Ergebnis mit älteren, weniger relevanten Swings überschreiben.

Beispiel 3, Eine Suche mit WHILE begrenzen (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")

Die WHILE-Schleife sucht bis zu 50 Bars zurück nach einer Volumenspitze, und BREAK beendet die Suche, sobald eine gefunden wurde.

Häufige Fehler und Stolperfallen

  • Nur innerhalb von Schleifen gültig. BREAK außerhalb eines FOR- oder WHILE-Körpers lässt sich nicht kompilieren. Es kann nicht verwendet werden, um den Rest der Berechnung eines Bars zu überspringen; strukturieren Sie stattdessen mit IF-Blöcken um.
  • Nur die innerste Schleife wird verlassen. In verschachtelten Schleifen verlässt BREAK die unmittelbar umgebende Schleife. Mehrere Ebenen zu verlassen erfordert ein Flag, das von der äußeren Schleife geprüft wird.
  • Zustand nach der Schleife. Variablen behalten die Werte, die sie hatten, als BREAK ausgelöst wurde, und der FOR-Zähler erreicht seinen Endwert nicht. Gehen Sie nach einem vorzeitigen Ausstieg nicht davon aus, dass der Zähler der Schleifengrenze entspricht.
  • Kosten für die Lesbarkeit. Mehrere über eine Schleife verstreute BREAK-Anweisungen machen den Kontrollfluss schwer nachvollziehbar. Bevorzugen Sie eine einzige, klar kommentierte Ausstiegsbedingung.
  • FOR, Zählschleife, die BREAK vorzeitig verlassen kann.
  • WHILE, bedingte Schleife, die BREAK vorzeitig verlassen kann.
  • DO, optionales Schlüsselwort, das einen Schleifenkörper eröffnet.
  • NEXT, schließt eine FOR-Schleife; nach einem BREAK wird die Ausführung dahinter fortgesetzt.
  • TO, aufsteigender Bereichsspezifizierer in FOR-Schleifen.
  • DOWNTO, absteigender Bereichsspezifizierer in FOR-Schleifen.
  • WEND, schließt eine WHILE-Schleife; nach einem BREAK wird die Ausführung dahinter fortgesetzt.
  • IF, Bedingungsblock, der ein BREAK normalerweise umschließt.