THEN
THEN links an IF condition to the block of ProBuilder code that runs when the condition is true. Mandatory in every IF statement, before ELSE or ELSIF.
Syntax
IF condition THEN
// code executed when the condition is true
ENDIFSo funktioniert es
THEN is the bridge between a condition and its consequences. The compiler reads everything between IF and THEN as the boolean expression to evaluate, and everything between THEN and the next branch keyword (ELSIF, ELSE, or ENDIF) as the block to execute when that expression is true.
Das Schlüsselwort ist nicht optional. THEN nach einer IF-Bedingung wegzulassen ist ein Syntaxfehler, und dasselbe gilt nach jeder ELSIF-Bedingung in einer verketteten Anweisung. ELSE dagegen nimmt keine Bedingung und daher kein THEN.
THEN carries no logic of its own, it is a structural marker. Complex conditions built with AND, OR, NOT, and parentheses all sit on the left side of THEN, and the block on the right side can contain any statements valid in the sub-language, including nested IF...THEN blocks. Every IF opened with THEN must eventually be closed with ENDIF.
Das Schlüsselwort erscheint auch in der kompakten Ein-Konzept-Lesart von ProBuilder-Bedingungen: Bedingung, THEN, Aktion, ENDIF. Diese Reihenfolge im Kopf zu behalten löst die meisten Syntaxfehler rund um bedingte Blöcke.
THEN behaves identically across all four sub-languages. Indicator code, strategy code, and screener code all use the same IF...THEN...ENDIF structure, so conditional logic written for one context ports directly to the others as long as the statements inside the block are valid there.
Beispiele
Beispiel 1, Bullische Bars markieren (Indikator)
// Draw a green up arrow under every bar that closed above its open
IF close > open THEN
DRAWARROWUP(barindex, low) COLOURED(0, 255, 0)
ENDIF
RETURNWenn die Bedingung links von THEN wahr ist, wird die Zeichenanweisung im Block ausgeführt und ein Pfeil erscheint unter dem Bar.
Beispiel 2, Bedingter Einstieg mit einer zusammengesetzten Bedingung (ProOrder)
// Enter long when the fast average crosses over the slow one
// and the market is not already long
fastMA = average[20](close)
slowMA = average[100](close)
IF fastMA crosses over slowMA AND NOT longonmarket THEN
BUY 1 CONTRACT AT MARKET
ENDIFDer gesamte zusammengesetzte Ausdruck steht vor THEN. Die Orderanweisung nach THEN läuft nur auf Bars, auf denen beide Teile zutreffen.
Beispiel 3, Verzweigung mit ELSIF und THEN (ProScreener)
// Classify momentum, THEN is required after IF and after ELSIF
mom = close - close[10]
IF mom > 0 THEN
state = 1
ELSIF mom < 0 THEN
state = -1
ELSE
state = 0
ENDIF
SCREENER[state = 1] (mom AS "10-bar momentum")Jeder bedingte Zweig, der eine Bedingung trägt, endet mit THEN. Der ELSE-Zweig hat keine Bedingung und daher kein THEN.
Häufige Fehler und Stolperfallen
- Fehlendes THEN.
IF close > open DRAWARROWUP(barindex, low) ENDIFkompiliert nicht. Auf jede IF- und jede ELSIF-Bedingung muss THEN folgen, bevor der Block beginnt. - THEN after ELSE. ELSE introduces the fallback block directly and takes neither a condition nor a THEN. Writing
ELSE THENist ein Syntaxfehler. - Nicht geschlossener Block. Ein THEN-Block läuft bis ELSIF, ELSE oder ENDIF. Wird ENDIF vergessen, zieht der Compiler nachfolgende Anweisungen in den Block hinein und meldet einen Fehler weit entfernt von der Ursache.
- Anweisungen auf der Bedingungsseite. Alles zwischen IF und THEN muss sich zu wahr oder falsch auflösen. Zuweisungen oder bloße arithmetische Ausdrücke an dieser Stelle lassen sich nicht kompilieren.
Verwandte Befehle
IF, öffnet die bedingte Anweisung, zu der THEN gehört.ELSE, Ausweichzweig, der ausgeführt wird, wenn keine Bedingung zutraf.ELSIF, zusätzliche Bedingung im selben Block, ebenfalls gefolgt von THEN.ENDIF, schließt die bedingte Anweisung.AND, kombiniert Bedingungen auf der linken Seite von THEN.OR, alternative Bedingungen auf der linken Seite von THEN.NOT, negiert eine Bedingung vor THEN.