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

Syntax

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

Så fungerar det

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.

Nästlade villkor behöver vart och ett sitt eget ENDIF. Kompilatorn matchar varje ENDIF mot närmaste oavslutade IF ovanför det, så avslutningsordningen är den omvända av öppningsordningen. Indrag har ingen syntaktisk betydelse i ProBuilder, men att dra in varje nästlingsnivå gör parningen synlig och är det främsta skyddet mot felmatchade block.

Ett saknat eller överflödigt ENDIF är ett kompileringsfel. Det rapporterade radnumret pekar ofta på slutet av skriptet eller på en orelaterad sats under det verkliga felet, eftersom kompilatorn bara upptäcker obalansen när koden tar slut.

Exempel

Exempel 1, Riktning från två glidande medelvärden (Indikator)

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.

Exempel 2, Nästlade villkor i en 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")

Två IF-block nästlas, och varje har sitt eget ENDIF. Det inre ENDIF avslutar volymtestet, det yttre avslutar RSI-testet.

Exempel 3, Entry- och vändningslogik (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

Ett enda IF...ELSIF...ENDIF-block dirigerar bullish korsningar till ett long-entry och bearish korsningar till ett short-entry. Ett ENDIF avslutar hela strukturen.

Vanliga fel och fallgropar

  • ENDIF saknas. Varje IF kräver exakt ett ENDIF. Kompilatorn flaggar ofta en rad långt under den faktiska utelämningen, så när felet dyker upp, räkna IF- och ENDIF-par från skriptets början.
  • Ett ENDIF per ELSIF-kedja, inte per gren. ELSIF-grenar tar inte sitt eget ENDIF. Att skriva ett ENDIF efter varje ELSIF avslutar blocket för tidigt och ger oftast en kaskad av fel.
  • Felplacerade satser efter ENDIF. Kod som är avsedd att köras bara när villkoret gäller måste ligga ovanför ENDIF. En sats som av misstag flyttats under det körs på varje bar, vilket ändrar beteendet utan något kompileringsfel.
  • Förvirring vid nästling. Med flera nästlade block binds varje ENDIF till närmaste öppna IF. Konsekvent indrag är det praktiska sättet att hålla paren i linje medan man redigerar.
  • IF, öppnar det villkorliga blocket som ENDIF avslutar.
  • THEN, obligatoriskt mellan villkoret och blockets innehåll.
  • ELSE, reservgren inne i ett IF-block.
  • ELSIF, kedjade alternativa villkor inom samma block.
  • AND, kombinerar villkor i IF-huvudet.
  • OR, accepterar vilket som helst av flera villkor i IF-huvudet.
  • NOT, negerar ett villkor.
  • WHILE, loopkonstruktion med sitt eget avslutande nyckelord, WEND.