Word nu lid
Instructies/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.

Syntaxis

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

Hoe het werkt

Een IF-statement op zichzelf voert zijn blok uit of doet niets. Met ELSE erbij wordt het een tweezijdige vertakking: precies één van de twee blokken wordt op elke bar uitgevoerd, nooit beide en nooit geen van beide. De uitvoering gaat daarna verder na ENDIF, ongeacht welke tak is uitgevoerd.

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.

Omdat er altijd één tak wordt uitgevoerd, is een IF/ELSE-paar de idiomatische manier om te garanderen dat een variabele op elke bar een waarde krijgt, waardoor verouderde waarden uit eerdere bars niet blijven hangen.

Voorbeelden

Voorbeeld 1, De huidige bar classificeren (Indicator)

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

Wanneer de huidige high hoger is dan de vorige high, result is 1, in alle andere gevallen zet de ELSE-tak hem op -1. De variabele krijgt gegarandeerd op elke bar een nieuwe waarde.

Voorbeeld 2, Scoren boven of onder een bewegend gemiddelde (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")

Instrumenten die boven het 200-periode gemiddelde handelen krijgen een procentuele score, de ELSE-tak zet al het andere op nul zodat de screenervoorwaarde schoon blijft.

Voorbeeld 3, Een stopafstand kiezen per regime (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

De ELSE-tak levert de standaard stopafstand wanneer de volatiliteitstest niet slaagt, zodat stopDist is gedefinieerd voordat de instaplogica hem gebruikt.

Veelvoorkomende fouten en valkuilen

  • 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.
  • Meerdere ELSE-takken. Elk IF-statement accepteert maximaal één ELSE. Extra onderling uitsluitende gevallen horen in ELSIF-takken die vóór de ELSE staan.
  • ELSE with its own condition. ELSE takes no condition and no THEN. Writing ELSE (condition) THEN is een syntaxfout, de conditionele vorm is ELSIF.
  • Verkeerde koppeling van takken in geneste blokken. In geneste IF-statements bindt ELSE aan de dichtstbijzijnde niet-gesloten IF. Een ontbrekende binnenste ENDIF koppelt de ELSE stilzwijgend aan de verkeerde voorwaarde, wat wel compileert maar verkeerd vertakt.
  • IF, opent het voorwaardelijke blok dat ELSE uitbreidt.
  • ELSIF, voorwaardelijke alternatieve takken die vóór ELSE worden getest.
  • ENDIF, sluit het IF/ELSE-blok.
  • THEN, vereist na IF- en ELSIF-voorwaarden, nooit na ELSE.
  • AND, combineert voorwaarden binnen de IF-test.
  • OR, alternatieve voorwaarden binnen de IF-test.
  • NOT, ontkent een voorwaarde.