NEXT
NEXT schließt in ProBuilder einen FOR-Schleifenblock und schickt die Ausführung zurück zum Schleifenkopf, bis der Zähler seinen Endwert überschreitet. Jedes FOR erfordert ein NEXT.
Syntax
FOR variable = start TO end DO
// statements executed on each iteration
NEXTSo funktioniert es
Eine FOR-Schleife in ProBuilder besteht aus einem Kopf, einem Körper und dem abschließenden Schlüsselwort NEXT. Der Kopf weist der Zählervariablen einen Startwert zu und deklariert den Endwert mit TO für aufsteigende Schleifen oder DOWNTO für absteigende. Alles zwischen DO und NEXT bildet den Körper.
Jedes Mal, wenn die Ausführung NEXT erreicht, wird der Zähler erhöht (oder mit DOWNTO verringert) und mit dem Endwert verglichen. Liegt der Zähler noch im Bereich, springt die Ausführung zurück an den Anfang des Schleifenkörpers. Hat er den Endwert überschritten, läuft die Ausführung mit der ersten Anweisung nach NEXT weiter. Beide Grenzen sind eingeschlossen, daher FOR i = 10 TO 20 führt elf Iterationen aus.
NEXT ist rein strukturell, es nimmt keine Argumente und erzeugt keinen Wert. Jedes FOR muss durch genau ein NEXT geschlossen werden, und verschachtelte Schleifen benötigen ein NEXT pro FOR, geschlossen von der innersten Schleife nach außen. Um eine Schleife zu verlassen, bevor der Zähler erschöpft ist, verwenden Sie BREAK, das die Kontrolle an die Anweisung nach dem zugehörigen NEXT übergibt.
Da das gesamte Skript bereits einmal pro Bar ausgeführt wird, werden durch NEXT begrenzte Schleifen typischerweise für Berechnungen über einen Bereich von Perioden oder Array-Indizes innerhalb eines einzelnen Bars verwendet, nicht für das Durchlaufen der Zeit.
Beispiele
Beispiel 1, Durchschnitte über einen Bereich von Perioden summieren (Indikator)
a = 0
FOR i = 10 TO 20 DO
// accumulate the moving average of the open for each period length
a = average[i](open) + a
NEXT
RETURN a AS "compound averages direction"Die Schleife läuft mit i bei 10 bis 20. NEXT erhöht den Zähler und wiederholt den Rumpf, und nach der letzten Iteration wird die akkumulierte Summe zurückgegeben.
Beispiel 2, Bullische Bars in einem Fenster zählen (ProOrder)
// Count how many of the last 10 bars closed up
bullCount = 0
FOR k = 0 TO 9 DO
IF close[k] > open[k] THEN
bullCount = bullCount + 1
ENDIF
NEXT
IF bullCount >= 7 AND NOT onmarket THEN
BUY 1 CONTRACT AT MARKET
ENDIFDer Rumpf zwischen DO und NEXT untersucht pro Iteration einen historischen Bar. Nachdem NEXT den zehnten Durchlauf abgeschlossen hat, geht der Zähler in die Einstiegsbedingung ein.
Beispiel 3, Den Durchschnitt eines Bereichs von Closes bilden (ProScreener)
// Mean close of the last 15 bars, computed manually
total = 0
FOR n = 0 TO 14 DO
total = total + close[n]
NEXT
meanClose = total / 15
SCREENER[close > meanClose * 1.02] (meanClose AS "15-bar mean")NEXT schließt die Akkumulationsschleife, danach wird der Mittelwert mit dem aktuellen Close verglichen, um Instrumente zu filtern.
Häufige Fehler und Stolperfallen
- Fehlendes oder zusätzliches NEXT. Jedes FOR benötigt genau ein NEXT. Bei verschachtelten Schleifen paart der Compiler jedes NEXT mit dem nächstgelegenen offenen FOR, daher erzeugt ein fehlendes NEXT oft einen Fehler mehrere Zeilen entfernt vom eigentlichen Fehler.
- Den Zähler innerhalb des Körpers verändern. Das Neuzuweisen der Schleifenvariablen zwischen DO und NEXT verändert, wie viele Iterationen übrig bleiben, und kann Schleifen erzeugen, die innerhalb des Bars nie enden. Verwenden Sie besser BREAK für einen frühzeitigen Ausstieg.
- Falsches Richtungs-Schlüsselwort.
FOR i = 20 TO 10betritt den Rumpf nie, weil der Zähler den Endwert bereits überschreitet. Absteigende Bereiche erfordern DOWNTO statt TO. - Schwere Schleifen auf jeder Bar. Der komplette FOR...NEXT-Block läuft einmal pro Bar. Große Wertebereiche in Kombination mit aufwendigen Aufrufen wie
average[i]vervielfachen die Rechenzeit über den gesamten Chart.
Verwandte Befehle
FOR, eröffnet die gezählte Schleife, die NEXT schließt.TO, deklariert den aufsteigenden Endwert des Schleifenzählers.DOWNTO, deklariert einen absteigenden Schleifenbereich.DO, trennt den Schleifenkopf vom Schleifenkörper.BREAK, verlässt die Schleife, bevor der Zähler erschöpft ist.WHILE, bedingungsgesteuerte Schleifenalternative.WEND, schließt eine WHILE-Schleife, das Gegenstück zu NEXT.