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

OR

OR en ProBuilder es un operador lógico que devuelve verdadero cuando al menos una de sus condiciones es verdadera. Cubre la sintaxis, la precedencia y ejemplos resueltos.

Sintaxis

probuilder
condition1 OR condition2

Cómo funciona

OR evalúa las condiciones de ambos lados y devuelve true si alguna de las dos es cierta, o si ambas lo son. El resultado es false solo cuando todos los operandos son false. Añadir más condiciones con más OR operadores amplía la prueba, ya que una sola coincidencia hace verdadera toda la expresión.

La precedencia importa cuando OR comparte una expresión con AND y NOT. NOT tiene mayor precedencia, luego AND, luego OR. Así que a OR b AND c agrupa como a OR (b AND c). Cuando el orden previsto no resulta obvio a primera vista, añade paréntesis para que la lógica se lea exactamente como se pretende.

OR se comporta de forma idéntica en los indicadores de ProBuilder, ProScreener, ProBacktest y ProOrder, ya que los cuatro comparten las mismas reglas de evaluación booleana.

Ejemplos

Ejemplo 1, cualquiera de las dos condiciones en un indicador (Indicador)

probuilder
// Fire when the previous close or the previous low undercut the 10-bar lowest close
i1 = Lowest[10](close)
IF (close[1] < i1 OR low[1] < i1) THEN
    result = 1
ELSE
    result = 0
ENDIF
RETURN result

Este es el patrón de la referencia oficial. Que el cierre anterior o el mínimo anterior esté por debajo del cierre más bajo de los últimos 10 periodos pone result a 1, porque solo un lado del OR tiene que ser verdadero.

Ejemplo 2, cualquiera de varios breakouts (ProScreener)

probuilder
// New 20-bar high on close or on high
newCloseHigh = close >= Highest[20](close)
newHigh = high >= Highest[20](high)
cond = newCloseHigh OR newHigh
SCREENER[cond]

El screener devuelve los instrumentos que marcan un nuevo máximo de 20 bars en cualquiera de las dos medidas. Basta con que se cumpla una de las condiciones.

Ejemplo 3, salida con más de un disparador (ProOrder)

probuilder
DEFPARAM CumulateOrders = false
// Exit the long if price loses the average or momentum turns down
lostTrend = close < Average[50](close)
momentumDown = MACDLine[12,26,9](close) CROSSES UNDER 0
IF LongOnMarket AND (lostTrend OR momentumDown) THEN
    SELL AT MARKET
ENDIF

Los paréntesis agrupan los dos disparadores de salida para que cualquiera de ellos, combinado con un long abierto, cierre la posición. Sin ellos, las reglas de precedencia cambiarían el significado.

Errores y trampas habituales

  • Sorpresas de precedencia. a AND b OR c se interpreta como (a AND b) OR c. Si una única salida debe activarse con cualquiera de varios disparadores, agrúpalos con paréntesis como en el Ejemplo 3.
  • Cada lado debe ser una condición. close OR high > low no es válido, porque close por sí solo es un valor. Escribe una comparación completa en cada lado.
  • Ampliar más allá del punto de utilidad. Cada añadido OR condición solo puede aumentar el número de coincidencias. Un screener que devuelve casi todo suele tener una condición laxa de más.
  • OR no es exclusivo. Si exactamente una de dos condiciones debe ser cierta y no ambas, usa XOR en su lugar.
  • AND, verdadero solo cuando todos los operandos son verdaderos.
  • XOR, verdadero cuando exactamente un operando es verdadero.
  • NOT, invierte una sola condición.
  • IF, el bloque condicional en el que suelen aparecer estos operadores.
  • THEN, ELSE, estructura las ramas de un IF.
  • CROSSES OVER, CROSSES UNDER, condiciones a menudo combinadas con OR.