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
condition1 OR condition2Có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)
// 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 resultEste 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)
// 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)
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
ENDIFLos 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 cse 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 > lowno es válido, porqueclosepor sí solo es un valor. Escribe una comparación completa en cada lado. - Ampliar más allá del punto de utilidad. Cada añadido
ORcondició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
XORen su lugar.
Instrucciones relacionadas
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 unIF.CROSSES OVER,CROSSES UNDER, condiciones a menudo combinadas conOR.