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
condition1 OR condition2Hoe 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)
// 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 resultDit 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)
// 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)
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
ENDIFDe 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 cparseert 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 > lowis ongeldig, omdatclosealleen is een waarde. Schrijf aan beide zijden een volledige vergelijking. - Zo ver verbreden dat het geen nut meer heeft. Elke toegevoegde
ORvoorwaarde 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
XORin plaats daarvan.
Gerelateerde instructies
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 eenIF.CROSSES OVER,CROSSES UNDER, voorwaarden die vaak worden gecombineerd metOR.