FOR
Die FOR-Schleife in ProBuilder wiederholt einen Codeblock eine festgelegte Anzahl von Malen und zählt mit TO aufwärts oder mit DOWNTO abwärts. Jeder FOR-Block wird mit NEXT geschlossen.
Syntax
FOR variable = start TO end DO
// commands repeated on each pass
NEXTAbwärts zählen:
FOR variable = start DOWNTO end DO
// commands repeated on each pass
NEXTSo funktioniert es
Auf jedem Bar initialisiert die Schleife die Zählervariable mit dem Startwert, führt den Block aus und erhöht den Zähler dann um 1 (TO) oder verringert ihn um 1 (DOWNTO). Wenn der Zähler den Endwert überschreitet, wird die Ausführung nach NEXT fortgesetzt. Das Schlüsselwort DO ist in aktuellen ProRealTime™-Versionen optional, aber seine Beibehaltung verbessert die Lesbarkeit.
Der Zähler ist eine normale Variable und wird häufig als Bar-Offset verwendet, daher close[i] innerhalb einer Schleife liest den Schlusskurs i Bars zurück. Damit ist FOR das Standardwerkzeug zum Summieren, Durchsuchen oder Zeichnen über einen Bereich historischer Bars.
Schleifen können verschachtelt werden. Die gesamte Schleife läuft auf jedem Bar des Charts erneut, sodass eine Schleife mit 100 Durchläufen auf einem Chart mit 10,000 Bars eine Million Iterationen ausführt. Halten Sie die Bereiche so klein, wie die Berechnung es erlaubt, und verwenden Sie BREAK, um die Schleife vorzeitig zu verlassen, sobald das Ergebnis bekannt ist.
Beispiele
Beispiel 1, Summe der Eröffnungskurse über einen Bar-Bereich (Indikator)
a = 0
FOR i = 10 TO 20 DO
// add the open of each bar in the range to the running total
a = open[i] + a
NEXT
RETURN a AS "Sum of Opens"Der Zähler i läuft von Bar-Offset 10 bis Bar-Offset 20 und summiert jeden Eröffnungskurs in a, der zurückgegeben wird, sobald die Schleife endet.
Beispiel 2, Bullische Bars in einem Fenster zählen (ProScreener)
count = 0
FOR i = 0 TO 19 DO
// count the bars that closed above their open
IF close[i] > open[i] THEN
count = count + 1
ENDIF
NEXT
SCREENER[count >= 15] (count AS "Bullish bars")Die Schleife untersucht die letzten 20 Bars, und der Screener listet Instrumente auf, bei denen mindestens 15 davon höher geschlossen als eröffnet haben.
Beispiel 3, Rückwärts-Scan mit DOWNTO (ProOrder)
// find the most recent bar that matches the 50-bar high
hh = highest[50](high)
found = 50
FOR i = 50 DOWNTO 0 DO
IF high[i] = hh THEN
found = i
ENDIF
NEXT
// enter only if the high was printed within the last 5 bars
IF found <= 5 AND NOT onmarket THEN
BUY 1 CONTRACT AT MARKET
ENDIFDOWNTO durchläuft vom ältesten Offset zum aktuellen Bar und lässt found beim letzten Offset, an dem das 50-Bar-Hoch gesetzt wurde.
Häufige Fehler und Stolperfallen
- Fehlendes NEXT. Jedes FOR braucht ein passendes NEXT. Bei verschachtelten Schleifen kann der Compiler den Fehler weit entfernt von der Schleife melden, die tatsächlich nicht geschlossen ist. Ordnen Sie die Paare daher von innen nach außen zu.
- Start jenseits des Endwerts. A
FOR i = 10 TO 5Schleife wird nie ausgeführt, und ebenso nichtFOR i = 5 DOWNTO 10. Der Richtungsbefehl muss zur Richtung des Bereichs passen, andernfalls wird der Block stillschweigend übersprungen. - Änderung des Zählers innerhalb der Schleife. Eine Neuzuweisung der Schleifenvariablen innerhalb des Blocks stört die automatische Inkrementierung und kann zu übersprungenen Durchläufen oder unerwarteten Ausstiegen führen. Verwenden Sie eine separate Variable für Zwischenrechnungen.
- Performance bei großen Bereichen. Die Schleife läuft auf jedem Bar erneut, daher summieren sich große Wertebereiche schnell. Bevorzugen Sie eingebaute Funktionen wie
summationoderhighestwenn eine existiert, und steigen Sie früh mit BREAK aus, wenn die Antwort gefunden ist.
Verwandte Befehle
TO, Bereichstrenner für aufwärts innerhalb eines FOR-Kopfs.DOWNTO, Bereichstrenner für abwärts innerhalb eines FOR-Kopfs.NEXT, schließt einen FOR-Block und löst den nächsten Durchlauf aus.DO, optionales Schlüsselwort, das einen FOR- oder WHILE-Kopf beendet.BREAK, verlässt die aktuelle Schleife, bevor der Bereich erschöpft ist.WHILE, bedingungsgesteuerte Schleife für eine unbekannte Anzahl von Durchläufen.WEND, schließt einen WHILE-Block.BarIndex, Bar-Zähler, nützlich zum Begrenzen von Schleifenbereichen.