Undefined
Undefined er en ProBuilder-verdi som fjerner en variabels standardverdi på 0 og markerer den som ikke satt ennå. Tildel Undefined én gang, slik at en variabel ikke tegnes eller behandles som null.
Syntaks
myVariable = UndefinedUndefined tilordnes en variabel og tar ingen indeks. Den kan bare gis til en variabel én gang, normalt i starten av koden.
Slik fungerer det
Variabler i ProBuilder initialiseres ikke eksplisitt og starter på 0. Den standardverdien kan skape problemer når 0 er en meningsfull pris, eller når variabelen skal holdes skjult til en betingelse tilordner den. Å sette variabelen til Undefined fjerner den standardverdien, slik at den verken tegnes i diagrammet eller behandles som en reell verdi.
En variabel kan settes til Undefined bare én gang, og bare før den får en numerisk verdi. Etter at et reelt tall er tilordnet, kan den ikke settes tilbake til udefinert tilstand.
Det finnes ingen måte å teste direkte om en variabel er lik Undefined. I boolske og numeriske sammenhenger oppfører en udefinert variabel seg som 0, så det vanlige mønsteret er å sjekke om den fortsatt er lik 0 for å avgjøre om den er satt. Udefinerte verdier holdes også utenfor skaleringen av indikatoren, noe som hindrer at en usatt serie forvrenger aksen i diagrammet.
Eksempler
Eksempel 1, Skjule et nivå til det er 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"Fordi variabelen starter som Undefined, vises ingen linje før kryssingen tilordner en verdi.
Eksempel 2, Oppdage en verdi som ikke er satt (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")Screeneren bruker sammenligningen med 0 for å beholde instrumenter der target mottok en reell verdi.
Eksempel 3, Valgfritt 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
ENDIFÅ starte stopLevel som Undefined holder den inaktiv til en inngang setter et reelt stoppnivå.
Vanlige feil og fallgruver
- Kan ikke testes direkte. Det finnes ingen
IF x = Undefinedsammenligning. Siden en udefinert variabel leses som 0, testIF x = 0for å sjekke om den ble satt. - Tildel bare én gang. En variabel godtar
Undefinedén enkelt gang, før den inneholder et tall. Den kan ikke tilbakestilles til udefinert senere. - Kolliderer med en reell null. Hvis 0 er en gyldig verdi for variabelen, kan ikke 0-testen skille mellom ikke satt og en reell null. Bruk et eget flagg i så fall.