NOT
NOT i ProBuilder är den logiska negationsoperatorn som inverterar ett booleskt villkor. Täcker syntax, prioritet och genomgångna exempel i de olika språken.
Syntax
NOT (condition)Så fungerar det
NOT tar ett enda booleskt villkor och returnerar dess motsats. Om villkoret är sant, NOT gör den falsk, och omvänt. Parenteserna krävs inte alltid, men de håller negationens omfattning tydlig, särskilt när villkoret självt innehåller jämförelser.
Bland de logiska operatorerna, NOT binder starkast. Det betyder NOT a AND b läses som (NOT a) AND b, inte som NOT (a AND b). När ett sammansatt uttryck ska negeras i sin helhet, omslut det: NOT (a AND b). Att få den här grupperingen fel är ett av de vanligaste logikfelen.
NOT fungerar på samma sätt i ProBuilder-indikatorer, ProScreener, ProBacktest och ProOrder.
Exempel
Exempel 1, Negera en jämförelse (Indikator)
// 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 resultDet här är mönstret från den officiella referensen. NOT (a > b) är sant när a är inte större än b, det vill säga när a är mindre än eller lika med b.
Exempel 2, Utesluta ett tillstånd (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]Filtret behåller instrument över sitt långa medelvärde medan NOT overbought tar bort de med ett RSI över 70.
Exempel 3, Positionsspärr på en entry (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 är det vanliga skyddet som hindrar en strategi från att stapla order medan en position redan är öppen. Samma mönster använder NOT LongOnMarket eller NOT ShortOnMarket för att skydda en enda sida.
Vanliga fel och fallgropar
- Prioritet.
NOTbinder hårdare änANDochOR.NOT a AND bbetyder(NOT a) AND b. För att negera hela villkoret, skrivNOT (a AND b). - Att negera ett värde, inte ett villkor.
NOT closeär meningslöst, eftersomcloseär ett tal.NOTkräver ett booleskt värde, så negera en jämförelse somNOT (close > open). - Dubbla negationer.
NOT (NOT cond)är baracond. Nästlade negationer är lätta att misstolka, så förenkla dem där det går. - Saknade parenteser kring ett sammansatt uttryck. Att glömma parenteserna runt ett villkor i flera delar är den vanliga orsaken till en spärr som utlöses vid fel tidpunkt.