Bli medlem idag
Instruktioner/probuilder · probacktest · proorder · proscreener

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

probuilder
IF (condition) THEN
  // code to execute when condition is true
ENDIF

Med valfria grenar:

probuilder
IF (condition1) THEN
  // runs if condition1 is true
ELSIF (condition2) THEN
  // runs if condition2 is true
ELSE
  // runs if neither is true
ENDIF

Så 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)

probuilder
a = 10
b = 20
// Compute c only when a is smaller
IF (a < b) THEN
  c = a + b
ENDIF
RETURN c

IF-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)

probuilder
myRSI = RSI[14](close)
myATR = AverageTrueRange[14](close)
IF (myRSI < 30) AND (myATR > 5) THEN
  screener[myRSI] = 1
ENDIF

Screenern 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)

probuilder
// 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
ENDIF

ELSIF 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 ENDIF ger 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.
  • 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.