Únete hoy
Constantes/probuilder · probacktest · proorder · proscreener

Undefined

Undefined es un valor de ProBuilder que elimina el valor por defecto 0 de una variable, marcándola como aún no establecida. Asigna Undefined una vez para que una variable no se dibuje ni se trate como cero.

Sintaxis

probuilder
myVariable = Undefined

Undefined se asigna a una variable y no admite índice. Solo se puede asignar a una variable una vez, normalmente al principio del código.

Cómo funciona

Las variables en ProBuilder no se inicializan explícitamente y empiezan en 0. Ese valor por defecto puede causar problemas cuando 0 es un precio válido o la variable debe permanecer oculta hasta que una condición le asigne un valor. Fijar la variable en Undefined elimina ese valor por defecto, de modo que no se dibuja en el gráfico ni se trata como un valor real.

Una variable se puede fijar en Undefined solo una vez, y solo antes de que reciba un valor numérico. Una vez asignado un número real, no se puede devolver al estado indefinido.

No hay forma de comprobar directamente si una variable es igual a Undefined. En contextos booleanos y numéricos una variable no definida se comporta como 0, por lo que el patrón habitual es comprobar si sigue siendo igual a 0 para decidir si se le ha asignado valor. Los valores no definidos también quedan excluidos del escalado del indicador, lo que evita que una serie sin asignar distorsione el eje del gráfico.

Ejemplos

Ejemplo 1, Ocultar un nivel hasta que se establece (Indicador)

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"

Como la variable empieza siendo Undefined, no aparece ninguna línea hasta que el cruce asigna un valor.

Ejemplo 2, Detectar un valor sin establecer (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")

El screener usa la comparación con 0 para conservar los instrumentos donde target recibió un valor real.

Ejemplo 3, Nivel de stop opcional en una estrategia (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

Empezar stopLevel como Undefined lo mantiene inerte hasta que una entrada le asigna un stop real.

Errores y trampas habituales

  • No se puede comprobar directamente. No hay IF x = Undefined comparación. Como una variable no definida se lee como 0, comprueba IF x = 0 para comprobar si se ha establecido.
  • Asigna solo una vez. Una variable acepta Undefined una sola vez, antes de que contenga un número. No se puede volver a dejar indefinida después.
  • Choca con un cero real. Si 0 es un valor válido para la variable, la comprobación de 0 no puede distinguir entre sin asignar y un cero genuino. Usa una marca aparte en ese caso.
  • Close, el precio de cierre de un bar.
  • Open, el precio de apertura de un bar.
  • High, el precio más alto de un bar.
  • Low, el precio más bajo de un bar.
  • Decimals, el número de decimales del instrumento.
  • Range, el high menos el low de un bar.
  • Volume, el volumen negociado de un bar.
  • TypicalPrice, la media de high, low y close.