Word nu lid
Instructies/probuilder · probacktest · proorder · proscreener

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.

Syntaxis

probuilder
IF (condition) THEN
  // statements
ELSE
  // statements
ENDIF

Hoe het werkt

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.

Geneste voorwaarden hebben elk hun eigen ENDIF nodig. De compiler koppelt elke ENDIF aan de dichtstbijzijnde niet-gesloten IF erboven, dus de sluitvolgorde is het omgekeerde van de openingsvolgorde. Indentatie heeft in ProBuilder geen syntactische betekenis, maar elk nestniveau inspringen maakt de koppeling zichtbaar en is de belangrijkste verdediging tegen niet-overeenkomende blokken.

Een ontbrekende of overtollige ENDIF is een compileerfout. Het gemelde regelnummer wijst vaak naar het einde van het script of naar een niet-gerelateerd statement onder de werkelijke fout, omdat de compiler de onbalans pas opmerkt wanneer de code op is.

Voorbeelden

Voorbeeld 1, Richting uit twee bewegende gemiddelden (Indicator)

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

Voorbeeld 2, Geneste voorwaarden in een screener (ProScreener)

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

Twee IF-blokken nesten, en elk heeft zijn eigen ENDIF. De binnenste ENDIF sluit de volumetest, de buitenste sluit de RSI-test.

Voorbeeld 3, Entry- en omkeerlogica (ProOrder)

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

Eén enkel IF...ELSIF...ENDIF-blok stuurt bullish kruisingen naar een long entry en bearish kruisingen naar een short entry. Eén ENDIF sluit de hele structuur.

Veelvoorkomende fouten en valkuilen

  • ENDIF ontbreekt. Elke IF vereist precies één ENDIF. De compiler markeert vaak een regel ver onder de werkelijke weglating, dus tel bij een foutmelding de IF- en ENDIF-paren vanaf de bovenkant van het script.
  • Eén ENDIF per ELSIF-keten, niet per tak. ELSIF-takken krijgen geen eigen ENDIF. Een ENDIF na elke ELSIF schrijven sluit het blok te vroeg en levert meestal een cascade van fouten op.
  • Verkeerd geplaatste statements na ENDIF. Code die alleen mag worden uitgevoerd wanneer de voorwaarde geldt moet boven ENDIF staan. Een statement dat er per ongeluk onder terechtkomt wordt op elke bar uitgevoerd, wat het gedrag verandert zonder enige compileerfout.
  • Verwarring bij nesten. Bij meerdere geneste blokken bindt elke ENDIF aan de dichtstbijzijnde open IF. Consistente indentatie is de praktische manier om de paren tijdens het bewerken op elkaar afgestemd te houden.
  • IF, opent het voorwaardelijke blok dat ENDIF sluit.
  • THEN, verplicht tussen de voorwaarde en de body van het blok.
  • ELSE, terugvaltak binnen een IF-blok.
  • ELSIF, geketende alternatieve voorwaarden binnen hetzelfde blok.
  • AND, combineert voorwaarden in de IF-header.
  • OR, accepteert elk van meerdere voorwaarden in de IF-header.
  • NOT, ontkent een voorwaarde.
  • WHILE, lusconstructie met zijn eigen afsluitende sleutelwoord, WEND.