Bli medlem i dag
Konstanter/probuilder · probacktest · proorder · proscreener

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

probuilder
myVariable = Undefined

Undefined 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)

probuilder
// 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)

probuilder
// 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)

probuilder
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 = Undefined sammenligning. Siden en udefinert variabel leses som 0, test IF x = 0 for å 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.
  • Close, sluttprisen i en bar.
  • Open, åpningsprisen i en bar.
  • High, den høyeste prisen i en bar.
  • Low, den laveste prisen i en bar.
  • Decimals, antall desimaler for instrumentet.
  • Range, high minus low for en bar.
  • Volume, det omsatte volumet i en bar.
  • TypicalPrice, gjennomsnittet av high, low og close.