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.
Syntax
IF condition THEN
// code executed when the condition is true
ENDIFSå fungerar 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.
Nyckelordet är inte valfritt. Att utesluta THEN efter ett IF-villkor är ett syntaxfel, och samma gäller efter varje ELSIF-villkor i en kedjad sats. ELSE tar däremot inget villkor och därför inget 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.
Nyckelordet förekommer också i den kompakta enbegreppsläsningen av ProBuilders villkorssatser: villkor, THEN, åtgärd, ENDIF. Att ha den ordningen i minnet löser de flesta syntaxfel kring villkorliga block.
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.
Exempel
Exempel 1, Markera 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 villkoret till vänster om THEN är sant körs ritsatsen i blocket och en pil visas under baren.
Exempel 2, Villkorlig entry med ett sammansatt villkor (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
ENDIFHela det sammansatta uttrycket står före THEN. Ordersatsen efter THEN körs bara på barer där båda delarna gäller.
Exempel 3, Grenar med ELSIF och 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")Varje villkorlig gren som bär ett villkor slutar med THEN. ELSE-grenen har inget villkor och därför inget THEN.
Vanliga fel och fallgropar
- Saknat THEN.
IF close > open DRAWARROWUP(barindex, low) ENDIFkompilerar inte. Varje IF- och varje ELSIF-villkor måste följas av THEN innan blocket börjar. - THEN after ELSE. ELSE introduces the fallback block directly and takes neither a condition nor a THEN. Writing
ELSE THENär ett syntaxfel. - Oavslutat block. Ett THEN-block körs till ELSIF, ELSE eller ENDIF. Att glömma ENDIF gör att kompilatorn sväljer efterföljande satser in i blocket och rapporterar ett fel långt från orsaken.
- Satser på villkorssidan. Allt mellan IF och THEN måste kunna reduceras till sant eller falskt. Tilldelningar eller rena aritmetiska uttryck på den positionen kompilerar inte.
Relaterade instruktioner
IF, inleder det villkorliga uttryck som THEN hör till.ELSE, reservgren som körs när inget villkor stämde.ELSIF, ytterligare villkor i samma block, också följt av THEN.ENDIF, avslutar det villkorliga uttrycket.AND, kombinerar villkor på vänster sida av THEN.OR, alternativa villkor på vänster sida av THEN.NOT, negerar ett villkor före THEN.