Iscriviti ora
Istruzioni/probuilder · probacktest · proorder · proscreener

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

probuilder
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
ENDIF

Come 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)

probuilder
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)

probuilder
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)

probuilder
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
ENDIF

Il 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 > 50 impedisce un successivo r > 70 ramo 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.
  • 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.