OR
OR in ProBuilder è un operatore logico che restituisce vero quando almeno una delle sue condizioni è vera. Tratta sintassi, precedenza ed esempi svolti.
Sintassi
condition1 OR condition2Come funziona
OR valuta le condizioni su entrambi i lati e restituisce true se una delle due è vera, o se lo sono entrambe. Il risultato è false solo quando tutti gli operandi sono falsi. Aggiungere altre condizioni con ulteriori OR gli operatori allargano il test, poiché una singola corrispondenza rende vera l'intera espressione.
La precedenza conta quando OR condivide un'espressione con AND e NOT. NOT ha la precedenza maggiore, poi AND, poi OR. Quindi a OR b AND c si raggruppa come a OR (b AND c). Quando l'ordine previsto non è ovvio a prima vista, aggiungi le parentesi così la logica si legge esattamente come intesa.
OR si comporta in modo identico negli indicatori ProBuilder, in ProScreener, ProBacktest e ProOrder, poiché tutti e quattro condividono le stesse regole di valutazione booleana.
Esempi
Esempio 1, una delle due condizioni in un indicatore (Indicatore)
// 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 resultQuesto è il pattern del riferimento ufficiale. Se la chiusura precedente o il minimo precedente è sotto la chiusura più bassa degli ultimi 10 periodi, viene impostato result a 1, perché solo un lato del OR deve essere vero.
Esempio 2, uno qualsiasi di diversi breakout (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]Lo screener restituisce gli strumenti che stampano un nuovo massimo a 20 bar su una delle due misure. Una corrispondenza su una delle due condizioni è sufficiente.
Esempio 3, uscita su più di un 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
ENDIFLe parentesi raggruppano i due trigger di uscita in modo che ciascuno di essi, combinato con una posizione long aperta, chiuda la posizione. Senza di esse le regole di precedenza cambierebbero il significato.
Errori e insidie comuni
- Sorprese di precedenza.
a AND b OR cviene interpretato come(a AND b) OR c. Se una singola uscita deve attivarsi su uno qualsiasi di più trigger, raggruppali con le parentesi come nell'Esempio 3. - Ogni lato deve essere una condizione.
close OR high > lownon è valido, perchécloseda solo è un valore. Scrivi un confronto completo su ciascun lato. - Allargare oltre il punto di utilità. Ogni nuovo
ORcondizione può solo aumentare il numero di corrispondenze. Uno screener che restituisce quasi tutto ha spesso una condizione troppo larga. - OR non è esclusivo. Se esattamente una di due condizioni deve essere vera e non entrambe, usa
XORinvece.
Istruzioni correlate
AND, vero solo quando ogni operando è vero.XOR, vero quando esattamente un operando è vero.NOT, inverte una singola condizione.IF, il blocco condizionale in cui questi operatori di solito si trovano.THEN,ELSE, struttura i rami di unIF.CROSSES OVER,CROSSES UNDER, condizioni spesso combinate conOR.