Jetzt beitreten
Befehle/probuilder · probacktest · proorder · proscreener

DOWNTO

DOWNTO lässt in ProBuilder eine FOR-Schleife von einem höheren Startwert abwärts zu einem niedrigeren Endwert zählen und verringert den Zähler bei jedem Durchlauf um eins.

Syntax

probuilder
FOR variable = startValue DOWNTO endValue DO
  // loop body
NEXT

So funktioniert es

Eine FOR-Schleife mit DOWNTO startet den Zähler bei startValue und verringert ihn nach jedem Durchlauf um eins, wobei der Rumpf für jeden Wert bis einschließlich endValue. Es ist das absteigende Gegenstück zu TO, das hochzählt.

Die Richtung ist immer dann wichtig, wenn die Iterationsreihenfolge das Ergebnis beeinflusst. Bar-Offsets in ProBuilder wachsen mit dem Alter, daher close[20] ist älter als close[0]. Eine Schleife, geschrieben FOR i = 20 DOWNTO 0 besucht daher die Bars vom ältesten zum neuesten, was die natürliche Reihenfolge für Berechnungen ist, die chronologisch Zustand aufbauen, etwa das Verfolgen des letzten Auftretens eines Ereignisses oder das Nachspielen einer Folge von Bars in zeitlicher Reihenfolge.

Der Startwert muss größer oder gleich dem Endwert sein. Wenn startValue ist kleiner als endValue, wird der Körper nie ausgeführt und das Skript läuft nach NEXT ohne Fehler weiter. BREAK bleibt innerhalb des Körpers verfügbar, um die Schleife früh abzubrechen.

Beispiele

Beispiel 1, Abwärts-Bars vom ältesten zum neuesten zählen (Indikator)

probuilder
Value = 0
// Scan from 20 bars back toward the current bar
FOR i = 20 DOWNTO 0 DO
  IF (Close[i] < Open[i]) THEN
    Value = Value + 1
  ELSE
    BREAK
  ENDIF
NEXT
RETURN Value

Der Zähler läuft von 20 abwärts bis 0, der Durchlauf beginnt also beim ältesten Bar im Fenster und bewegt sich in Richtung Gegenwart, wobei er beim ersten Bar anhält, der auf oder über seiner Eröffnung geschlossen hat.

Beispiel 2, Offset des jüngsten Aufwärts-Gaps (Indikator)

probuilder
lastGap = -1
// Visit bars oldest first so the final assignment is the newest gap
FOR i = 50 DOWNTO 1 DO
  IF low[i - 1] > high[i] THEN
    lastGap = i - 1
  ENDIF
NEXT
RETURN lastGap AS "bars since last up gap"

Da DOWNTO ältere Bars zuerst verarbeitet, überschreibt jede erkannte Lücke die vorherige, sodass der Offset der jüngsten Lücke in lastGap wenn die Schleife endet.

Beispiel 3, Chronologischer Momentum-Score (ProOrder)

probuilder
score = 0
// Compare each bar with the one before it, oldest pair first
FOR i = 10 DOWNTO 1 DO
  IF close[i] > close[i + 1] THEN
    score = score + 1
  ELSE
    score = score - 1
  ENDIF
NEXT

IF score >= 8 AND NOT ONMARKET THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

Die Schleife durchläuft die letzten zehn Veränderungen von Bar zu Bar in zeitlicher Reihenfolge und saldiert Anstiege gegen Rückgänge. Ein Score von 8 oder mehr zeigt einen anhaltenden Anstieg an und löst einen Long-Einstieg aus.

Häufige Fehler und Stolperfallen

  • Startwert kleiner als Endwert. FOR i = 0 DOWNTO 20 führt null Iterationen aus. Es wird kein Fehler ausgelöst, sodass nachgelagerte Variablen unbemerkt ihre Anfangswerte behalten. Prüfen Sie, dass die Grenzen in absteigender Reihenfolge stehen.
  • Die Richtung ändert das Ergebnis. Schleifen, die bei einem Treffer eine Variable überschreiben oder bei einer Bedingung mit BREAK abbrechen, liefern mit DOWNTO andere Ergebnisse als mit TO. Wählen Sie die Richtung, die der beabsichtigten Chronologie entspricht.
  • Abweichung um eins an den Rändern. Beide Grenzen sind inklusive. FOR i = 20 DOWNTO 0 läuft 21 Mal. Das Referenzieren close[i + 1] innerhalb des Rumpfs reicht ebenfalls einen Bar über das angegebene Fenster hinaus.
  • Keine eigene Schrittweite. Der Zähler bewegt sich immer um genau eins. Um jeden zweiten Wert zu überspringen, ist Arithmetik mit dem Zähler im Rumpf erforderlich statt einer Schrittklausel.
  • FOR, die gezählte Schleife, die DOWNTO verändert.
  • TO, das aufsteigende Gegenstück zu DOWNTO.
  • NEXT, schließt die FOR-Schleife und bewegt den Zähler.
  • DO, optionale Markierung zwischen Schleifenkopf und Rumpf.
  • BREAK, verlässt die Schleife, bevor der Zähler den Endwert erreicht.
  • WHILE, bedingungsgesteuerte Alternative, wenn die Anzahl der Iterationen unbekannt ist.
  • WEND, schließt eine WHILE-Schleife.
  • BarIndex, aktuelle Bar-Nummer, häufig zusammen mit absteigenden Durchläufen verwendet.