IF
IF in ProBuilder runs a block of code only when its boolean condition is true. The foundation of conditional logic in every ProRealTime™ program.
Syntaks
IF (condition) THEN
// code to execute when condition is true
ENDIFMed valgfrie grener:
IF (condition1) THEN
// runs if condition1 is true
ELSIF (condition2) THEN
// runs if condition2 is true
ELSE
// runs if neither is true
ENDIFSlik fungerer det
ProBuilder evaluerer uttrykket i parentes på hver bar i diagrammet. Når resultatet er sant, kjøres koden mellom THEN og ENDIF. Når resultatet er falskt, hoppes blokken helt over og kjøringen fortsetter med det som følger etter ENDIF.
Betingelser kan være enkle sammenligninger som a < b eller close > open, eller sammensatte uttrykk bygget med de logiske operatorene AND, OR, NOT og XOR. Parenteser styrer presedens på samme måte som i matematikk.
IF blocks may be nested arbitrarily deep, but readability degrades quickly past two or three levels. Prefer flat structures with combined conditions, or refactor deep nesting into named intermediate variables.
Eksempler
Eksempel 1, Enkel numerisk sammenligning (Indikator)
a = 10
b = 20
// Compute c only when a is smaller
IF (a < b) THEN
c = a + b
ENDIF
RETURN cIF-blokken kjøres fordi 10 er mindre enn 20, så c blir 30 og den verdien returneres.
Eksempel 2, Sammensatt betingelse for en screener (ProScreener)
myRSI = RSI[14](close)
myATR = AverageTrueRange[14](close)
IF (myRSI < 30) AND (myATR > 5) THEN
screener[myRSI] = 1
ENDIFScreeneren utløses bare når RSI er oversolgt AND ATR bekrefter nok volatilitet, et vanlig kvalitetsfilter for å dempe signaler i døde markeder.
Eksempel 3, Regimedeteksjon med tre tilstander (ProOrder)
// Classify the current trend as up, down, or flat
fastMA = Average[20](close)
slowMA = Average[50](close)
IF (fastMA > slowMA) THEN
regime = 1
ELSIF (fastMA < slowMA) THEN
regime = -1
ELSE
regime = 0
ENDIFELSIF gir forgrening i flere retninger uten nøstede IF-er. Variabelen regime fører deretter signalet videre gjennom resten av strategien.
Vanlige feil og fallgruver
- Manglende ENDIF. Hver IF trenger en tilhørende ENDIF. Kompilatoren rapporterer ofte feilen flere linjer under den faktiske feilen. Når du feilsøker, tell åpnende og lukkende par fra toppen av skriptet og nedover.
- Likhet med
=. ProBuilder bruker én enkelt=for både tilordning og sammenligning. Inne i en IF-betingelse=fungerer som sammenligning. Utenfor tilordner den. Å blande begge betydningene på én linje er en vanlig kilde til forvirrende feil. - Å glemme THEN. Nøkkelordet THEN er obligatorisk mellom betingelsen og blokkinnholdet.
IF (a < b) c = a + b ENDIFgir en syntaksfeil. - Betingelser som returnerer ikke-boolske verdier. Matematiske uttrykk som
IF (a + b)er ugyldige. Betingelsen må reduseres til true eller false.
Relaterte instruksjoner
ELSE, reservegren når ingen IF- eller ELSIF-betingelse er oppfylt.ELSIF, lenkede alternative betingelser inne i samme blokk.ENDIF, avslutter en IF-blokk.THEN, påkrevd mellom betingelsen og blokkinnholdet.AND, logisk konjunksjon inne i sammensatte betingelser.OR, logisk disjunksjon inne i sammensatte betingelser.NOT, logisk negasjon.WHILE, løkke som kjører så lenge en betingelse holder.