Bli medlem i dag
Operatorer/probuilder · probacktest · proorder · proscreener

OR

OR i ProBuilder er en logisk operator som returnerer sann når minst én av betingelsene er sann. Dekker syntaks, presedens og gjennomgåtte eksempler.

Syntaks

probuilder
condition1 OR condition2

Slik fungerer det

OR evaluerer betingelsene på hver side og returnerer true hvis én av dem er sann, eller hvis begge er. Resultatet er false bare når alle operander er false. Å legge til flere betingelser med ytterligere OR operatorer utvider testen, siden ett enkelt treff gjør hele uttrykket sant.

Presedens er viktig når OR deler et uttrykk med AND og NOT. NOT binder sterkest, deretter AND, deretter OR. Så a OR b AND c grupperes som a OR (b AND c). Når den tilsiktede rekkefølgen ikke er åpenbar ved første blikk, legg til parenteser så logikken leses akkurat som ment.

OR oppfører seg likt i ProBuilder-indikatorer, ProScreener, ProBacktest og ProOrder, siden alle fire deler de samme reglene for boolsk evaluering.

Eksempler

Eksempel 1, Én av to betingelser 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

Dette er mønsteret fra den offisielle referansen. At enten forrige stengekurs eller forrige lavpunkt ligger under den laveste stengekursen i de siste 10 periodene setter result til 1, fordi bare én side av OR må være sann.

Eksempel 2, Hvilken som helst av flere 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]

Screeneren returnerer instrumenter som setter en ny 20-bars høyde på ett av de to målene. Et treff på én av betingelsene er nok.

Eksempel 3, Utgang på mer enn én 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

Parentesene grupperer de to utgangstriggerne slik at hver av dem, kombinert med en åpen long, lukker posisjonen. Uten dem ville presedensreglene endret betydningen.

Vanlige feil og fallgruver

  • Overraskelser med presedens. a AND b OR c tolkes som (a AND b) OR c. Hvis én enkelt utgang skal utløses av hvilken som helst av flere triggere, grupper dem med parenteser som i Eksempel 3.
  • Hver side må være en betingelse. close OR high > low er ugyldig, fordi close alene er en verdi. Skriv en fullstendig sammenligning på hver side.
  • Å utvide forbi punktet der det er nyttig. Hver tilføyde OR betingelsen kan bare øke antallet treff. En screener som returnerer nesten alt har ofte én løs betingelse for mye.
  • OR er ikke eksklusiv. Hvis nøyaktig én av to betingelser skal være sann og ikke begge, bruk XOR i stedet.
  • AND, sann bare når hver operand er sann.
  • XOR, sann når nøyaktig én operand er sann.
  • NOT, inverterer en enkelt betingelse.
  • IF, den betingede blokken disse operatorene vanligvis står i.
  • THEN, ELSE, strukturer grenene i en IF.
  • CROSSES OVER, CROSSES UNDER, betingelser som ofte kombineres med OR.