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.
Syntax
IF (condition) THEN
// code to execute when condition is true
ENDIFMed valfria grenar:
IF (condition1) THEN
// runs if condition1 is true
ELSIF (condition2) THEN
// runs if condition2 is true
ELSE
// runs if neither is true
ENDIFSå fungerar det
ProBuilder utvärderar uttrycket i parentesen på varje bar i diagrammet. När resultatet är sant körs koden mellan THEN och ENDIF. När resultatet är falskt hoppas blocket över helt och körningen fortsätter med det som följer efter ENDIF.
Villkor kan vara enkla jämförelser som a < b eller close > open, eller sammansatta uttryck byggda med de logiska operatorerna AND, OR, NOT och XOR. Parenteser styr prioritetsordningen på samma sätt som i matematik.
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.
Exempel
Exempel 1, Enkel numerisk jämförelse (Indikator)
a = 10
b = 20
// Compute c only when a is smaller
IF (a < b) THEN
c = a + b
ENDIF
RETURN cIF-blocket körs eftersom 10 är mindre än 20, så c blir 30 och det värdet returneras.
Exempel 2, Sammansatt villkor för en screener (ProScreener)
myRSI = RSI[14](close)
myATR = AverageTrueRange[14](close)
IF (myRSI < 30) AND (myATR > 5) THEN
screener[myRSI] = 1
ENDIFScreenern utlöses bara när RSI är översåld AND ATR bekräftar tillräcklig volatilitet, ett vanligt kvalitetsfilter för att dämpa signaler i döda marknader.
Exempel 3, Regimdetektering med tre tillstånd (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 tillåter flervägsgrenar utan nästlade IF-satser. Variabeln regime för sedan signalen vidare genom resten av strategin.
Vanliga fel och fallgropar
- ENDIF saknas. Varje IF behöver ett matchande ENDIF. Kompilatorn rapporterar ofta felet flera rader under det faktiska misstaget. Vid felsökning, räkna öppnande och stängande par från skriptets början och nedåt.
- Likhet med
=. ProBuilder använder en enda=för både tilldelning och jämförelse. Inuti ett IF-villkor=fungerar som jämförelse. Utanför tilldelar den. Att blanda båda betydelserna på samma rad är en vanlig källa till förvirrande buggar. - Att glömma THEN. Nyckelordet THEN är obligatoriskt mellan villkoret och blockets kropp.
IF (a < b) c = a + b ENDIFger ett syntaxfel. - Villkor som returnerar icke-booleska värden. Matematiska uttryck som
IF (a + b)är ogiltiga. Villkoret måste reduceras till true eller false.
Relaterade instruktioner
ELSE, reservgren när inget IF- eller ELSIF-villkor matchar.ELSIF, kedjade alternativa villkor inom samma block.ENDIF, avslutar ett IF-block.THEN, obligatoriskt mellan villkoret och blockets innehåll.AND, logisk konjunktion i sammansatta villkor.OR, logisk disjunktion i sammansatta villkor.NOT, logisk negation.WHILE, loop som körs så länge ett villkor gäller.