ENDIF
ENDIF in ProBuilder closes a conditional block opened by IF. Every IF needs a matching ENDIF, including nested blocks and blocks with ELSE or ELSIF branches.
Syntax
IF (condition) THEN
// statements
ELSE
// statements
ENDIFSo funktioniert es
ENDIF marks the point where conditional execution stops and unconditional execution resumes. Everything between IF and ENDIF belongs to the conditional block; everything after ENDIF runs on every bar regardless of the condition. One ENDIF closes one IF, no matter how many ELSIF branches sit in between, and the optional ELSE branch also falls inside the same block.
Verschachtelte Bedingungen benötigen jeweils ihr eigenes ENDIF. Der Compiler ordnet jedes ENDIF dem nächstgelegenen nicht geschlossenen IF darüber zu, die Schließreihenfolge ist also umgekehrt zur Öffnungsreihenfolge. Einrückungen haben in ProBuilder keine syntaktische Bedeutung, aber das Einrücken jeder Verschachtelungsebene macht die Zuordnung sichtbar und ist der wichtigste Schutz gegen nicht zusammenpassende Blöcke.
Ein fehlendes oder überzähliges ENDIF ist ein Compilerfehler. Die gemeldete Zeilennummer verweist häufig auf das Ende des Skripts oder auf eine nicht zusammenhängende Anweisung unterhalb des eigentlichen Fehlers, weil der Compiler das Ungleichgewicht erst bemerkt, wenn ihm der Code ausgeht.
Beispiele
Beispiel 1, Richtung aus zwei gleitenden Durchschnitten (Indikator)
a = average[10](close)
b = exponentialaverage[20](close)
// Compare the two averages and encode the result as +1 or -1
IF (a > b) THEN
result = 1
ELSE
result = -1
ENDIF
RETURN result AS "direction"The block assigns 1 when the simple average sits above the exponential average and -1 otherwise. ENDIF closes the block so the RETURN below always executes.
Beispiel 2, Verschachtelte Bedingungen in einem Screener (ProScreener)
match = 0
IF RSI[14](close) < 30 THEN
// Inner block only runs when the outer condition passed
IF volume > Average[20](volume) THEN
match = 1
ENDIF
ENDIF
SCREENER[match] (RSI[14](close) AS "RSI")Zwei IF-Blöcke sind verschachtelt, und jeder hat sein eigenes ENDIF. Das innere ENDIF schließt den Volumentest, das äußere den RSI-Test.
Beispiel 3, Einstiegs- und Umkehrlogik (ProOrder)
fast = ExponentialAverage[9](close)
slow = ExponentialAverage[21](close)
// One block handles both directions through ELSIF
IF fast CROSSES OVER slow THEN
BUY 1 CONTRACT AT MARKET
ELSIF fast CROSSES UNDER slow THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIFEin einziger IF...ELSIF...ENDIF-Block leitet bullische Kreuzungen zu einem long-Einstieg und bärische Kreuzungen zu einem short-Einstieg. Ein ENDIF schließt die gesamte Struktur.
Häufige Fehler und Stolperfallen
- Fehlendes ENDIF. Jedes IF benötigt genau ein ENDIF. Der Compiler markiert oft eine Zeile weit unterhalb der tatsächlichen Auslassung, zählen Sie daher beim Auftreten des Fehlers die IF- und ENDIF-Paare vom Anfang des Skripts an.
- Ein ENDIF pro ELSIF-Kette, nicht pro Zweig. ELSIF-Zweige erhalten kein eigenes ENDIF. Ein ENDIF nach jedem ELSIF schließt den Block zu früh und erzeugt meist eine Kaskade von Fehlern.
- Falsch platzierte Anweisungen nach ENDIF. Code, der nur bei erfüllter Bedingung laufen soll, muss oberhalb von ENDIF stehen. Eine Anweisung, die versehentlich darunter verschoben wird, läuft auf jedem Bar, was das Verhalten ohne jeden Compilerfehler verändert.
- Verwirrung bei der Verschachtelung. Bei mehreren verschachtelten Blöcken bindet jedes ENDIF an das nächstgelegene offene IF. Eine einheitliche Einrückung ist der praktische Weg, die Paare beim Bearbeiten im Einklang zu halten.
Verwandte Befehle
IF, öffnet den bedingten Block, den ENDIF schließt.THEN, erforderlich zwischen der Bedingung und dem Blockinhalt.ELSE, Rückfallzweig innerhalb eines IF-Blocks.ELSIF, verkettete Alternativbedingungen innerhalb desselben Blocks.AND, verknüpft Bedingungen im IF-Kopf.OR, akzeptiert eine von mehreren Bedingungen im IF-Kopf.NOT, negiert eine Bedingung.WHILE, Schleifenkonstrukt mit eigenem Abschluss-Schlüsselwort, WEND.