Bli medlem idag
Instruktioner/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.

Syntax

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

Så fungerar det

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.

Nyckelordet är inte valfritt. Att utesluta THEN efter ett IF-villkor är ett syntaxfel, och samma gäller efter varje ELSIF-villkor i en kedjad sats. ELSE tar däremot inget villkor och därför inget 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.

Nyckelordet förekommer också i den kompakta enbegreppsläsningen av ProBuilders villkorssatser: villkor, THEN, åtgärd, ENDIF. Att ha den ordningen i minnet löser de flesta syntaxfel kring villkorliga block.

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.

Exempel

Exempel 1, Markera bullish barer (Indikator)

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

När villkoret till vänster om THEN är sant körs ritsatsen i blocket och en pil visas under baren.

Exempel 2, Villkorlig entry med ett sammansatt villkor (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

Hela det sammansatta uttrycket står före THEN. Ordersatsen efter THEN körs bara på barer där båda delarna gäller.

Exempel 3, Grenar med ELSIF och 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")

Varje villkorlig gren som bär ett villkor slutar med THEN. ELSE-grenen har inget villkor och därför inget THEN.

Vanliga fel och fallgropar

  • Saknat THEN. IF close > open DRAWARROWUP(barindex, low) ENDIF kompilerar inte. Varje IF- och varje ELSIF-villkor måste följas av THEN innan blocket börjar.
  • THEN after ELSE. ELSE introduces the fallback block directly and takes neither a condition nor a THEN. Writing ELSE THEN är ett syntaxfel.
  • Oavslutat block. Ett THEN-block körs till ELSIF, ELSE eller ENDIF. Att glömma ENDIF gör att kompilatorn sväljer efterföljande satser in i blocket och rapporterar ett fel långt från orsaken.
  • Satser på villkorssidan. Allt mellan IF och THEN måste kunna reduceras till sant eller falskt. Tilldelningar eller rena aritmetiska uttryck på den positionen kompilerar inte.
  • IF, inleder det villkorliga uttryck som THEN hör till.
  • ELSE, reservgren som körs när inget villkor stämde.
  • ELSIF, ytterligare villkor i samma block, också följt av THEN.
  • ENDIF, avslutar det villkorliga uttrycket.
  • AND, kombinerar villkor på vänster sida av THEN.
  • OR, alternativa villkor på vänster sida av THEN.
  • NOT, negerar ett villkor före THEN.