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

Sintaxis

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

Con ramas opcionales:

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

Cómo funciona

ProBuilder evalúa la expresión entre paréntesis en cada bar del gráfico. Cuando el resultado es verdadero, se ejecuta el código entre THEN y ENDIF. Cuando el resultado es falso, el bloque se omite por completo y la ejecución continúa con lo que sigue a ENDIF.

Las condiciones pueden ser comparaciones simples como a < b o close > open, o expresiones compuestas construidas con los operadores lógicos AND, OR, NOT y XOR. Los paréntesis controlan la precedencia igual que en matemáticas.

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.

Ejemplos

Ejemplo 1, Comparación numérica básica (Indicador)

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

El bloque IF se ejecuta porque 10 es menor que 20, por lo que c pasa a ser 30 y se devuelve ese valor.

Ejemplo 2, Condición compuesta para un screener (ProScreener)

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

El screener se activa solo cuando el RSI está sobrevendido AND el ATR confirma suficiente volatilidad, un filtro de calidad habitual para suprimir señales en mercados sin actividad.

Ejemplo 3, Detección de régimen de tres estados (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 permite ramificaciones múltiples sin IFs anidados. La variable regime lleva entonces la señal al resto de la estrategia.

Errores y trampas habituales

  • Falta ENDIF. Cada IF necesita su ENDIF correspondiente. El compilador suele informar del error varias líneas por debajo del fallo real. Al depurar, cuenta los pares de apertura y cierre desde el principio del script hacia abajo.
  • La igualdad con =. ProBuilder utiliza un único = tanto para asignación como para comparación. Dentro de una condición IF = actúa como comparación. Fuera asigna. Mezclar ambos significados en una misma línea es una fuente frecuente de errores confusos.
  • Olvidar THEN. La palabra clave THEN es obligatoria entre la condición y el cuerpo del bloque. IF (a < b) c = a + b ENDIF produce un error de sintaxis.
  • Condiciones que devuelven valores no booleanos. Las expresiones matemáticas como IF (a + b) no son válidos. La condición debe reducirse a true o false.
  • ELSE, rama alternativa cuando ninguna condición IF o ELSIF coincide.
  • ELSIF, condiciones alternativas encadenadas dentro del mismo bloque.
  • ENDIF, cierra un bloque IF.
  • THEN, obligatorio entre la condición y el cuerpo del bloque.
  • AND, conjunción lógica dentro de condiciones compuestas.
  • OR, disyunción lógica dentro de condiciones compuestas.
  • NOT, negación lógica.
  • WHILE, bucle que se ejecuta mientras se cumple una condición.