WHILE
Die WHILE-Schleife in ProBuilder wiederholt einen Codeblock, solange eine boolesche Bedingung wahr bleibt. Die Bedingung wird vor jedem Durchlauf geprüft, WEND beendet die Schleife.
Syntax
WHILE condition DO
// statements repeated while the condition is true
WENDSo funktioniert es
Vor jedem Durchlauf wertet ProBuilder die Bedingung aus. Ist sie wahr, wird der Block zwischen DO und WEND ausgeführt, dann kehrt die Steuerung zur WHILE-Zeile zurück und die Bedingung wird erneut geprüft. Ist sie falsch, springt die Ausführung hinter WEND. Da die Prüfung zuerst erfolgt, bedeutet eine beim Eintritt falsche Bedingung, dass der Block überhaupt nie läuft.
Etwas innerhalb der Schleife muss die Bedingung irgendwann falsch werden lassen. Anders als FOR hat WHILE keinen eingebauten Zähler, daher ist das Skript dafür verantwortlich, das zu aktualisieren, wovon die Bedingung abhängt. Eine Bedingung, die niemals falsch werden kann, erzeugt eine Endlosschleife, die ProRealTime™ mit einem Ausführungsfehler abbricht, statt die Plattform hängen zu lassen.
Die gesamte Schleife läuft auf jedem Bar des Charts erneut. WHILE eignet sich für offene Durchsuchungen, etwa das Rückwärtsgehen durch Bars, bis ein Muster bricht, wo ein FOR-Bereich entweder verschwenderisch oder unbekannt wäre.
Beispiele
Beispiel 1, Durchläufe zählen (Indikator)
i = 0
count = 0
WHILE i <> 11 DO
// advance the counter until it reaches 11
i = i + 1
count = count + 1
WEND
RETURN countDie Schleife läuft, solange i sich von 11 unterscheidet. Jeder Durchlauf erhöht beide Variablen, sodass die Schleife nach 11 Iterationen endet und der Indikator 11 zurückgibt.
Beispiel 2, Eine Serie von Aufwärts-Schlusskursen messen (ProScreener)
n = 0
// walk backward while each close is above the previous one
WHILE close[n] > close[n + 1] AND n < 100 DO
n = n + 1
WEND
SCREENER[n >= 3] (n AS "Up streak")Die Schleife zählt aufeinanderfolgende steigende Schlusskurse und stoppt beim ersten Bar, der die Serie bricht. Die n < 100 Grenze garantiert den Abbruch auch in einem ungewöhnlich langen Trend.
Beispiel 3, Eine Position innerhalb eines Risikobudgets dimensionieren (ProOrder)
DEFPARAM CumulateOrders = false
maxRisk = 400
size = 1
// double the position size while the risk budget allows it
WHILE (size * 2) * AverageTrueRange[14](close) <= maxRisk DO
size = size * 2
WEND
IF close CROSSES OVER Average[50](close) AND NOT onmarket THEN
BUY size CONTRACT AT MARKET
ENDIFDie Schleife vergrößert die Position Size geometrisch, bis eine weitere Verdopplung das Risikobudget überschreiten würde, dann handelt die Strategie diese Größe.
Häufige Fehler und Stolperfallen
- Endlosschleifen. Wenn nichts innerhalb des Blocks die Bedingung verändert, endet die Schleife nie und ProRealTime™ bricht das Skript mit einem Fehler ab. Versehen Sie jede von Marktdaten getriebene Bedingung mit einer expliziten Sicherheitsgrenze, etwa einem maximalen Zählerwert.
- Null Iterationen. Die Bedingung wird vor dem ersten Durchlauf ausgewertet. Ist sie beim Eintritt falsch, wird der Block vollständig übersprungen, und alle Variablen, die nur innerhalb der Schleife zugewiesen werden, behalten ihre vorherigen Werte.
- Fehlendes WEND. Jedes WHILE braucht ein abschließendes WEND. Der Compilerfehler kann unterhalb der eigentlichen Schleife angezeigt werden, prüfen Sie daher die Paare, wenn die Meldung fehl am Platz wirkt.
- Auf Gleichheit beruhende Abbruchbedingungen. Eine Bedingung wie
i <> 11wird niemals false, wenniüber 11 hinweg springt, ohne sie zu treffen, zum Beispiel bei einer Schrittweite von 2. Vergleiche mit<oder>sind sicherere Ausstiegsprüfungen als<>.
Verwandte Befehle
WEND, schließt einen WHILE-Block und gibt die Steuerung an die Bedingung zurück.DO, Schlüsselwort, das einen WHILE- oder FOR-Kopf beendet.FOR, zählergesteuerte Schleife für eine bekannte Anzahl von Durchläufen.NEXT, schließt einen FOR-Block.BREAK, verlässt die aktuelle Schleife sofort.IF, bedingte Ausführung ohne Wiederholung.THEN, erforderlich zwischen einer IF-Bedingung und ihrem Block.ENDIF, schließt einen IF-Block.