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
IF (condition) THEN
// statements
ELSE
// statements
ENDIFSå 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)
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)
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)
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
ENDIFEtt 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.
Relaterade instruktioner
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.