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
myVariable = UndefinedUndefined 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)
// 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)
// 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)
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
ENDIFEmpezar 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 = Undefinedcomparación. Como una variable no definida se lee como 0, compruebaIF x = 0para comprobar si se ha establecido. - Asigna solo una vez. Una variable acepta
Undefineduna 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.
Instrucciones relacionadas
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.