Undefined
Undefined är ett ProBuilder-värde som rensar en variabels standardvärde 0 och markerar den som ännu inte satt. Tilldela Undefined en gång så att en variabel inte ritas eller behandlas som noll.
Syntax
myVariable = UndefinedUndefined tilldelas en variabel och tar inget index. Den kan ges till en variabel bara en gång, normalt i början av koden.
Så fungerar det
Variabler i ProBuilder initieras inte explicit och börjar på 0. Det standardvärdet kan orsaka problem när 0 är ett meningsfullt pris eller när variabeln ska förbli osynlig till ett villkor tilldelar den ett värde. Att sätta variabeln till Undefined rensar den standardinställningen så att den varken ritas i diagrammet eller behandlas som ett verkligt värde.
En variabel kan sättas till Undefined bara en gång, och bara innan den får ett numeriskt värde. Efter att ett reellt tal tilldelats kan den inte återställas till odefinierat tillstånd.
Det finns inget sätt att direkt testa om en variabel är lika med Undefined. I booleska och numeriska sammanhang beter sig en odefinierad variabel som 0, så det vanliga mönstret är att kontrollera om den fortfarande är 0 för att avgöra om den har satts. Odefinierade värden utesluts också från indikatorns skalning, vilket hindrar en osatt serie från att snedvrida diagrammets axel.
Exempel
Exempel 1, Dölja en nivå tills den är satt (Indikator)
// Start undefined so no flat line at 0 is drawn before a signal
myLevel = Undefined
// Capture the close only when price crosses its average
IF Close CROSSES OVER Average[20](Close) THEN
myLevel = Close
ENDIF
RETURN myLevel AS "Signal level"Eftersom variabeln börjar som Undefined, visas ingen linje förrän korsningen tilldelar ett värde.
Exempel 2, Upptäcka ett osatt värde (ProScreener)
// Undefined behaves as 0, so a 0 test reveals whether it was set
target = Undefined
IF High > High[1] THEN
target = High
ENDIF
// Keep only instruments where the target was assigned
SCREENER[target > 0] (target AS "Target")Screenern använder jämförelsen med 0 för att behålla instrument där target fick ett verkligt värde.
Exempel 3, Valfri stoppnivå i en strategi (ProOrder)
DEFPARAM CumulateOrders = false
stopLevel = Undefined
IF Close CROSSES OVER Average[20](Close) THEN
BUY 1 CONTRACT AT MARKET
stopLevel = Lowest[10](Low)
ENDIF
// Apply the stop only once it has been set
IF LONGONMARKET AND stopLevel > 0 THEN
SELL AT stopLevel STOP
ENDIFAtt börja stopLevel som Undefined håller den inaktiv tills ett entry sätter en verklig stopp.
Vanliga fel och fallgropar
- Kan inte testas direkt. Det finns ingen
IF x = Undefinedjämförelse. Eftersom en odefinierad variabel läses som 0, testaIF x = 0för att kontrollera om det sattes. - Tilldela endast en gång. En variabel accepterar
Undefineden enda gång, innan den innehåller ett tal. Den kan inte återställas till odefinierad senare. - Kolliderar med en verklig nolla. Om 0 är ett giltigt värde för variabeln kan 0-testet inte skilja osatt från en genuin nolla. Använd en separat flagga i det fallet.