Word nu lid
Operatoren/probuilder · probacktest · proorder · proscreener

OR

OR in ProBuilder is een logische operator die waar teruggeeft wanneer minstens één van zijn voorwaarden waar is. Behandelt syntaxis, voorrang en uitgewerkte voorbeelden.

Syntaxis

probuilder
condition1 OR condition2

Hoe het werkt

OR evalueert de condities aan beide zijden en geeft true als één van de twee waar is, of als beide waar zijn. Het resultaat is alleen false wanneer alle operanden false zijn. Meer condities toevoegen met extra OR operatoren verbreedt de test, aangezien één enkele match de hele expressie waar maakt.

Prioriteit is van belang wanneer OR deelt een expressie met AND en NOT. NOT bindt het sterkst, dan AND, dan OR. Dus a OR b AND c groepeert als a OR (b AND c). Wanneer de bedoelde volgorde niet in één oogopslag duidelijk is, zet je haakjes zodat de logica precies leest zoals bedoeld.

OR gedraagt zich identiek in ProBuilder-indicatoren, ProScreener, ProBacktest en ProOrder, omdat alle vier dezelfde booleaanse evaluatieregels delen.

Voorbeelden

Voorbeeld 1, een van beide voorwaarden in een indicator (Indicator)

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

Dit is het patroon uit de officiële referentie. Als de vorige close of de vorige low onder de laagste close van de laatste 10 periodes ligt, zet dat result op 1, omdat maar één kant van de OR moet waar zijn.

Voorbeeld 2, een van meerdere 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]

De screener geeft instrumenten terug die op een van beide maatstaven een nieuwe 20-bar high printen. Een match op een van beide voorwaarden is voldoende.

Voorbeeld 3, uitstappen op meer dan éé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

De haakjes groeperen de twee uitstaptriggers zodat elk van beide, gecombineerd met een open long, de positie sluit. Zonder de haakjes zouden de voorrangsregels de betekenis veranderen.

Veelvoorkomende fouten en valkuilen

  • Verrassingen met voorrang. a AND b OR c parseert als (a AND b) OR c. Als één exit op meerdere triggers moet afgaan, groepeer ze dan met haakjes zoals in Voorbeeld 3.
  • Elke kant moet een voorwaarde zijn. close OR high > low is ongeldig, omdat close alleen is een waarde. Schrijf aan beide zijden een volledige vergelijking.
  • Zo ver verbreden dat het geen nut meer heeft. Elke toegevoegde OR voorwaarde kan het aantal treffers alleen verhogen. Een screener die bijna alles teruggeeft heeft vaak één te ruime voorwaarde te veel.
  • OR is niet exclusief. Als precies één van twee voorwaarden waar moet zijn en niet beide, gebruik XOR in plaats daarvan.
  • AND, alleen waar wanneer elke operand waar is.
  • XOR, waar wanneer precies één operand waar is.
  • NOT, keert een enkele voorwaarde om.
  • IF, het voorwaardelijke blok waarin deze operatoren meestal staan.
  • THEN, ELSE, structureer de takken van een IF.
  • CROSSES OVER, CROSSES UNDER, voorwaarden die vaak worden gecombineerd met OR.