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
IF condition THEN
// code executed when the condition is true
ENDIFCome 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)
// 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
RETURNQuando 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)
// 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
ENDIFL'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)
// 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) ENDIFnon 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.
Istruzioni correlate
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.