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
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)
// 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 resultEste 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)
// 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)
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
ENDIFNOT 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.
NOTtiene más precedencia queANDyOR.NOT a AND bsignifica(NOT a) AND b. Para negar toda la condición, escribeNOT (a AND b). - Negar un valor, no una condición.
NOT closeno tiene sentido, porqueclosees un número.NOTrequiere un booleano, así que niega una comparación comoNOT (close > open). - Dobles negaciones.
NOT (NOT cond)es solocond. 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.
Instrucciones relacionadas
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 condicionalNOTsuele estar en.THEN,ELSE, estructura las ramas de unIF.ONMARKET,LONGONMARKET,SHORTONMARKET, estados de posición que suelen negarse conNOT.