Únete hoy
Instrucciones/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.

Sintaxis

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

Cómo funciona

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.

Cada condición anidada necesita su propio ENDIF. El compilador empareja cada ENDIF con el IF sin cerrar más cercano situado por encima, de modo que el orden de cierre es el inverso del orden de apertura. La indentación no tiene ningún significado sintáctico en ProBuilder, pero indentar cada nivel de anidamiento hace visible el emparejamiento y es la principal defensa frente a bloques descompensados.

Un ENDIF que falta o que sobra es un error de compilación. El número de línea indicado apunta con frecuencia al final del script o a una instrucción no relacionada situada por debajo del error real, porque el compilador solo detecta el desequilibrio cuando se queda sin código.

Ejemplos

Ejemplo 1, Dirección a partir de dos medias móviles (Indicador)

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.

Ejemplo 2, Condiciones anidadas en 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")

Dos bloques IF se anidan, y cada uno tiene su propio ENDIF. El ENDIF interno cierra el test de volumen, el externo cierra el test del RSI.

Ejemplo 3, Lógica de entrada y de reversión (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 único bloque IF...ELSIF...ENDIF dirige los cruces alcistas a una entrada long y los cruces bajistas a una entrada short. Un solo ENDIF cierra toda la estructura.

Errores y trampas habituales

  • Falta ENDIF. Cada IF requiere exactamente un ENDIF. El compilador señala a menudo una línea muy por debajo de la omisión real, así que cuando aparezca el error, cuenta los pares IF y ENDIF desde el principio del script.
  • Un ENDIF por cadena ELSIF, no por rama. Las ramas ELSIF no llevan su propio ENDIF. Escribir un ENDIF después de cada ELSIF cierra el bloque antes de tiempo y suele producir una cascada de errores.
  • Instrucciones mal colocadas después de ENDIF. El código que debe ejecutarse solo cuando la condición se cumple tiene que estar por encima de ENDIF. Una instrucción desplazada por accidente por debajo de él se ejecuta en cada bar, lo que cambia el comportamiento sin ningún error de compilación.
  • Confusión con el anidamiento. Con varios bloques anidados, cada ENDIF se asocia al IF abierto más cercano. Una indentación coherente es la forma práctica de mantener los pares alineados durante la edición.
  • IF, abre el bloque condicional que ENDIF cierra.
  • THEN, obligatorio entre la condición y el cuerpo del bloque.
  • ELSE, rama alternativa dentro de un bloque IF.
  • ELSIF, condiciones alternativas encadenadas dentro del mismo bloque.
  • AND, combina condiciones en la cabecera IF.
  • OR, acepta cualquiera de varias condiciones en la cabecera IF.
  • NOT, niega una condición.
  • WHILE, estructura de bucle con su propia palabra clave de cierre, WEND.