OR
OR i ProBuilder är en logisk operator som returnerar sant när minst ett av dess villkor är sant. Täcker syntax, prioritet och genomarbetade exempel.
Syntax
condition1 OR condition2Så fungerar det
OR utvärderar villkoren på båda sidor och returnerar sant om något av dem är sant, eller om båda är det. Resultatet är falskt endast när alla operander är falska. Att lägga till fler villkor med ytterligare OR operatorer vidgar testet, eftersom en enda träff gör hela uttrycket sant.
Prioritetsordningen spelar roll när OR delar ett uttryck med AND och NOT. NOT binder starkast, sedan AND, sedan OR. Så a OR b AND c grupperar som a OR (b AND c). När den avsedda ordningen inte är uppenbar vid en snabb blick, lägg till parenteser så att logiken läses exakt som den är menad.
OR beter sig identiskt i ProBuilder-indikatorer, ProScreener, ProBacktest och ProOrder, eftersom alla fyra delar samma regler för boolesk utvärdering.
Exempel
Exempel 1, ett av två villkor i en indikator (Indikator)
// Fire when the previous close or the previous low undercut the 10-bar lowest close
i1 = Lowest[10](close)
IF (close[1] < i1 OR low[1] < i1) THEN
result = 1
ELSE
result = 0
ENDIF
RETURN resultDet här är mönstret från den officiella referensen. Att antingen föregående stängning eller föregående lägstanivå ligger under den lägsta stängningen under de senaste 10 perioderna sätter result till 1, eftersom bara en sida av OR måste vara sant.
Exempel 2, något av flera breakouts (ProScreener)
// New 20-bar high on close or on high
newCloseHigh = close >= Highest[20](close)
newHigh = high >= Highest[20](high)
cond = newCloseHigh OR newHigh
SCREENER[cond]Screenern returnerar instrument som skriver en ny 20-bars högsta på något av måtten. En träff på något av villkoren är nog.
Exempel 3, exit på fler än en trigger (ProOrder)
DEFPARAM CumulateOrders = false
// Exit the long if price loses the average or momentum turns down
lostTrend = close < Average[50](close)
momentumDown = MACDLine[12,26,9](close) CROSSES UNDER 0
IF LongOnMarket AND (lostTrend OR momentumDown) THEN
SELL AT MARKET
ENDIFParenteserna grupperar de två exittriggarna så att vilken som helst av dem, i kombination med en öppen long, stänger positionen. Utan dem skulle prioritetsreglerna ändra innebörden.
Vanliga fel och fallgropar
- Överraskningar med prioritet.
a AND b OR ctolkas som(a AND b) OR c. Om en enda exit ska utlösas av någon av flera triggers, gruppera dem med parenteser som i exempel 3. - Varje sida måste vara ett villkor.
close OR high > lowär ogiltigt, eftersomcloseär i sig ett värde. Skriv en fullständig jämförelse på varje sida. - Att vidga förbi den punkt där det är användbart. Varje tillagd
ORvillkor kan bara öka antalet träffar. En screener som returnerar nästan allt har ofta ett löst villkor för mycket. - OR är inte exklusivt. Om exakt ett av två villkor ska vara sant och inte båda, använd
XORistället.