Bli medlem idag
Operatorer/probuilder · probacktest · proorder · proscreener

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

probuilder
condition1 OR condition2

Så 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)

probuilder
// 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 result

Det 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)

probuilder
// 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)

probuilder
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
ENDIF

Parenteserna 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 c tolkas 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, eftersom close ä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 OR villkor 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 XOR istället.
  • AND, sant endast när alla operander är sanna.
  • XOR, sant när exakt en operand är sann.
  • NOT, inverterar ett enskilt villkor.
  • IF, det villkorsblock som dessa operatorer vanligtvis står i.
  • THEN, ELSE, strukturera grenarna i ett IF.
  • CROSSES OVER, CROSSES UNDER, villkor som ofta kombineras med OR.