Jetzt beitreten
Befehle/probuilder · probacktest · proorder · proscreener

DO

DO markiert in ProBuilder den Beginn des Schleifenrumpfs in FOR- und WHILE-Anweisungen. Es ist optional, führt keine Operation aus und dient dazu, Schleifen lesbar zu machen.

Syntax

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

In einer WHILE-Schleife:

probuilder
WHILE condition DO
  // actions executed while the condition is true
WEND

So funktioniert es

DO ist ein strukturelles Schlüsselwort. Es steht zwischen der Schleifendeklaration, entweder FOR variable = start TO end oder WHILE condition, und den Anweisungen, die bei jeder Iteration laufen. Der Compiler akzeptiert Schleifen mit und ohne es; die Ausführung ist in beiden Fällen identisch. Sein Zweck ist die Lesbarkeit, indem es genau markiert, wo der Schleifenkopf endet und der Körper beginnt.

In einer FOR-Schleife läuft der Rumpf zwischen DO und NEXT einmal für jeden Wert des Zählers, aufwärts mit TO oder abwärts mit DOWNTO. In einer WHILE-Schleife wiederholt sich der Rumpf zwischen DO und WEND so lange, wie die Bedingung wahr ergibt, wobei die Bedingung vor jedem Durchlauf erneut geprüft wird.

Schleifen werden auf jedem Bar des Charts oder des Backtests vollständig ausgeführt, daher führt eine Schleife, die Hunderte von Bars durchsucht, diese Suche auf jedem neuen Bar erneut aus. BREAK verlässt die umgebende Schleife vorzeitig, was die Anzahl der Iterationen niedrig hält, wenn die verbleibenden Durchläufe das Ergebnis nicht mehr ändern können.

Beispiele

Beispiel 1, Aufeinanderfolgende Abwärts-Bars zählen (Indikator)

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

Die Schleife geht die vorherigen 20 Bars zurück und zählt, wie viele unter ihrer Eröffnung geschlossen haben, und hält beim ersten Bar an, der das nicht tat. DO trennt den Schleifenkopf von der Zähllogik.

Beispiel 2, Aufeinanderfolgende Aufwärts-Bars mit einer WHILE-Schleife (ProScreener)

probuilder
i = 0
count = 0
// Walk backward while each bar closed above its open
WHILE (close[i] > open[i]) AND (i < 100) DO
  count = count + 1
  i = i + 1
WEND
SCREENER[count >= 3] (count AS "up bars in a row")

Die WHILE-Schleife zählt die aktuelle Serie von Aufwärts-Bars, begrenzt auf 100 Iterationen, und der Screener findet Instrumente mit einer Serie von drei oder mehr.

Beispiel 3, Filter für Volatilitätsspitzen (ProBacktest)

probuilder
total = 0
// Sum the range of the previous 10 completed bars
FOR i = 1 TO 10 DO
  total = total + Range[i]
NEXT
avgRange = total / 10

// Enter when the current bar's range doubles the recent average
IF Range > 2 * avgRange AND NOT ONMARKET THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

Eine FOR-Schleife mit DO akkumuliert die Spannen der letzten zehn Bars, um einen Durchschnitt zu bilden, der dann die Einstiegsbedingung steuert.

Häufige Fehler und Stolperfallen

  • Falsches Abschluss-Schlüsselwort. FOR-Schleifen enden mit NEXT und WHILE-Schleifen enden mit WEND. FOR mit WEND oder WHILE mit NEXT zu kombinieren ist ein Kompilierfehler, selbst wenn DO vorhanden ist.
  • DO in einer eigenen Zeile. DO gehört an das Ende der Zeile mit dem Schleifenkopf. Es in eine eigene Zeile zu setzen oder vor jeder Anweisung zu wiederholen, lässt sich nicht kompilieren.
  • Endlose WHILE-Schleifen. DO schützt nicht vor einer Bedingung, die niemals falsch wird. Der Rumpf einer WHILE-Schleife muss etwas ändern, von dem die Bedingung abhängt, oder eine feste Obergrenze für die Iterationen enthalten, sonst bleibt das Skript hängen.
  • Annehmen, DO sei erforderlich. DO weglassen ist erlaubt, sein Fehlen in bestehendem Code ist also kein Bug. Gemischte Stile innerhalb eines Skripts kompilieren problemlos, schaden aber der Lesbarkeit.
  • FOR, gezählte Schleife, deren Körper DO einleitet.
  • NEXT, schließt eine FOR-Schleife und rückt den Zähler vor.
  • TO, aufsteigende Zählerrichtung in einem FOR-Kopf.
  • DOWNTO, absteigende Zählerrichtung in einem FOR-Kopf.
  • WHILE, bedingungsgesteuerte Schleife, die ebenfalls DO akzeptiert.
  • WEND, schließt eine WHILE-Schleife.
  • BREAK, verlässt die umgebende Schleife, bevor sie beendet ist.
  • IF, bedingte Logik, die häufig in Schleifenkörpern verschachtelt wird.