Iscriviti ora
Istruzioni/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.

Sintassi

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

Con rami opzionali:

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

Come funziona

ProBuilder valuta l'espressione tra parentesi su ogni bar del grafico. Quando il risultato è vero, il codice tra THEN ed ENDIF viene eseguito. Quando il risultato è falso, il blocco viene saltato completamente e l'esecuzione continua con ciò che segue ENDIF.

Le condizioni possono essere confronti semplici come a < b o close > open, o espressioni composte costruite con gli operatori logici AND, OR, NOT e XOR. Le parentesi controllano la precedenza come in matematica.

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.

Esempi

Esempio 1, Confronto numerico di base (Indicatore)

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

Il blocco IF viene eseguito perché 10 è minore di 20, quindi c diventa 30 e quel valore viene restituito.

Esempio 2, Condizione composta per uno screener (ProScreener)

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

Lo screener scatta solo quando l'RSI è in ipervenduto AND l'ATR conferma volatilità sufficiente, un filtro di qualità comune per sopprimere i segnali nei mercati fermi.

Esempio 3, Rilevamento di regime a tre stati (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 consente ramificazioni multiple senza IF annidati. La variabile regime trasporta poi il segnale attraverso il resto della strategia.

Errori e insidie comuni

  • ENDIF mancante. Ogni IF richiede un ENDIF corrispondente. Il compilatore segnala spesso l'errore diverse righe sotto l'errore effettivo. Durante il debug, conta le coppie di apertura e chiusura dall'inizio dello script verso il basso.
  • L'uguaglianza con =. ProBuilder usa un singolo = sia per l'assegnazione sia per il confronto. All'interno di una condizione IF = funge da confronto. Al di fuori assegna. Mescolare i due significati sulla stessa riga è una frequente fonte di bug confusi.
  • Dimenticare THEN. La keyword THEN è obbligatoria tra la condizione e il corpo del blocco. IF (a < b) c = a + b ENDIF produce un errore di sintassi.
  • Condizioni che restituiscono valori non booleani. Espressioni matematiche come IF (a + b) non sono valide. La condizione deve ridursi a true o false.
  • ELSE, ramo di ripiego quando nessuna condizione IF o ELSIF corrisponde.
  • ELSIF, condizioni alternative concatenate all'interno dello stesso blocco.
  • ENDIF, chiude un blocco IF.
  • THEN, richiesto tra la condizione e il corpo del blocco.
  • AND, congiunzione logica all'interno di condizioni composte.
  • OR, disgiunzione logica all'interno di condizioni composte.
  • NOT, negazione logica.
  • WHILE, ciclo che viene eseguito finché una condizione è vera.