Únete hoy
Instrucciones/probuilder · probacktest · proorder · proscreener

ELSIF

ELSIF en ProBuilder evalúa una nueva condición cuando falla la condición IF precedente, lo que permite que un mismo bloque compruebe varias condiciones exclusivas en secuencia estricta.

Sintaxis

probuilder
IF (condition1) THEN
  // runs when condition1 is true
ELSIF (condition2) THEN
  // runs when condition1 is false and condition2 is true
ELSE
  // runs when no condition matched
ENDIF

Cómo funciona

Las condiciones de una cadena IF/ELSIF se evalúan de arriba abajo. La primera que es verdadera gana: su bloque se ejecuta y todas las ramas restantes, incluida ELSE, se omiten. Cuando ninguna de las condiciones es verdadera, se ejecuta el bloque ELSE si existe, y en caso contrario la instrucción completa no hace nada.

Una instrucción IF puede llevar cualquier número de ramas ELSIF, cada una con su propia condición y su propio THEN. Esto produce una bifurcación plana de varias vías que es más fácil de leer que las instrucciones IF anidadas equivalentes, y solo necesita un único ENDIF.

El orden importa. Como la evaluación se detiene en la primera coincidencia, las condiciones más amplias colocadas al principio ocultarán las más específicas colocadas después. Pon primero los tests más específicos.

Ejemplos

Ejemplo 1, Puntuar un oscilador en tres estados (Indicador)

probuilder
myDPO = DPO[21](typicalprice)
IF (myDPO < 0) THEN
  // negative oscillator lowers the score
  result = result - 1
ELSIF (myDPO > 0) THEN
  // positive oscillator raises the score
  result = result + 1
ELSE
  // exactly zero leaves the score unchanged
  result = result
ENDIF
RETURN result
COLOURED(124,252,0)

La rama ELSIF solo se alcanza cuando el Detrended Price Oscillator no es negativo. Una lectura positiva incrementa la puntuación acumulada, una lectura de exactamente cero pasa a ELSE.

Ejemplo 2, Filtro de zonas del RSI (ProScreener)

probuilder
r = RSI[14](close)
// map the RSI reading onto three zones
IF r < 30 THEN
  zone = -1
ELSIF r > 70 THEN
  zone = 1
ELSE
  zone = 0
ENDIF
SCREENER[zone <> 0] (r AS "RSI 14")

Cada instrumento cae en exactamente una zona. El screener conserva solo los casos de sobreventa y de sobrecompra y muestra el valor bruto del RSI.

Ejemplo 3, Régimen de tendencia con position size graduado (ProOrder)

probuilder
DEFPARAM CumulateOrders = false
fast = Average[20](close)
slow = Average[50](close)
// grade the trend from strong to absent
IF fast > slow AND close > fast THEN
  size = 2
ELSIF fast > slow THEN
  size = 1
ELSE
  size = 0
ENDIF
IF size > 0 AND NOT onmarket THEN
  BUY size CONTRACT AT MARKET
ENDIF

El caso específico, precio por encima de un conjunto de medias ascendentes, se evalúa antes que el más amplio. Invertir las dos ramas haría inalcanzable el bloque de tendencia fuerte.

Errores y trampas habituales

  • Falta THEN tras la condición ELSIF. Cada ELSIF requiere su propio THEN, exactamente igual que IF. ELSIF (a > b) en su propia línea sin THEN no compila.
  • Escribirlo ELSEIF. La palabra clave es ELSIF, con una sola E. El compilador rechaza las variantes de otros lenguajes, como ELSEIF o ELIF.
  • Ramas inalcanzables. La evaluación se detiene en la primera condición verdadera. Una prueba amplia situada al principio, como r > 50 impide un posterior r > 70 rama se ejecute nunca, sin ningún aviso.
  • ELSIF colocado después de ELSE. ELSE must be the final branch. Any ELSIF following it is a syntax error, so keep the chain in the order IF, ELSIF, ELSE, ENDIF.
  • IF, abre la cadena condicional.
  • ELSE, alternativa incondicional tras todas las ramas ELSIF.
  • ENDIF, cierra toda la cadena, uno por IF sea cual sea el número de ramas.
  • THEN, obligatorio tras cada condición IF y ELSIF.
  • AND, construye condiciones compuestas dentro del test de una rama.
  • OR, condiciones alternativas dentro del test de una rama.