Jetzt beitreten
Befehle/probuilder · probacktest · proorder · proscreener

IF

IF in ProBuilder runs a block of code only when its boolean condition is true. The foundation of conditional logic in every ProRealTime™ program.

Syntax

probuilder
IF (condition) THEN
  // code to execute when condition is true
ENDIF

Mit optionalen Zweigen:

probuilder
IF (condition1) THEN
  // runs if condition1 is true
ELSIF (condition2) THEN
  // runs if condition2 is true
ELSE
  // runs if neither is true
ENDIF

So funktioniert es

ProBuilder wertet den Ausdruck in Klammern auf jedem Bar des Charts aus. Ist das Ergebnis wahr, wird der Code zwischen THEN und ENDIF ausgeführt. Ist das Ergebnis falsch, wird der Block vollständig übersprungen und die Ausführung fährt mit dem fort, was auf ENDIF folgt.

Bedingungen können einfache Vergleiche sein, etwa a < b oder close > open, oder zusammengesetzte Ausdrücke, die mit den logischen Operatoren AND, OR, NOT und XOR gebildet werden. Klammern steuern die Priorität wie in der Mathematik.

IF blocks may be nested arbitrarily deep, but readability degrades quickly past two or three levels. Prefer flat structures with combined conditions, or refactor deep nesting into named intermediate variables.

Beispiele

Beispiel 1, Einfacher numerischer Vergleich (Indikator)

probuilder
a = 10
b = 20
// Compute c only when a is smaller
IF (a < b) THEN
  c = a + b
ENDIF
RETURN c

Der IF-Block wird ausgeführt, weil 10 kleiner als 20 ist, also wird c zu 30 und dieser Wert wird zurückgegeben.

Beispiel 2, Zusammengesetzte Bedingung für einen Screener (ProScreener)

probuilder
myRSI = RSI[14](close)
myATR = AverageTrueRange[14](close)
IF (myRSI < 30) AND (myATR > 5) THEN
  screener[myRSI] = 1
ENDIF

Der Screener löst nur aus, wenn der RSI überverkauft ist UND der ATR ausreichend Volatilität bestätigt, ein gängiger Qualitätsfilter, um Signale in bewegungslosen Märkten zu unterdrücken.

Beispiel 3, Regimeerkennung mit drei Zuständen (ProOrder)

probuilder
// Classify the current trend as up, down, or flat
fastMA = Average[20](close)
slowMA = Average[50](close)

IF (fastMA > slowMA) THEN
  regime = 1
ELSIF (fastMA < slowMA) THEN
  regime = -1
ELSE
  regime = 0
ENDIF

ELSIF erlaubt mehrfache Verzweigungen ohne verschachtelte IFs. Die Variable regime trägt das Signal dann durch den Rest der Strategie weiter.

Häufige Fehler und Stolperfallen

  • Fehlendes ENDIF. Jedes IF braucht ein passendes ENDIF. Der Compiler meldet den Fehler oft mehrere Zeilen unterhalb der eigentlichen Ursache. Zählen Sie bei der Fehlersuche die öffnenden und schließenden Paare vom Anfang des Skripts an abwärts.
  • Gleichheit mit =. ProBuilder verwendet ein einzelnes = sowohl für Zuweisung als auch für Vergleich. Innerhalb einer IF-Bedingung = wirkt als Vergleich. Außerhalb weist es zu. Beide Bedeutungen in einer Zeile zu mischen ist eine häufige Quelle verwirrender Bugs.
  • THEN vergessen. Das Schlüsselwort THEN ist zwischen der Bedingung und dem Block-Körper zwingend. IF (a < b) c = a + b ENDIF erzeugt einen Syntaxfehler.
  • Bedingungen, die nicht-boolesche Werte zurückgeben. Mathematische Ausdrücke wie IF (a + b) sind ungültig. Die Bedingung muss sich zu true oder false auflösen.
  • ELSE, Ausweichzweig, wenn keine IF- oder ELSIF-Bedingung zutrifft.
  • ELSIF, verkettete Alternativbedingungen innerhalb desselben Blocks.
  • ENDIF, schließt einen IF-Block.
  • THEN, erforderlich zwischen der Bedingung und dem Blockinhalt.
  • AND, logische Konjunktion innerhalb zusammengesetzter Bedingungen.
  • OR, logische Disjunktion innerhalb zusammengesetzter Bedingungen.
  • NOT, logische Negation.
  • WHILE, Schleife, die läuft, solange eine Bedingung gilt.