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.
Syntaxe
IF (condition) THEN
// code to execute when condition is true
ENDIFAvec branches optionnelles :
IF (condition1) THEN
// runs if condition1 is true
ELSIF (condition2) THEN
// runs if condition2 is true
ELSE
// runs if neither is true
ENDIFComment ça marche
ProBuilder évalue l'expression entre parenthèses sur chaque bar du graphique. Lorsque le résultat est vrai, le code entre THEN et ENDIF s'exécute. Lorsque le résultat est faux, le bloc est entièrement ignoré et l'exécution continue avec ce qui suit ENDIF.
Les conditions peuvent être de simples comparaisons comme a < b ou close > open, ou des expressions composées construites avec les opérateurs logiques AND, OR, NOT et XOR. Les parenthèses contrôlent la priorité comme en mathématiques.
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.
Exemples
Exemple 1, Comparaison numérique de base (Indicateur)
a = 10
b = 20
// Compute c only when a is smaller
IF (a < b) THEN
c = a + b
ENDIF
RETURN cLe bloc IF s'exécute parce que 10 est inférieur à 20, donc c devient 30 et cette valeur est retournée.
Exemple 2, Condition composée pour un screener (ProScreener)
myRSI = RSI[14](close)
myATR = AverageTrueRange[14](close)
IF (myRSI < 30) AND (myATR > 5) THEN
screener[myRSI] = 1
ENDIFLe screener se déclenche uniquement lorsque le RSI est en survente ET que l'ATR confirme une volatilité suffisante, un filtre de qualité courant pour supprimer les signaux dans les marchés sans vie.
Exemple 3, Détection de régime à trois états (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 permet un branchement à plusieurs voies sans IF imbriqués. La variable regime transmet ensuite le signal au reste de la stratégie.
Erreurs et pièges courants
- ENDIF manquant. Chaque IF doit avoir un ENDIF correspondant. Le compilateur signale souvent l'erreur plusieurs lignes en dessous de l'erreur réelle. Lors du débogage, comptez les paires d'ouverture et de fermeture depuis le haut du script vers le bas.
- L'égalité avec
=. ProBuilder utilise un seul=à la fois pour l'affectation et la comparaison. Dans une condition IF=agit comme une comparaison. En dehors, il affecte. Mélanger les deux sens sur une même ligne est une source fréquente de bugs déroutants. - Oublier THEN. Le mot-clé THEN est obligatoire entre la condition et le corps du bloc.
IF (a < b) c = a + b ENDIFproduit une erreur de syntaxe. - Conditions qui renvoient des valeurs non booléennes. Les expressions mathématiques telles que
IF (a + b)sont invalides. La condition doit se réduire à true ou false.
Instructions liées
ELSE, branche de repli lorsqu'aucune condition IF ou ELSIF ne correspond.ELSIF, conditions alternatives chaînées dans le même bloc.ENDIF, ferme un bloc IF.THEN, requis entre la condition et le corps du bloc.AND, conjonction logique dans les conditions composées.OR, disjonction logique dans les conditions composées.NOT, négation logique.WHILE, boucle qui s'exécute tant qu'une condition est vraie.