Iscriviti ora
Istruzioni/probuilder · probacktest · proorder · proscreener

ENDIF

ENDIF in ProBuilder closes a conditional block opened by IF. Every IF needs a matching ENDIF, including nested blocks and blocks with ELSE or ELSIF branches.

Sintassi

probuilder
IF (condition) THEN
  // statements
ELSE
  // statements
ENDIF

Come funziona

ENDIF marks the point where conditional execution stops and unconditional execution resumes. Everything between IF and ENDIF belongs to the conditional block; everything after ENDIF runs on every bar regardless of the condition. One ENDIF closes one IF, no matter how many ELSIF branches sit in between, and the optional ELSE branch also falls inside the same block.

Ogni condizione annidata necessita del proprio ENDIF. Il compilatore abbina ogni ENDIF all'IF non chiuso più vicino sopra di esso, quindi l'ordine di chiusura è l'inverso dell'ordine di apertura. L'indentazione non ha alcun significato sintattico in ProBuilder, ma indentare ogni livello di annidamento rende visibile l'abbinamento ed è la principale difesa contro i blocchi non corrispondenti.

Un ENDIF mancante o in eccesso è un errore di compilazione. Il numero di riga segnalato indica spesso la fine dello script o un'istruzione non correlata sotto l'errore reale, perché il compilatore si accorge dello squilibrio solo quando esaurisce il codice.

Esempi

Esempio 1, Direzione da due medie mobili (Indicatore)

probuilder
a = average[10](close)
b = exponentialaverage[20](close)
// Compare the two averages and encode the result as +1 or -1
IF (a > b) THEN
  result = 1
ELSE
  result = -1
ENDIF
RETURN result AS "direction"

The block assigns 1 when the simple average sits above the exponential average and -1 otherwise. ENDIF closes the block so the RETURN below always executes.

Esempio 2, Condizioni annidate in uno screener (ProScreener)

probuilder
match = 0
IF RSI[14](close) < 30 THEN
  // Inner block only runs when the outer condition passed
  IF volume > Average[20](volume) THEN
    match = 1
  ENDIF
ENDIF
SCREENER[match] (RSI[14](close) AS "RSI")

Due blocchi IF si annidano, e ognuno ha il proprio ENDIF. L'ENDIF interno chiude il test sul volume, quello esterno chiude il test sull'RSI.

Esempio 3, Logica di ingresso e inversione (ProOrder)

probuilder
fast = ExponentialAverage[9](close)
slow = ExponentialAverage[21](close)
// One block handles both directions through ELSIF
IF fast CROSSES OVER slow THEN
  BUY 1 CONTRACT AT MARKET
ELSIF fast CROSSES UNDER slow THEN
  SELLSHORT 1 CONTRACT AT MARKET
ENDIF

Un singolo blocco IF...ELSIF...ENDIF indirizza gli incroci rialzisti a un ingresso long e gli incroci ribassisti a un ingresso short. Un solo ENDIF chiude l'intera struttura.

Errori e insidie comuni

  • ENDIF mancante. Ogni IF richiede esattamente un ENDIF. Il compilatore segnala spesso una riga molto più in basso rispetto all'omissione effettiva, quindi quando compare l'errore, contare le coppie IF ed ENDIF dall'inizio dello script.
  • Un ENDIF per catena ELSIF, non per ramo. I rami ELSIF non prevedono un proprio ENDIF. Scrivere un ENDIF dopo ogni ELSIF chiude il blocco in anticipo e di solito produce una cascata di errori.
  • Istruzioni mal collocate dopo ENDIF. Il codice destinato a essere eseguito solo quando la condizione è vera deve stare sopra ENDIF. Un'istruzione spostata per errore sotto di esso viene eseguita su ogni bar, il che cambia il comportamento senza alcun errore di compilazione.
  • Confusione nell'annidamento. Con più blocchi annidati, ogni ENDIF si lega all'IF aperto più vicino. Un'indentazione coerente è il modo pratico per mantenere allineate le coppie durante la modifica.
  • IF, apre il blocco condizionale che ENDIF chiude.
  • THEN, richiesto tra la condizione e il corpo del blocco.
  • ELSE, ramo di riserva all'interno di un blocco IF.
  • ELSIF, condizioni alternative concatenate all'interno dello stesso blocco.
  • AND, combina condizioni nell'intestazione IF.
  • OR, accetta una qualsiasi fra più condizioni nell'intestazione IF.
  • NOT, nega una condizione.
  • WHILE, costrutto di ciclo con la propria parola chiave di chiusura, WEND.