ELSIF
ELSIF in ProBuilder testa una nuova condizione quando la condizione IF precedente risulta falsa, permettendo a un unico blocco di verificare più condizioni esclusive in sequenza rigorosa.
Sintassi
IF (condition1) THEN
// runs when condition1 is true
ELSIF (condition2) THEN
// runs when condition1 is false and condition2 is true
ELSE
// runs when no condition matched
ENDIFCome funziona
Le condizioni in una catena IF/ELSIF vengono valutate dall'alto verso il basso. La prima che risulta vera vince: il suo blocco viene eseguito e tutti i rami restanti, compreso ELSE, vengono saltati. Quando nessuna delle condizioni è vera, viene eseguito il blocco ELSE se presente, altrimenti l'intera istruzione non fa nulla.
Un'istruzione IF può contenere un numero qualsiasi di rami ELSIF, ognuno con la propria condizione e il proprio THEN. Questo produce una diramazione piatta a più vie, più facile da leggere delle equivalenti istruzioni IF annidate, e richiede un solo ENDIF.
L'ordine conta. Poiché la valutazione si ferma alla prima corrispondenza, le condizioni più ampie poste all'inizio oscurano quelle più ristrette poste dopo. Mettere per primi i test più specifici.
Esempi
Esempio 1, Assegnare un punteggio a un oscillatore su tre stati (Indicatore)
myDPO = DPO[21](typicalprice)
IF (myDPO < 0) THEN
// negative oscillator lowers the score
result = result - 1
ELSIF (myDPO > 0) THEN
// positive oscillator raises the score
result = result + 1
ELSE
// exactly zero leaves the score unchanged
result = result
ENDIF
RETURN result
COLOURED(124,252,0)Il ramo ELSIF viene raggiunto solo quando il Detrended Price Oscillator non è negativo. Una lettura positiva incrementa il punteggio corrente, una lettura esattamente pari a zero ricade su ELSE.
Esempio 2, Filtro per zona RSI (ProScreener)
r = RSI[14](close)
// map the RSI reading onto three zones
IF r < 30 THEN
zone = -1
ELSIF r > 70 THEN
zone = 1
ELSE
zone = 0
ENDIF
SCREENER[zone <> 0] (r AS "RSI 14")Ogni strumento ricade in esattamente una zona. Lo screener mantiene solo i casi di ipervenduto e ipercomprato e mostra il valore grezzo dell'RSI.
Esempio 3, Regime di trend con position size graduata (ProOrder)
DEFPARAM CumulateOrders = false
fast = Average[20](close)
slow = Average[50](close)
// grade the trend from strong to absent
IF fast > slow AND close > fast THEN
size = 2
ELSIF fast > slow THEN
size = 1
ELSE
size = 0
ENDIF
IF size > 0 AND NOT onmarket THEN
BUY size CONTRACT AT MARKET
ENDIFIl caso specifico, prezzo sopra una serie di medie in rialzo, viene testato prima di quello più ampio. Invertire i due rami renderebbe irraggiungibile il blocco del trend forte.
Errori e insidie comuni
- THEN mancante dopo la condizione ELSIF. Ogni ELSIF richiede il proprio THEN, esattamente come IF.
ELSIF (a > b)su una riga a sé senza THEN non compila. - Scriverlo ELSEIF. La parola chiave è ELSIF, con una sola E. Le varianti di altri linguaggi, come ELSEIF o ELIF, vengono rifiutate dal compilatore.
- Rami irraggiungibili. La valutazione si arresta alla prima condizione vera. Un test ampio messo all'inizio come
r > 50impedisce un successivor > 70ramo venga mai eseguito, senza alcun avviso. - ELSIF posto dopo ELSE. ELSE must be the final branch. Any ELSIF following it is a syntax error, so keep the chain in the order IF, ELSIF, ELSE, ENDIF.
Istruzioni correlate
IF, apre la catena condizionale.ELSE, ramo di riserva incondizionato dopo tutti i rami ELSIF.ENDIF, chiude l'intera catena, uno per IF indipendentemente dal numero di rami.THEN, obbligatorio dopo ogni condizione IF ed ELSIF.AND, costruisce condizioni composte all'interno del test di un ramo.OR, condizioni alternative all'interno del test di un ramo.