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

NOT

NOT en ProBuilder es el operador de negación lógica que invierte una condición booleana. Cubre la sintaxis, la precedencia y ejemplos resueltos en los distintos lenguajes.

Sintaxis

probuilder
NOT (condition)

Cómo funciona

NOT toma una única condición booleana y devuelve su opuesto. Si la condición es verdadera, NOT la hace falsa, y al contrario. Los paréntesis no siempre son obligatorios, pero mantienen claro el alcance de la negación, sobre todo cuando la propia condición contiene comparaciones.

Entre los operadores lógicos, NOT tiene la precedencia más alta. Eso significa que NOT a AND b se lee como (NOT a) AND b, no como NOT (a AND b). Cuando hay que negar toda una expresión compuesta, enciérrala: NOT (a AND b). Equivocarse en esta agrupación es uno de los errores de lógica más habituales.

NOT funciona igual en indicadores de ProBuilder, ProScreener, ProBacktest y ProOrder.

Ejemplos

Ejemplo 1, Negar una comparación (Indicador)

probuilder
// Flag a bar where the close 10 periods ahead is not above the current close
result = 0
FOR i = 0 TO 20 DO
    a = close[i + 10]
    b = close[i]
    IF NOT (a > b) THEN
        result = 1
    ENDIF
NEXT
RETURN result

Este es el patrón de la referencia oficial. NOT (a > b) es verdadero siempre que a no es mayor que b, es decir cuando a es menor o igual que b.

Ejemplo 2, Excluir un estado (ProScreener)

probuilder
// Instruments in an uptrend that are not overbought
trendUp = close > Average[200](close)
overbought = RSI[14](close) > 70
cond = trendUp AND NOT overbought
SCREENER[cond]

El filtro conserva los instrumentos por encima de su media larga mientras NOT overbought elimina aquellos con un RSI superior a 70.

Ejemplo 3, Protección de posición en una entrada (ProOrder)

probuilder
DEFPARAM CumulateOrders = false
// Enter long only when no position is open and the signal fires
IF NOT OnMarket AND close CROSSES OVER Average[50](close) THEN
    BUY 1 CONTRACT AT MARKET
ENDIF

NOT OnMarket es la protección estándar que evita que una estrategia acumule órdenes mientras ya hay una posición abierta. El mismo patrón usa NOT LongOnMarket o NOT ShortOnMarket para proteger un solo lado.

Errores y trampas habituales

  • Precedencia. NOT tiene más precedencia que AND y OR. NOT a AND b significa (NOT a) AND b. Para negar toda la condición, escribe NOT (a AND b).
  • Negar un valor, no una condición. NOT close no tiene sentido, porque close es un número. NOT requiere un booleano, así que niega una comparación como NOT (close > open).
  • Dobles negaciones. NOT (NOT cond) es solo cond. Las negaciones anidadas son fáciles de malinterpretar, así que simplifícalas cuando sea posible.
  • Faltan paréntesis en un término compuesto. Olvidar los paréntesis en torno a una condición de varias partes es la causa habitual de que una protección se active en el momento equivocado.
  • AND, verdadero solo cuando todos los operandos son verdaderos.
  • OR, verdadero cuando al menos un operando es verdadero.
  • XOR, verdadero cuando exactamente un operando es verdadero.
  • IF, el bloque condicional NOT suele estar en.
  • THEN, ELSE, estructura las ramas de un IF.
  • ONMARKET, LONGONMARKET, SHORTONMARKET, estados de posición que suelen negarse con NOT.