Undefined
Undefined ist ein ProBuilder-Wert, der den Standardwert 0 einer Variablen aufhebt und sie als noch nicht gesetzt kennzeichnet. Weisen Sie Undefined einmal zu, damit eine Variable nicht gezeichnet oder als null behandelt wird.
Syntax
myVariable = UndefinedUndefined wird einer Variablen zugewiesen und nimmt keinen Index. Es kann einer Variablen nur einmal übergeben werden, normalerweise am Anfang des Codes.
So funktioniert es
Variablen in ProBuilder werden nicht explizit initialisiert und beginnen bei 0. Dieser Standard kann Probleme machen, wenn 0 ein sinnvoller Kurs ist oder die Variable verborgen bleiben soll, bis eine Bedingung ihr einen Wert zuweist. Die Variable auf Undefined hebt diesen Standard auf, sodass es weder im Chart gezeichnet noch als echter Wert behandelt wird.
Eine Variable kann gesetzt werden auf Undefined nur einmal, und nur bevor sie einen numerischen Wert erhält. Nach der Zuweisung einer reellen Zahl kann sie nicht in den undefinierten Zustand zurückgesetzt werden.
Es gibt keine Möglichkeit, direkt zu prüfen, ob eine Variable gleich Undefined. In booleschen und numerischen Kontexten verhält sich eine undefinierte Variable wie 0, daher wird üblicherweise geprüft, ob sie noch 0 ist, um zu entscheiden, ob sie gesetzt wurde. Undefinierte Werte werden außerdem von der Indikatorskalierung ausgenommen, was verhindert, dass eine nicht gesetzte Serie die Achse des Charts verzerrt.
Beispiele
Beispiel 1, Ein Niveau verbergen, bis es gesetzt ist (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"Weil die Variable als Undefined, erscheint keine Linie, bis der Crossover einen Wert zuweist.
Beispiel 2, Einen nicht gesetzten Wert erkennen (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")Der Screener nutzt den Vergleich mit 0, um Instrumente zu behalten, bei denen target einen echten Wert erhalten hat.
Beispiel 3, Optionales Stop-Niveau in einer Strategie (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
ENDIFBeginnend stopLevel als Undefined hält es inaktiv, bis ein Einstieg einen echten Stop setzt.
Häufige Fehler und Stolperfallen
- Kann nicht direkt getestet werden. Es gibt kein
IF x = UndefinedVergleich. Da eine nicht definierte Variable als 0 gelesen wird, prüfen SieIF x = 0um zu prüfen, ob er gesetzt wurde. - Nur einmal zuweisen. Eine Variable akzeptiert
Undefinedein einziges Mal, bevor sie eine Zahl enthält. Sie kann später nicht auf undefiniert zurückgesetzt werden. - Kollidiert mit einer echten Null. Wenn 0 ein gültiger Wert für die Variable ist, kann der 0-Test nicht zwischen nicht gesetzt und einer echten Null unterscheiden. Verwenden Sie in diesem Fall ein separates Flag.
Verwandte Befehle
Close, der Schlusskurs eines Bars.Open, der Eröffnungskurs eines Bars.High, der höchste Kurs eines Bars.Low, der niedrigste Kurs eines Bars.Decimals, die Anzahl der Nachkommastellen des Instruments.Range, High minus Low eines Bars.Volume, das gehandelte Volumen eines Bars.TypicalPrice, der Durchschnitt von High, Low und Close.