ELSE
ELSE in ProBuilder runs an alternative block of code when the preceding IF condition is false. Each IF statement accepts a single ELSE branch before ENDIF.
Syntax
IF (condition) THEN
// statements when the condition is true
ELSE
// statements when the condition is false
ENDIFSo funktioniert es
Eine IF-Anweisung allein führt entweder ihren Block aus oder tut nichts. Mit ELSE wird sie zu einer Verzweigung mit zwei Wegen: auf jedem Bar wird genau einer der beiden Blöcke ausgeführt, niemals beide und niemals keiner. Die Ausführung läuft danach hinter ENDIF weiter, unabhängig davon, welcher Zweig ausgeführt wurde.
ELSE cannot stand alone. It must appear inside an IF block, after the THEN block and any ELSIF branches, and before ENDIF. Each IF statement accepts at most one ELSE, and it must be the final branch. When several conditions need to be tested in order, chain them with ELSIF and reserve ELSE for the case where none of them matched.
Da immer einer der Zweige ausgeführt wird, ist ein IF/ELSE-Paar der idiomatische Weg, um sicherzustellen, dass eine Variable auf jedem Bar einen Wert erhält, und vermeidet veraltete Werte, die von früheren Bars übernommen werden.
Beispiele
Beispiel 1, Den aktuellen Bar klassifizieren (Indikator)
// compare the current high with the previous bar's high
IF (High > High[1]) THEN
result = 1
ELSE
result = -1
ENDIF
RETURN resultWenn das aktuelle Hoch das vorherige Hoch übersteigt, result 1 ist, in jedem anderen Fall setzt ihn der ELSE-Zweig auf -1. Die Variable erhält garantiert auf jedem Bar einen neuen Wert.
Beispiel 2, Bewertung über oder unter einem gleitenden Durchschnitt (ProScreener)
ma = Average[200](close)
// score the instrument by its position relative to the average
IF close > ma THEN
score = (close - ma) / ma * 100
ELSE
score = 0
ENDIF
SCREENER[score > 5] (score AS "Percent above MA")Instrumente, die über dem 200-Perioden-Durchschnitt notieren, erhalten eine prozentuale Bewertung, der ELSE-Zweig setzt alles andere auf null, damit die Screener-Bedingung sauber bleibt.
Beispiel 3, Stop-Abstand nach Marktregime wählen (ProOrder)
DEFPARAM CumulateOrders = false
atr = AverageTrueRange[14](close)
// widen the stop in volatile conditions, tighten it otherwise
IF atr > Average[100](atr) THEN
stopDist = 3 * atr
ELSE
stopDist = 1.5 * atr
ENDIF
IF close CROSSES OVER Average[50](close) AND NOT onmarket THEN
BUY 1 CONTRACT AT MARKET
SET STOP pLOSS stopDist
ENDIFDer ELSE-Zweig liefert den Standard-Stopabstand, wenn der Volatilitätstest fehlschlägt, damit stopDist definiert ist, bevor die Einstiegslogik darauf zugreift.
Häufige Fehler und Stolperfallen
- ELSE without a matching IF. ELSE is only valid between an IF ... THEN block and its ENDIF. A stray ELSE, or one separated from its IF by a misplaced ENDIF, fails to compile.
- Mehrere ELSE-Zweige. Jede IF-Anweisung akzeptiert höchstens ein ELSE. Weitere sich gegenseitig ausschließende Fälle gehören in ELSIF-Zweige, die vor dem ELSE stehen.
- ELSE with its own condition. ELSE takes no condition and no THEN. Writing
ELSE (condition) THENist ein Syntaxfehler, die bedingte Form ist ELSIF. - Falsche Zweigzuordnung in verschachtelten Blöcken. In verschachtelten IF-Anweisungen bindet ELSE an das nächstgelegene nicht geschlossene IF. Ein fehlendes inneres ENDIF hängt das ELSE unbemerkt an die falsche Bedingung, was kompiliert, aber falsch verzweigt.
Verwandte Befehle
IF, öffnet den bedingten Block, den ELSE erweitert.ELSIF, bedingte alternative Zweige, die vor ELSE geprüft werden.ENDIF, schließt den IF/ELSE-Block.THEN, erforderlich nach IF- und ELSIF-Bedingungen, niemals nach ELSE.AND, verknüpft Bedingungen innerhalb des IF-Tests.OR, alternative Bedingungen innerhalb des IF-Tests.NOT, negiert eine Bedingung.