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
IF (condition) THEN
// code to execute when condition is true
ENDIFMit optionalen Zweigen:
IF (condition1) THEN
// runs if condition1 is true
ELSIF (condition2) THEN
// runs if condition2 is true
ELSE
// runs if neither is true
ENDIFSo 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)
a = 10
b = 20
// Compute c only when a is smaller
IF (a < b) THEN
c = a + b
ENDIF
RETURN cDer 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)
myRSI = RSI[14](close)
myATR = AverageTrueRange[14](close)
IF (myRSI < 30) AND (myATR > 5) THEN
screener[myRSI] = 1
ENDIFDer 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)
// 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
ENDIFELSIF 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 ENDIFerzeugt 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.
Verwandte Befehle
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.