Undefined
Undefined est une valeur ProBuilder qui efface la valeur par défaut 0 d'une variable, la marquant comme non encore définie. Assignez Undefined une fois pour qu'une variable ne soit pas tracée ni traitée comme zéro.
Syntaxe
myVariable = UndefinedUndefined est affecté à une variable et n'accepte pas d'indice. Il ne peut être attribué à une variable qu'une seule fois, normalement au début du code.
Comment ça marche
Les variables dans ProBuilder ne sont pas explicitement initialisées et démarrent à 0. Cette valeur par défaut peut poser problème quand 0 est un prix significatif ou que la variable doit rester masquée jusqu'à ce qu'une condition lui donne une valeur. Affecter à la variable Undefined supprime cette valeur par défaut, de sorte qu'elle n'est ni tracée sur le graphique ni traitée comme une valeur réelle.
Une variable peut être définie à Undefined une seule fois, et seulement avant qu'elle ne reçoive une valeur numérique. Une fois un nombre réel affecté, elle ne peut plus revenir à l'état indéfini.
Il n'existe aucun moyen de tester directement si une variable est égale à Undefined. Dans les contextes booléens et numériques, une variable non définie se comporte comme 0, l'usage courant est donc de vérifier si elle vaut encore 0 pour savoir si elle a été affectée. Les valeurs non définies sont aussi exclues de la mise à l'échelle de l'indicateur, ce qui évite qu'une série non renseignée déforme l'axe du graphique.
Exemples
Exemple 1, Masquer un niveau tant qu'il n'est pas défini (Indicateur)
// 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"Comme la variable vaut initialement Undefined, aucune ligne n'apparaît avant que le croisement n'attribue une valeur.
Exemple 2, Détecter une valeur non définie (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")Le screener utilise la comparaison 0 pour conserver les instruments où target a reçu une valeur réelle.
Exemple 3, Niveau de stop optionnel dans une stratégie (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
ENDIFDémarrer stopLevel comme Undefined le maintient inerte jusqu'à ce qu'une entrée attribue un vrai stop.
Erreurs et pièges courants
- Ne peut pas être testé directement. Il n'y a pas de
IF x = Undefinedcomparaison. Comme une variable non définie vaut 0, testezIF x = 0pour vérifier si elle a été définie. - N'assignez qu'une seule fois. Une variable accepte
Undefinedune seule fois, avant qu'elle ne contienne un nombre. Elle ne peut pas être réinitialisée à une valeur indéfinie par la suite. - Entre en conflit avec un vrai zéro. Si 0 est une valeur valide pour la variable, le test à 0 ne peut pas distinguer une variable non initialisée d'un véritable zéro. Utilisez un drapeau distinct dans ce cas.
Instructions liées
Close, le prix de clôture d'un bar.Open, le prix d'ouverture d'un bar.High, le prix le plus haut d'un bar.Low, le prix le plus bas d'un bar.Decimals, le nombre de décimales de l'instrument.Range, le high moins le low d'un bar.Volume, le volume échangé d'un bar.TypicalPrice, la moyenne de high, low et close.