Word nu lid
Constanten/probuilder · probacktest · proorder · proscreener

Undefined

Undefined is een ProBuilder-waarde die de standaardwaarde 0 van een variabele wist en die markeert als nog niet ingesteld. Wijs Undefined één keer toe zodat een variabele niet wordt getekend of als nul wordt behandeld.

Syntaxis

probuilder
myVariable = Undefined

Undefined wordt aan een variabele toegekend en neemt geen index. Het kan maar één keer aan een variabele worden gegeven, normaal aan het begin van de code.

Hoe het werkt

Variabelen in ProBuilder worden niet expliciet geïnitialiseerd en beginnen op 0. Die standaardwaarde kan problemen geven wanneer 0 een zinvolle prijs is of de variabele verborgen moet blijven tot een voorwaarde hem een waarde geeft. De variabele zetten op Undefined wist die standaard, zodat hij niet op de grafiek wordt getekend en niet als echte waarde geldt.

Een variabele kan ingesteld worden op Undefined slechts één keer, en alleen voordat hij een numerieke waarde krijgt. Nadat een reëel getal is toegekend, kan hij niet terug naar de ongedefinieerde toestand.

Er is geen manier om direct te testen of een variabele gelijk is aan Undefined. In booleaanse en numerieke contexten gedraagt een ongedefinieerde variabele zich als 0, dus het gebruikelijke patroon is controleren of hij nog gelijk is aan 0 om te bepalen of hij is gezet. Ongedefinieerde waarden worden ook buiten de indicatorschaling gehouden, wat voorkomt dat een niet-gezette reeks de as van de grafiek vertekent.

Voorbeelden

Voorbeeld 1, Een niveau verbergen tot het is ingesteld (Indicator)

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"

Omdat de variabele begint als Undefined, verschijnt er geen lijn totdat de crossover een waarde toekent.

Voorbeeld 2, Een niet-ingestelde waarde detecteren (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")

De screener gebruikt de vergelijking met 0 om instrumenten te behouden waar target een reële waarde heeft ontvangen.

Voorbeeld 3, Optioneel stopniveau in een strategie (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

Beginnen stopLevel als Undefined houdt hem inactief totdat een instap een echte stop toewijst.

Veelvoorkomende fouten en valkuilen

  • Kan niet direct worden getest. Er is geen IF x = Undefined vergelijking. Omdat een ongedefinieerde variabele als 0 wordt gelezen, test IF x = 0 om te controleren of die is ingesteld.
  • Slechts één keer toewijzen. Een variabele accepteert Undefined één keer, voordat het een getal bevat. Het kan later niet weer op ongedefinieerd worden gezet.
  • Komt in conflict met een echte nul. Als 0 een geldige waarde is voor de variabele, kan de 0-test niet-ingesteld niet onderscheiden van een echte nul. Gebruik in dat geval een aparte flag.
  • Close, de slotkoers van een bar.
  • Open, de openingsprijs van een bar.
  • High, de hoogste prijs van een bar.
  • Low, de laagste prijs van een bar.
  • Decimals, het aantal decimalen van het instrument.
  • Range, de high minus de low van een bar.
  • Volume, het verhandelde volume van een bar.
  • TypicalPrice, het gemiddelde van high, low en close.