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
IF (condition) THEN
// code to execute when condition is true
ENDIFCon ramas opcionales:
IF (condition1) THEN
// runs if condition1 is true
ELSIF (condition2) THEN
// runs if condition2 is true
ELSE
// runs if neither is true
ENDIFCó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)
a = 10
b = 20
// Compute c only when a is smaller
IF (a < b) THEN
c = a + b
ENDIF
RETURN cEl 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)
myRSI = RSI[14](close)
myATR = AverageTrueRange[14](close)
IF (myRSI < 30) AND (myATR > 5) THEN
screener[myRSI] = 1
ENDIFEl 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)
// 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 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 ENDIFproduce 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.
Instrucciones relacionadas
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.