Rejoignez-nous
Instructions/probuilder · probacktest · proorder · proscreener

ENDIF

ENDIF in ProBuilder closes a conditional block opened by IF. Every IF needs a matching ENDIF, including nested blocks and blocks with ELSE or ELSIF branches.

Syntaxe

probuilder
IF (condition) THEN
  // statements
ELSE
  // statements
ENDIF

Comment ça marche

ENDIF marks the point where conditional execution stops and unconditional execution resumes. Everything between IF and ENDIF belongs to the conditional block; everything after ENDIF runs on every bar regardless of the condition. One ENDIF closes one IF, no matter how many ELSIF branches sit in between, and the optional ELSE branch also falls inside the same block.

Les conditions imbriquées ont chacune besoin de leur propre ENDIF. Le compilateur associe chaque ENDIF au IF non fermé le plus proche au-dessus de lui, l'ordre de fermeture est donc l'inverse de l'ordre d'ouverture. L'indentation n'a aucune valeur syntaxique en ProBuilder, mais indenter chaque niveau d'imbrication rend l'appariement visible et constitue la principale protection contre les blocs mal appariés.

Un ENDIF manquant ou en trop est une erreur de compilation. Le numéro de ligne signalé pointe fréquemment vers la fin du script ou vers une instruction sans rapport située sous l'erreur réelle, car le compilateur ne remarque le déséquilibre qu'une fois arrivé au bout du code.

Exemples

Exemple 1, Direction à partir de deux moyennes mobiles (Indicateur)

probuilder
a = average[10](close)
b = exponentialaverage[20](close)
// Compare the two averages and encode the result as +1 or -1
IF (a > b) THEN
  result = 1
ELSE
  result = -1
ENDIF
RETURN result AS "direction"

The block assigns 1 when the simple average sits above the exponential average and -1 otherwise. ENDIF closes the block so the RETURN below always executes.

Exemple 2, Conditions imbriquées dans un screener (ProScreener)

probuilder
match = 0
IF RSI[14](close) < 30 THEN
  // Inner block only runs when the outer condition passed
  IF volume > Average[20](volume) THEN
    match = 1
  ENDIF
ENDIF
SCREENER[match] (RSI[14](close) AS "RSI")

Deux blocs IF s'imbriquent, et chacun a son propre ENDIF. Le ENDIF interne ferme le test de volume, l'externe ferme le test RSI.

Exemple 3, Logique d'entrée et de retournement (ProOrder)

probuilder
fast = ExponentialAverage[9](close)
slow = ExponentialAverage[21](close)
// One block handles both directions through ELSIF
IF fast CROSSES OVER slow THEN
  BUY 1 CONTRACT AT MARKET
ELSIF fast CROSSES UNDER slow THEN
  SELLSHORT 1 CONTRACT AT MARKET
ENDIF

Un unique bloc IF...ELSIF...ENDIF dirige les croisements haussiers vers une entrée long et les croisements baissiers vers une entrée short. Un seul ENDIF ferme toute la structure.

Erreurs et pièges courants

  • ENDIF manquant. Chaque IF exige exactement un ENDIF. Le compilateur signale souvent une ligne bien en dessous de l'omission réelle, donc lorsque l'erreur apparaît, comptez les paires IF et ENDIF depuis le début du script.
  • Un ENDIF par chaîne ELSIF, pas par branche. Les branches ELSIF ne prennent pas leur propre ENDIF. Écrire un ENDIF après chaque ELSIF ferme le bloc trop tôt et produit généralement une cascade d'erreurs.
  • Instructions mal placées après ENDIF. Le code destiné à ne s'exécuter que lorsque la condition est vraie doit se trouver au-dessus de ENDIF. Une instruction déplacée par accident en dessous s'exécute sur chaque bar, ce qui change le comportement sans aucune erreur de compilation.
  • Confusion d'imbrication. Avec plusieurs blocs imbriqués, chaque ENDIF se rattache au IF ouvert le plus proche. Une indentation cohérente est le moyen pratique de garder les paires alignées pendant l'édition.
  • IF, ouvre le bloc conditionnel que ENDIF ferme.
  • THEN, requis entre la condition et le corps du bloc.
  • ELSE, branche de repli à l'intérieur d'un bloc IF.
  • ELSIF, conditions alternatives chaînées dans le même bloc.
  • AND, combine des conditions dans l'en-tête IF.
  • OR, accepte l'une quelconque de plusieurs conditions dans l'en-tête IF.
  • NOT, nie une condition.
  • WHILE, structure de boucle avec son propre mot-clé de fermeture, WEND.