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

XOR

XOR i ProBuilder är operatorn för exklusivt ELLER, sann när exakt ett av två villkor är sant. Täcker syntax, exklusivitetsregeln och exempel.

Syntax

probuilder
result = expression1 XOR expression2

Så fungerar det

XOR jämför två booleska villkor och returnerar sant bara när de skiljer sig, det vill säga när ett är sant och det andra falskt. Om båda villkoren är sanna, eller båda falska, är resultatet falskt. Detta är skillnaden mot OR, som också är sant när båda operanderna är sanna.

Liksom de övriga logiska operatorerna, XOR kan kombineras med AND, OR, och NOT. NOT binder starkast, sedan AND, sedan OR, så att blandning av XOR in i ett större uttryck blir tydligare med parenteser. XOR utvärderas på samma sätt i ProBuilder-indikatorer, ProScreener, ProBacktest och ProOrder.

Exempel

Exempel 1, Exakt en jämförelse sann (Indikator)

probuilder
// c beats a but not b, or beats b but not a
a = 5
b = 7
c = 6
IF (c > a XOR c > b) THEN
    result = 1
ELSE
    result = 0
ENDIF
RETURN result

Det här är mönstret från den officiella referensen. Här c är större än a men inte b, så exakt en jämförelse är sann och result sätts till 1. Om c var större än båda, så XOR skulle vara falskt.

Exempel 2, En breakout men inte båda (ProScreener)

probuilder
// New 20-bar high on close or on high, but not on both at once
newCloseHigh = close >= Highest[20](close)
newHigh = high >= Highest[20](high)
cond = newCloseHigh XOR newHigh
SCREENER[cond]

Filtret returnerar instrument där bara ett av de två högstamåtten gav ett nytt extremvärde, och utesluter dem där båda utlöste samtidigt.

Exempel 3, Motstridiga signaler (ProOrder)

probuilder
DEFPARAM CumulateOrders = false
// Act only when one filter agrees and the other does not
fast = close > Average[20](close)
slow = close > Average[200](close)
IF NOT OnMarket AND (fast XOR slow) THEN
    BUY 1 CONTRACT AT MARKET
ENDIF

Entryn tillåter en position endast när de två filtren med glidande medelvärde är oense, ett över och ett under. När båda är överens, i vilken riktning det än är, XOR är falskt och ingen order läggs.

Vanliga fel och fallgropar

  • XOR är inte OR. De två beter sig likadant om inte båda operanderna är sanna. När båda är sanna, OR är sant men XOR är falskt. Välj XOR bara när du behöver utesluta fallet där båda är sanna.
  • Varje sida måste vara ett villkor. close XOR high är ogiltigt eftersom de är värden, inte booleaner. Använd fullständiga jämförelser på varje sida.
  • Prioritetsordning i blandade uttryck. När XOR ligger vid sidan av AND eller OR, omslut delarna för att göra grupperingen explicit, som i Exempel 3.
  • Att kedja ihop dem är sällan vad du vill. a XOR b XOR c är sant när ett ojämnt antal av de tre är sanna, vilket sällan är den avsedda innebörden. Strukturera logiken med explicita parenteser i stället.
  • OR, sant när minst en operand är sann, inklusive båda.
  • AND, sant endast när alla operander är sanna.
  • 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 logiska operatorer.