NOT
NOT in ProBuilder è l'operatore di negazione logica che inverte una condizione booleana. Copre sintassi, precedenza ed esempi svolti nei vari linguaggi.
Sintassi
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)
// 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 resultQuesto è 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)
// 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)
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 è 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.
NOTha precedenza suANDeOR.NOT a AND bsignifica(NOT a) AND b. Per negare l'intera condizione, scriviNOT (a AND b). - Negare un valore, non una condizione.
NOT closenon ha senso, perchécloseè un numero.NOTrichiede un booleano, quindi negare un confronto comeNOT (close > open). - Doppie negazioni.
NOT (NOT cond)è solocond. 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.
Istruzioni correlate
AND, vero solo quando ogni operando è vero.OR, vero quando almeno un operando è vero.XOR, vero quando esattamente un operando è vero.IF, il blocco condizionaleNOTsi trova di solito in.THEN,ELSE, struttura i rami di unIF.ONMARKET,LONGONMARKET,SHORTONMARKET, stati di posizione comunemente negati conNOT.