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.
Syntaxis
IF (condition) THEN
// code to execute when condition is true
ENDIFMet optionele takken:
IF (condition1) THEN
// runs if condition1 is true
ELSIF (condition2) THEN
// runs if condition2 is true
ELSE
// runs if neither is true
ENDIFHoe het werkt
ProBuilder evalueert de expressie tussen haakjes op elke bar van de grafiek. Is het resultaat waar, dan wordt de code tussen THEN en ENDIF uitgevoerd. Is het resultaat onwaar, dan wordt het blok volledig overgeslagen en gaat de uitvoering verder met wat er na ENDIF komt.
Voorwaarden kunnen eenvoudige vergelijkingen zijn zoals a < b of close > open, of samengestelde expressies die zijn opgebouwd met de logische operatoren AND, OR, NOT en XOR. Haakjes bepalen de voorrang net zoals in de wiskunde.
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.
Voorbeelden
Voorbeeld 1, Basis numerieke vergelijking (Indicator)
a = 10
b = 20
// Compute c only when a is smaller
IF (a < b) THEN
c = a + b
ENDIF
RETURN cHet IF-blok wordt uitgevoerd omdat 10 kleiner is dan 20, dus wordt c gelijk aan 30 en die waarde wordt teruggegeven.
Voorbeeld 2, Samengestelde voorwaarde voor een screener (ProScreener)
myRSI = RSI[14](close)
myATR = AverageTrueRange[14](close)
IF (myRSI < 30) AND (myATR > 5) THEN
screener[myRSI] = 1
ENDIFDe screener geeft alleen een signaal wanneer RSI oversold is EN de ATR voldoende volatiliteit bevestigt, een veelgebruikt kwaliteitsfilter om signalen in dode markten te onderdrukken.
Voorbeeld 3, Regimedetectie met drie toestanden (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 maakt meerwegvertakking mogelijk zonder geneste IF's. De variabele regime draagt het signaal vervolgens door de rest van de strategie.
Veelvoorkomende fouten en valkuilen
- ENDIF ontbreekt. Elke IF heeft een bijbehorende ENDIF nodig. De compiler meldt de fout vaak een aantal regels onder de werkelijke vergissing. Tel bij het debuggen de openende en sluitende paren van boven naar beneden door het script.
- Gelijkheid met
=. ProBuilder gebruikt één enkele=voor zowel toewijzing als vergelijking. Binnen een IF-conditie=werkt als vergelijking. Daarbuiten wijst het toe. Beide betekenissen op één regel mengen is een veelvoorkomende bron van verwarrende bugs. - THEN vergeten. Het keyword THEN is verplicht tussen de voorwaarde en de body van het blok.
IF (a < b) c = a + b ENDIFlevert een syntaxisfout op. - Voorwaarden die niet-booleaanse waarden teruggeven. Wiskundige uitdrukkingen zoals
IF (a + b)zijn ongeldig. De voorwaarde moet herleidbaar zijn tot true of false.
Gerelateerde instructies
ELSE, terugvaltak wanneer geen enkele IF- of ELSIF-voorwaarde van toepassing is.ELSIF, geketende alternatieve voorwaarden binnen hetzelfde blok.ENDIF, sluit een IF-blok af.THEN, verplicht tussen de voorwaarde en de body van het blok.AND, logische conjunctie binnen samengestelde voorwaarden.OR, logische disjunctie binnen samengestelde voorwaarden.NOT, logische negatie.WHILE, lus die loopt zolang een voorwaarde geldt.