Jetzt beitreten
Befehle/probuilder · probacktest · proorder · proscreener

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

probuilder
IF (condition) THEN
  // statements when the condition is true
ELSE
  // statements when the condition is false
ENDIF

So 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)

probuilder
// compare the current high with the previous bar's high
IF (High > High[1]) THEN
  result = 1
ELSE
  result = -1
ENDIF
RETURN result

Wenn 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)

probuilder
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)

probuilder
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
ENDIF

Der 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) THEN ist 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.
  • 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.