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
IF (condition) THEN
// code to execute when condition is true
ENDIFCon rami opzionali:
IF (condition1) THEN
// runs if condition1 is true
ELSIF (condition2) THEN
// runs if condition2 is true
ELSE
// runs if neither is true
ENDIFCome 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)
a = 10
b = 20
// Compute c only when a is smaller
IF (a < b) THEN
c = a + b
ENDIF
RETURN cIl 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)
myRSI = RSI[14](close)
myATR = AverageTrueRange[14](close)
IF (myRSI < 30) AND (myATR > 5) THEN
screener[myRSI] = 1
ENDIFLo 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)
// 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 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 ENDIFproduce 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.
Istruzioni correlate
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.