Rejoignez-nous
Constantes/probuilder · probacktest · proorder · proscreener

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

probuilder
myVariable = Undefined

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

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"

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)

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

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)

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

Dé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 = Undefined comparaison. Comme une variable non définie vaut 0, testez IF x = 0 pour vérifier si elle a été définie.
  • N'assignez qu'une seule fois. Une variable accepte Undefined une 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.
  • 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.