Unset
Unset borra todos los valores almacenados de un array de ProBuilder en una sola llamada, devolviendo el array a un estado vacío para que pueda volver a llenarse con datos nuevos más adelante.
Sintaxis
Unset($array)Parámetros
| Nombre | Tipo | Por defecto | Descripción |
|---|---|---|---|
$array | array | obligatorio | La variable de array cuyo contenido se borra. Los nombres de array siempre empiezan por $. |
Cómo funciona
Unset borra todos los elementos del array indicado de una vez. Después de la llamada, ningún índice cuenta ya como asignado: IsSet devuelve 0 para cada posición y LastSet devuelve -1, exactamente como si nunca se hubiera escrito en el array. La variable en sí no se elimina; las asignaciones posteriores la repueblan con normalidad.
La instrucción existe porque los arrays persisten de barra a barra. Los valores escritos en barras anteriores siguen disponibles en las posteriores, que es lo que hace útiles los arrays como búferes de acumulación, pero también significa que los datos obsoletos sobreviven si no se borran explícitamente. Unset es el interruptor de reinicio de esa persistencia.
Los patrones habituales vinculan el reinicio a un evento de mercado o a un límite del calendario: vaciar un búfer de sesión cuando empieza un nuevo día de negociación, descartar las estadísticas recogidas cuando el precio rompe un nivel clave, o vaciar un array temporal al inicio de un cálculo por barra antes de volver a llenarlo. Solo se ve afectado el array indicado, los demás arrays y las variables simples conservan sus valores.
Leer un elemento después de Unset sin reasignarlo primero devuelve el estado no asignado en lugar del valor anterior, por lo que cualquier código que consuma el array debería rellenarlo de nuevo o comprobar IsSet antes de leer.
Ejemplos
Ejemplo 1, Vaciar un búfer en una ruptura a la baja (Indicador)
// Fill the array with moving average values
FOR i = 0 TO 19 DO
$Array1[i] = average[i](close)
NEXT
// Reset the buffer when price breaks the 20-bar low
IF close crosses under low[20] THEN
Unset($Array1)
ENDIF
RETURN lastset($Array1) AS "filled up to index"El array guarda valores medios hasta que se activa la condición de ruptura a la baja, momento en el que Unset lo vacía para que pueda reconstruirse con datos nuevos.
Ejemplo 2, Reiniciar las estadísticas de la sesión cada día (ProOrder)
// Collect the range of every bar during the session
IF intradaybarindex = 0 THEN
// new trading day, discard yesterday's data
Unset($barRanges)
ENDIF
$barRanges[max(0, lastset($barRanges) + 1)] = high - low
// Trade only when today already shows expanding ranges
IF lastset($barRanges) >= 5 THEN
IF high - low > arraymax($barRanges) * 0.9 AND NOT onmarket THEN
BUY 1 CONTRACT AT MARKET
ENDIF
ENDIF
SET STOP %LOSS 1Unset se ejecuta en la primera barra de cada día, por lo que el array de estadísticas describe siempre solo la sesión actual.
Ejemplo 3, Array temporal reconstruido en cada barra (ProScreener)
// Start from an empty scratch buffer on each evaluation
Unset($gains)
FOR k = 0 TO 9 DO
IF close[k] > close[k + 1] THEN
$gains[k] = close[k] - close[k + 1]
ENDIF
NEXT
// Sum only the indices that were actually set
total = 0
FOR k = 0 TO 9 DO
IF isset($gains[k]) THEN
total = total + $gains[k]
ENDIF
NEXT
SCREENER[total > 0] (total AS "10-bar gain sum")Como los arrays persisten entre barras, el Unset inicial garantiza que el búfer contenga solo valores calculados para la barra actual.
Errores y trampas habituales
- Leer después de vaciar. Los elementos a los que se accede después de Unset están sin asignar, no son restos garantizados a cero. Rellena el array de nuevo o protege las lecturas con
IsSetantes de consumir valores. - Olvidar que los arrays persisten. Omitir Unset no genera un error, mezcla de forma silenciosa los datos de barras antiguas en los nuevos cálculos. Los búferes que se reconstruyen por barra o por sesión necesitan un reinicio explícito.
- Borrar más de lo previsto. Unset borra siempre todo el array. No existe una forma por índice, eliminar un solo elemento requiere reconstruir el array sin él.
- LastSet devuelve -1 después. El código que añade con
$array[lastset($array) + 1]sigue funcionando después de Unset porque -1 + 1 = 0, pero el código que lee$array[lastset($array)]sin protección indexa -1.
Instrucciones relacionadas
IsSet, comprueba si un índice concreto del array contiene un valor.LastSet, devuelve el índice asignado más alto, -1 después de Unset.ArrayMax, el valor más grande almacenado actualmente en un array.ArrayMin, el valor más pequeño almacenado actualmente en un array.ArraySort, ordena el contenido de un array en su lugar.ONCE, inicialización única para variables simples.BarIndex, posición de la barra actual, a menudo combinada con arrays como índice.