Jetzt beitreten
Befehle/probuilder · probacktest · proorder · proscreener

TO

TO setzt den Endwert eines FOR-Schleifenzählers in ProBuilder, sodass die Schleife von ihrem Startwert bis einschließlich dieser Grenze läuft, eine Iteration pro Wert.

Syntax

probuilder
FOR variable = start_value TO end_value DO
  // code executed on each iteration
NEXT

So funktioniert es

Im Kopf einer FOR-Schleife trennt TO den Startwert des Zählers von seinem Endwert. Die Schleife weist dem Zähler den Startwert zu, führt den Körper aus, und jeder Durchlauf durch NEXT erhöht den Zähler um eins. Die Iteration läuft weiter, solange der Zähler den Wert nach TO nicht überschritten hat, und beide Grenzen sind eingeschlossen, daher FOR i = 1 TO 20 wird zwanzigmal ausgeführt.

TO beschreibt immer einen aufsteigenden Bereich. Wenn der Startwert den Endwert bereits übersteigt, wird der Körper überhaupt nicht ausgeführt, die Schleife wird einfach übersprungen. Abwärtszählen erfordert das zugehörige Schlüsselwort DOWNTO, das den Zähler stattdessen verringert.

Der Endwert kann ein Literal, eine Variable oder ein Ausdruck sein, was TO für datenabhängige Bereiche nützlich macht, etwa FOR i = 0 TO lastset($array) oder Fenstergrößen aus einer Optimierungsvariablen. Der Ausdruck wird ausgewertet, wenn die Schleife beginnt.

Da Skripte ohnehin einmal pro Bar ausgeführt werden, durchlaufen TO-Bereiche typischerweise Periodenlängen, historische Bar-Offsets oder Array-Indizes innerhalb des aktuellen Bars statt über die Zeit hinweg.

Beispiele

Beispiel 1, Ein Verhältnis über 20 Bars akkumulieren (Indikator)

probuilder
// Sum the close/open ratio of the last 20 bars
total = 0
FOR x = 1 TO 20 DO
  total = total + close[x] / open[x]
NEXT
RETURN total AS "close/open sum"

TO legt die obere Grenze auf 20 fest, sodass der Körper für x = 1 bis einschließlich 20 läuft und pro Iteration einen historischen Bar liest.

Beispiel 2, Variabler Endwert aus gespeicherten Daten (ProBacktest)

probuilder
// Record the range of each bar, then average all stored values
$ranges[max(0, lastset($ranges) + 1)] = high - low

sum = 0
n = lastset($ranges)
IF n >= 4 THEN
  FOR i = 0 TO n DO
    sum = sum + $ranges[i]
  NEXT
  avgRange = sum / (n + 1)
  IF high - low > avgRange * 2 AND NOT onmarket THEN
    BUY 1 CONTRACT AT MARKET
  ENDIF
ENDIF

SET STOP %LOSS 1.5

Der Wert nach TO ist ein Ausdruck, sodass die Schleife automatisch genau den gefüllten Teil des Arrays abdeckt, während dieser wächst.

Beispiel 3, Mehrere Lookbacks in einem Durchlauf scannen (ProScreener)

probuilder
// Count how many lookback windows show the close above its average
score = 0
FOR p = 10 TO 50 DO
  IF close > average[p](close) THEN
    score = score + 1
  ENDIF
NEXT

SCREENER[score >= 35] (score AS "Trend score")

TO beendet den Durchlauf bei Periode 50, sodass der Score 41 verschiedene Prüfungen gleitender Durchschnitte pro Instrument zusammenfasst.

Häufige Fehler und Stolperfallen

  • Inklusive Grenze. Der Zähler nimmt den Endwert selbst an, daher FOR i = 0 TO 9 führt zehn Iterationen aus, nicht neun. Um eins verschobene Grenzen sind der häufigste Fehler in Schleifen.
  • Absteigender Bereich mit TO. FOR i = 20 TO 10 betritt den Schleifenkörper nie, weil der Startwert die Grenze bereits überschreitet. Verwenden Sie DOWNTO, um abwärts zu zählen.
  • Endwert abhängig vom Schleifenkörper. Die Grenze nach TO wird beim Start der Schleife festgelegt. Das Ändern der Variablen, aus denen sie berechnet wurde, innerhalb des Körpers verlängert oder verkürzt die Iteration nicht.
  • Große Bereiche auf jedem Bar. Der vollständige von TO gesetzte Bereich läuft einmal pro Bar über den gesamten Chart. Weite Bereiche um aufwendige Aufrufe wie average[p] die Neuberechnung merklich verlangsamen.
  • FOR, öffnet die gezählte Schleife, deren Bereich TO definiert.
  • DOWNTO, deklariert einen absteigenden statt eines aufsteigenden Bereichs.
  • DO, trennt den Schleifenkopf vom Schleifenkörper.
  • NEXT, schließt den Schleifenkörper und erhöht den Zähler.
  • BREAK, verlässt die Schleife, bevor der Zähler die TO-Grenze erreicht.
  • WHILE, bedingungsgesteuerte Schleife für Bereiche, die nicht im Voraus bekannt sind.