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

LastSet

LastSet devuelve el índice más alto de un array de ProBuilder al que se ha asignado un valor, o -1 cuando ningún elemento está asignado. Útil para arrays rellenados de forma dispersa.

Sintaxis

probuilder
lastIndex = lastset($array)

Parámetros

NombreTipoPor defectoDescripción
$arrayarrayobligatorioLa variable de array a inspeccionar. Los nombres de array siempre empiezan por $.

Cómo funciona

Los arrays en ProBuilder son dispersos. Asignar un valor a $prices[7] no crea ni inicializa los elementos 0 a 6, solo marca el índice 7 como asignado. LastSet recorre el array y devuelve el índice más alto que se haya asignado alguna vez, con independencia de los huecos por debajo.

Cuando nunca se ha escrito en el array, o se ha vaciado con Unset, LastSet devuelve -1. Ese valor centinela distingue un array vacío de un array cuyo elemento 0 contiene un valor.

El patrón más habitual es tratar LastSet como un contador de longitud efectiva. Cuando un array se rellena secuencialmente desde el índice 0, lastset($array) + 1 es igual al número de elementos almacenados, y $array[lastset($array)] lee el último valor añadido. Junto con IsSet, que comprueba un único índice, LastSet permite iterar de forma segura sobre arrays cuyo tamaño no se conoce de antemano.

Como el valor refleja también las asignaciones realizadas en bars anteriores, LastSet resulta útil además para detectar si un búfer de acumulación se ha llenado en algún momento antes de leer de él.

Ejemplos

Ejemplo 1, Encontrar el último índice asignado (Indicador)

probuilder
// Assign values at two non-contiguous indices
$myArray[3] = 50
$myArray[7] = 100
lastIndex = lastset($myArray) // returns 7
RETURN lastIndex

Solo los índices 3 y 7 están asignados. LastSet ignora el hueco y devuelve 7, la posición asignada más alta.

Ejemplo 2, Leer el precio de entrada almacenado más reciente (ProBacktest)

probuilder
// Append each entry price to an array
IF longtriggered THEN
  $entries[lastset($entries) + 1] = tradeprice
ENDIF

// Exit when price falls 2% below the latest recorded entry
IF lastset($entries) >= 0 THEN
  IF close < $entries[lastset($entries)] * 0.98 THEN
    SELL AT MARKET
  ENDIF
ENDIF

IF close crosses over average[50](close) THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

El array crece una posición por cada entrada. LastSet localiza el último precio añadido, y la protección frente a -1 evita leer de un array vacío.

Ejemplo 3, Promediar solo los valores recopilados hasta el momento (ProScreener)

probuilder
// Store the close of every bullish bar
IF close > open THEN
  $bullCloses[lastset($bullCloses) + 1] = close
ENDIF

// Average the collected values once at least five exist
count = lastset($bullCloses) + 1
avgBull = 0
IF count >= 5 THEN
  FOR i = 0 TO lastset($bullCloses) DO
    avgBull = avgBull + $bullCloses[i]
  NEXT
  avgBull = avgBull / count
ENDIF

SCREENER[close > avgBull AND count >= 5] (avgBull AS "Avg bull close")

LastSet proporciona tanto la posición de añadido como el límite del bucle, de modo que el código nunca itera más allá de la parte rellenada del array.

Errores y trampas habituales

  • Índice, no recuento. LastSet devuelve una posición, por lo que un array rellenado desde el índice 0 contiene lastset($array) + 1 elementos. Olvidar el desplazamiento produce límites de bucle desviados en uno.
  • Usar -1 como índice. En un array vacío el resultado es -1, y $array[lastset($array)] entonces lee un índice negativo. Comprueba lastset($array) >= 0 antes de cualquier lectura.
  • Los huecos son invisibles. LastSet solo informa del índice asignado más alto. Los elementos por debajo pueden seguir sin asignar, por lo que un bucle de 0 a LastSet puede leer posiciones que nunca se escribieron. Usa IsSet en cada índice cuando puede haber huecos.
  • Se borra con Unset. Después de Unset($array) la función devuelve de nuevo -1, aunque la propia variable de array siga existiendo y pueda rellenarse otra vez.
  • IsSet, comprueba si un índice concreto de un array contiene un valor.
  • Unset, borra todos los valores almacenados de un array.
  • ArrayMax, devuelve el valor más grande almacenado en un array.
  • ArrayMin, devuelve el valor más pequeño almacenado en un array.
  • ArraySort, ordena el contenido de un array en orden ascendente o descendente.
  • BarIndex, posición basada en cero del bar actual, utilizada a menudo como índice de array.
  • ONCE, inicializa una variable solo en el primer bar.