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.
Syntaks
IF (condition) THEN
// statements
ELSE
// statements
ENDIFSlik fungerer 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østede betingelser trenger hver sin egen ENDIF. Kompilatoren matcher hver ENDIF med den nærmeste ulukkede IF over den, så lukkerekkefølgen er den omvendte av åpningsrekkefølgen. Innrykk har ingen syntaktisk betydning i ProBuilder, men å rykke inn hvert nøstenivå gjør paringen synlig og er hovedforsvaret mot blokker som ikke matcher.
En manglende eller overflødig ENDIF er en kompileringsfeil. Det rapporterte linjenummeret peker ofte på slutten av skriptet eller på en urelatert setning under den egentlige feilen, fordi kompilatoren først merker ubalansen når den går tom for kode.
Eksempler
Eksempel 1, Retning fra to glidende gjennomsnitt (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.
Eksempel 2, Nøstede betingelser 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")To IF-blokker nøstes, og hver har sin egen ENDIF. Den indre ENDIF lukker volumtesten, den ytre lukker RSI-testen.
Eksempel 3, Inngangs- og reverseringslogikk (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
ENDIFEn enkelt IF...ELSIF...ENDIF-blokk ruter bullish kryss til en long-inngang og bearish kryss til en short-inngang. Én ENDIF lukker hele strukturen.
Vanlige feil og fallgruver
- Manglende ENDIF. Hver IF krever nøyaktig én ENDIF. Kompilatoren flagger ofte en linje langt under den faktiske utelatelsen, så når feilen oppstår, tell IF- og ENDIF-par fra toppen av skriptet.
- Én ENDIF per ELSIF-kjede, ikke per gren. ELSIF-grener tar ikke sin egen ENDIF. Å skrive en ENDIF etter hver ELSIF lukker blokken for tidlig og gir vanligvis en kaskade av feil.
- Feilplasserte setninger etter ENDIF. Kode som bare skal kjøre når betingelsen holder, må stå over ENDIF. En setning som ved et uhell flyttes under den, kjøres på hver bar, noe som endrer oppførselen uten noen kompileringsfeil.
- Forvirring rundt nøsting. Med flere nøstede blokker bindes hver ENDIF til den nærmeste åpne IF. Konsekvent innrykk er den praktiske måten å holde parene på linje mens du redigerer.
Relaterte instruksjoner
IF, åpner den betingede blokken som ENDIF lukker.THEN, påkrevd mellom betingelsen og blokkinnholdet.ELSE, reservegren inne i en IF-blokk.ELSIF, lenkede alternative betingelser inne i samme blokk.AND, kombinerer betingelser i IF-hodet.OR, godtar hvilken som helst av flere betingelser i IF-hodet.NOT, negerer en betingelse.WHILE, løkkekonstruksjon med sitt eget avsluttende nøkkelord, WEND.