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.
Syntaks
IF condition THEN
// code executed when the condition is true
ENDIFSlik fungerer det
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.
Nøkkelordet er ikke valgfritt. Å utelate THEN etter en IF-betingelse er en syntaksfeil, og det samme gjelder etter hver ELSIF-betingelse i en kjedet setning. ELSE tar derimot ingen betingelse og derfor ingen 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.
Nøkkelordet opptrer også i den kompakte enkeltkonseptlesningen av ProBuilder-betingelser: betingelse, THEN, handling, ENDIF. Å ha den rekkefølgen i tankene løser de fleste syntaksfeil rundt betingede blokker.
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.
Eksempler
Eksempel 1, Markere bullish barer (Indikator)
// 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
RETURNNår betingelsen til venstre for THEN er sann, utføres tegnesetningen i blokken og en pil vises under baren.
Eksempel 2, Betinget inngang med en sammensatt betingelse (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
ENDIFHele det sammensatte uttrykket står foran THEN. Ordresetningen etter THEN kjører bare på barer der begge deler holder.
Eksempel 3, Forgrening med ELSIF og 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")Hver betinget gren som bærer en betingelse ender på THEN. ELSE-grenen har ingen betingelse og derfor ingen THEN.
Vanlige feil og fallgruver
- Manglende THEN.
IF close > open DRAWARROWUP(barindex, low) ENDIFkompilerer ikke. Hver IF- og hver ELSIF-betingelse må følges av THEN før blokken starter. - THEN after ELSE. ELSE introduces the fallback block directly and takes neither a condition nor a THEN. Writing
ELSE THENer en syntaksfeil. - Uavsluttet blokk. En THEN-blokk kjører til ELSIF, ELSE eller ENDIF. Å glemme ENDIF får kompilatoren til å svelge påfølgende setninger inn i blokken og rapportere en feil langt fra årsaken.
- Setninger på betingelsessiden. Alt mellom IF og THEN må kunne reduseres til sant eller falskt. Tilordninger eller rene aritmetiske uttrykk i den posisjonen kompilerer ikke.
Relaterte instruksjoner
IF, åpner den betingede setningen som THEN hører til.ELSE, reservegren som utføres når ingen betingelse ble oppfylt.ELSIF, ytterligere betingelse i samme blokk, også etterfulgt av THEN.ENDIF, avslutter den betingede setningen.AND, kombinerer betingelser på venstre side av THEN.OR, alternative betingelser på venstre side av THEN.NOT, negerer en betingelse før THEN.