Iscriviti ora
Istruzioni/probuilder · probacktest · proorder · proscreener

THEN

THEN links an IF condition to the block of ProBuilder code that runs when the condition is true. Mandatory in every IF statement, before ELSE or ELSIF.

Sintassi

probuilder
IF condition THEN
  // code executed when the condition is true
ENDIF

Come funziona

THEN is the bridge between a condition and its consequences. The compiler reads everything between IF and THEN as the boolean expression to evaluate, and everything between THEN and the next branch keyword (ELSIF, ELSE, or ENDIF) as the block to execute when that expression is true.

La parola chiave non è opzionale. Omettere THEN dopo una condizione IF è un errore di sintassi, e lo stesso vale dopo ogni condizione ELSIF in un'istruzione concatenata. ELSE, al contrario, non accetta alcuna condizione e quindi nessun THEN.

THEN carries no logic of its own, it is a structural marker. Complex conditions built with AND, OR, NOT, and parentheses all sit on the left side of THEN, and the block on the right side can contain any statements valid in the sub-language, including nested IF...THEN blocks. Every IF opened with THEN must eventually be closed with ENDIF.

La parola chiave compare anche nella lettura compatta a concetto unico dei condizionali ProBuilder: condizione, THEN, azione, ENDIF. Tenere a mente quest'ordine risolve la maggior parte degli errori di sintassi relativi ai blocchi condizionali.

THEN behaves identically across all four sub-languages. Indicator code, strategy code, and screener code all use the same IF...THEN...ENDIF structure, so conditional logic written for one context ports directly to the others as long as the statements inside the block are valid there.

Esempi

Esempio 1, Marcare le bar rialziste (Indicatore)

probuilder
// Draw a green up arrow under every bar that closed above its open
IF close > open THEN
  DRAWARROWUP(barindex, low) COLOURED(0, 255, 0)
ENDIF
RETURN

Quando la condizione a sinistra di THEN è vera, l'istruzione di disegno nel blocco viene eseguita e sotto la bar compare una freccia.

Esempio 2, Ingresso condizionale con una condizione composta (ProOrder)

probuilder
// Enter long when the fast average crosses over the slow one
// and the market is not already long
fastMA = average[20](close)
slowMA = average[100](close)

IF fastMA crosses over slowMA AND NOT longonmarket THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

L'intera espressione composta si trova prima di THEN. L'istruzione d'ordine dopo THEN viene eseguita solo sulle bar in cui entrambe le parti sono verificate.

Esempio 3, Ramificazione con ELSIF e THEN (ProScreener)

probuilder
// Classify momentum, THEN is required after IF and after ELSIF
mom = close - close[10]

IF mom > 0 THEN
  state = 1
ELSIF mom < 0 THEN
  state = -1
ELSE
  state = 0
ENDIF

SCREENER[state = 1] (mom AS "10-bar momentum")

Ogni ramo condizionale che contiene una condizione termina con THEN. Il ramo ELSE non ha condizione e quindi nessun THEN.

Errori e insidie comuni

  • THEN mancante. IF close > open DRAWARROWUP(barindex, low) ENDIF non compila. Ogni condizione IF e ogni condizione ELSIF deve essere seguita da THEN prima dell'inizio del blocco.
  • THEN after ELSE. ELSE introduces the fallback block directly and takes neither a condition nor a THEN. Writing ELSE THEN è un errore di sintassi.
  • Blocco non chiuso. Un blocco THEN viene eseguito fino a ELSIF, ELSE o ENDIF. Dimenticare ENDIF fa sì che il compilatore inglobi nel blocco le istruzioni successive e segnali un errore lontano dalla causa.
  • Istruzioni sul lato della condizione. Tutto ciò che si trova tra IF e THEN deve ridursi a vero o falso. Assegnazioni o semplici espressioni aritmetiche in quella posizione non vengono compilate.
  • IF, apre l'istruzione condizionale a cui appartiene THEN.
  • ELSE, ramo di riserva eseguito quando nessuna condizione è stata soddisfatta.
  • ELSIF, condizione aggiuntiva nello stesso blocco, seguita anch'essa da THEN.
  • ENDIF, chiude l'istruzione condizionale.
  • AND, combina condizioni a sinistra di THEN.
  • OR, condizioni alternative a sinistra di THEN.
  • NOT, nega una condizione prima di THEN.