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

THEN

THEN links an IF condition to the block of ProBuilder code that runs when the condition is true. Mandatory in every IF statement, before ELSE or ELSIF.

Syntaxis

probuilder
IF condition THEN
  // code executed when the condition is true
ENDIF

Hoe het werkt

THEN is the bridge between a condition and its consequences. The compiler reads everything between IF and THEN as the boolean expression to evaluate, and everything between THEN and the next branch keyword (ELSIF, ELSE, or ENDIF) as the block to execute when that expression is true.

Het keyword is niet optioneel. THEN weglaten na een IF-voorwaarde is een syntaxisfout, en hetzelfde geldt na elke ELSIF-voorwaarde in een geketende instructie. ELSE neemt daarentegen geen voorwaarde en dus geen THEN.

THEN carries no logic of its own, it is a structural marker. Complex conditions built with AND, OR, NOT, and parentheses all sit on the left side of THEN, and the block on the right side can contain any statements valid in the sub-language, including nested IF...THEN blocks. Every IF opened with THEN must eventually be closed with ENDIF.

Het keyword komt ook terug in de compacte lezing van ProBuilder-voorwaarden als één concept: voorwaarde, THEN, actie, ENDIF. Die volgorde in gedachten houden lost de meeste syntaxisfouten rond voorwaardelijke blokken op.

THEN behaves identically across all four sub-languages. Indicator code, strategy code, and screener code all use the same IF...THEN...ENDIF structure, so conditional logic written for one context ports directly to the others as long as the statements inside the block are valid there.

Voorbeelden

Voorbeeld 1, Bullish bars markeren (Indicator)

probuilder
// Draw a green up arrow under every bar that closed above its open
IF close > open THEN
  DRAWARROWUP(barindex, low) COLOURED(0, 255, 0)
ENDIF
RETURN

Wanneer de voorwaarde links van THEN waar is, wordt de tekeninstructie in het blok uitgevoerd en verschijnt er een pijl onder de bar.

Voorbeeld 2, Voorwaardelijke instap met een samengestelde voorwaarde (ProOrder)

probuilder
// Enter long when the fast average crosses over the slow one
// and the market is not already long
fastMA = average[20](close)
slowMA = average[100](close)

IF fastMA crosses over slowMA AND NOT longonmarket THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

De hele samengestelde expressie staat vóór THEN. De orderinstructie na THEN wordt alleen uitgevoerd op bars waar beide delen gelden.

Voorbeeld 3, Takken maken met ELSIF en THEN (ProScreener)

probuilder
// Classify momentum, THEN is required after IF and after ELSIF
mom = close - close[10]

IF mom > 0 THEN
  state = 1
ELSIF mom < 0 THEN
  state = -1
ELSE
  state = 0
ENDIF

SCREENER[state = 1] (mom AS "10-bar momentum")

Elke voorwaardelijke tak met een voorwaarde eindigt op THEN. De ELSE-tak heeft geen voorwaarde en dus geen THEN.

Veelvoorkomende fouten en valkuilen

  • Ontbrekende THEN. IF close > open DRAWARROWUP(barindex, low) ENDIF compileert niet. Elke IF- en elke ELSIF-voorwaarde moet door THEN worden gevolgd voordat het blok begint.
  • THEN after ELSE. ELSE introduces the fallback block directly and takes neither a condition nor a THEN. Writing ELSE THEN is een syntaxisfout.
  • Niet-gesloten blok. Een THEN-blok loopt tot ELSIF, ELSE of ENDIF. ENDIF vergeten zorgt ervoor dat de compiler volgende instructies in het blok opslokt en een fout meldt ver van de oorzaak.
  • Instructies aan de voorwaardekant. Alles tussen IF en THEN moet herleidbaar zijn tot waar of onwaar. Toewijzingen of losse rekenkundige expressies op die plek compileren niet.
  • IF, opent de voorwaardelijke instructie waar THEN bij hoort.
  • ELSE, terugvaltak die wordt uitgevoerd wanneer geen voorwaarde overeenkwam.
  • ELSIF, extra voorwaarde in hetzelfde blok, ook gevolgd door THEN.
  • ENDIF, sluit de voorwaardelijke instructie af.
  • AND, combineert voorwaarden aan de linkerkant van THEN.
  • OR, alternatieve voorwaarden aan de linkerkant van THEN.
  • NOT, ontkent een voorwaarde vóór THEN.