Iscriviti ora
Operatori/probuilder · probacktest · proorder · proscreener

NOT

NOT in ProBuilder è l'operatore di negazione logica che inverte una condizione booleana. Copre sintassi, precedenza ed esempi svolti nei vari linguaggi.

Sintassi

probuilder
NOT (condition)

Come funziona

NOT accetta una singola condizione booleana e restituisce il suo opposto. Se la condizione è vera, NOT la rende falsa, e viceversa. Le parentesi non sono sempre necessarie, ma mantengono chiaro l'ambito della negazione, soprattutto quando la condizione contiene essa stessa dei confronti.

Tra gli operatori logici, NOT ha la precedenza più alta. Questo significa NOT a AND b viene letto come (NOT a) AND b, non come NOT (a AND b). Quando va negata un'intera espressione composta, racchiudila: NOT (a AND b). Sbagliare questo raggruppamento è uno degli errori di logica più comuni.

NOT funziona allo stesso modo negli indicatori ProBuilder, in ProScreener, ProBacktest e ProOrder.

Esempi

Esempio 1, Negazione di un confronto (Indicatore)

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

Questo è il pattern della documentazione ufficiale. NOT (a > b) è vero ogni volta che a non è maggiore di b, cioè quando a è minore o uguale a b.

Esempio 2, Esclusione di uno stato (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]

Il filtro mantiene gli strumenti sopra la loro media lunga mentre NOT overbought rimuove quelli con un RSI superiore a 70.

Esempio 3, Protezione di posizione su un ingresso (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 è la protezione standard che impedisce a una strategia di accumulare ordini quando una posizione è già aperta. Lo stesso pattern usa NOT LongOnMarket o NOT ShortOnMarket per proteggere un solo lato.

Errori e insidie comuni

  • Precedenza. NOT ha precedenza su AND e OR. NOT a AND b significa (NOT a) AND b. Per negare l'intera condizione, scrivi NOT (a AND b).
  • Negare un valore, non una condizione. NOT close non ha senso, perché close è un numero. NOT richiede un booleano, quindi negare un confronto come NOT (close > open).
  • Doppie negazioni. NOT (NOT cond) è solo cond. Le negazioni annidate sono facili da fraintendere, quindi semplificale quando possibile.
  • Parentesi mancanti su un termine composto. Dimenticare le parentesi attorno a una condizione composta da più parti è la causa tipica di una protezione che scatta nel momento sbagliato.
  • AND, vero solo quando ogni operando è vero.
  • OR, vero quando almeno un operando è vero.
  • XOR, vero quando esattamente un operando è vero.
  • IF, il blocco condizionale NOT si trova di solito in.
  • THEN, ELSE, struttura i rami di un IF.
  • ONMARKET, LONGONMARKET, SHORTONMARKET, stati di posizione comunemente negati con NOT.