THEN
THEN links an IF condition to the block of ProBuilder code that runs when the condition is true. Mandatory in every IF statement, before ELSE or ELSIF.
Sintaxis
IF condition THEN
// code executed when the condition is true
ENDIFCómo funciona
THEN is the bridge between a condition and its consequences. The compiler reads everything between IF and THEN as the boolean expression to evaluate, and everything between THEN and the next branch keyword (ELSIF, ELSE, or ENDIF) as the block to execute when that expression is true.
La palabra clave no es opcional. Omitir THEN después de una condición IF es un error de sintaxis, y lo mismo se aplica después de cada condición ELSIF en una instrucción encadenada. ELSE, en cambio, no admite condición y, por tanto, tampoco THEN.
THEN carries no logic of its own, it is a structural marker. Complex conditions built with AND, OR, NOT, and parentheses all sit on the left side of THEN, and the block on the right side can contain any statements valid in the sub-language, including nested IF...THEN blocks. Every IF opened with THEN must eventually be closed with ENDIF.
La palabra clave aparece también en la lectura compacta de un solo concepto de los condicionales de ProBuilder: condición, THEN, acción, ENDIF. Tener presente ese orden resuelve la mayoría de los errores de sintaxis en torno a los bloques condicionales.
THEN behaves identically across all four sub-languages. Indicator code, strategy code, and screener code all use the same IF...THEN...ENDIF structure, so conditional logic written for one context ports directly to the others as long as the statements inside the block are valid there.
Ejemplos
Ejemplo 1, Marcar bars alcistas (Indicador)
// Draw a green up arrow under every bar that closed above its open
IF close > open THEN
DRAWARROWUP(barindex, low) COLOURED(0, 255, 0)
ENDIF
RETURNCuando la condición a la izquierda de THEN es verdadera, la instrucción de dibujo del bloque se ejecuta y aparece una flecha debajo de la bar.
Ejemplo 2, Entrada condicional con una condición compuesta (ProOrder)
// Enter long when the fast average crosses over the slow one
// and the market is not already long
fastMA = average[20](close)
slowMA = average[100](close)
IF fastMA crosses over slowMA AND NOT longonmarket THEN
BUY 1 CONTRACT AT MARKET
ENDIFToda la expresión compuesta se sitúa antes de THEN. La instrucción de orden que sigue a THEN se ejecuta solo en las bars en las que se cumplen ambas partes.
Ejemplo 3, Ramificación con ELSIF y THEN (ProScreener)
// Classify momentum, THEN is required after IF and after ELSIF
mom = close - close[10]
IF mom > 0 THEN
state = 1
ELSIF mom < 0 THEN
state = -1
ELSE
state = 0
ENDIF
SCREENER[state = 1] (mom AS "10-bar momentum")Cada rama condicional que lleva una condición termina en THEN. La rama ELSE no tiene condición y, por tanto, no tiene THEN.
Errores y trampas habituales
- THEN ausente.
IF close > open DRAWARROWUP(barindex, low) ENDIFno compila. Toda condición IF y toda condición ELSIF deben ir seguidas de THEN antes de que empiece el bloque. - THEN after ELSE. ELSE introduces the fallback block directly and takes neither a condition nor a THEN. Writing
ELSE THENes un error de sintaxis. - Bloque sin cerrar. Un bloque THEN se ejecuta hasta ELSIF, ELSE o ENDIF. Olvidar ENDIF hace que el compilador absorba las instrucciones siguientes dentro del bloque y notifique un error lejos de la causa.
- Instrucciones en el lado de la condición. Todo lo que se encuentre entre IF y THEN debe reducirse a verdadero o falso. Las asignaciones o las expresiones aritméticas sueltas en esa posición no compilan.
Instrucciones relacionadas
IF, abre la instrucción condicional a la que pertenece THEN.ELSE, rama alternativa que se ejecuta cuando ninguna condición se ha cumplido.ELSIF, condición adicional en el mismo bloque, seguida también de THEN.ENDIF, cierra la instrucción condicional.AND, combina condiciones en el lado izquierdo de THEN.OR, condiciones alternativas en el lado izquierdo de THEN.NOT, niega una condición antes de THEN.