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

ArrayMin

ArrayMin devuelve el valor más pequeño almacenado en un array de ProBuilder. Úsalo para extraer el mínimo de puntos de datos recopilados en indicadores y estrategias.

Sintaxis

probuilder
result = ArrayMin($MyArray)

Parámetros

NombreTipoPor defectoDescripción
$MyArrayarrayobligatorioLa variable de array a escanear. Los nombres de array siempre empiezan por $.

Cómo funciona

ArrayMin examina los elementos asignados de un array y devuelve el valor más pequeño. Es la contrapartida de ArrayMax y ahorra el código repetitivo de iterar sobre índices mientras se lleva un mínimo acumulado.

El resultado refleja todo el contenido del array en el momento de la llamada. Como los arrays de ProBuilder persisten entre bars, un array que gana un elemento en cada bar sigue creciendo, y ArrayMin cubre entonces todo el histórico acumulado y no una ventana reciente. Para evaluar solo los datos recientes, sobrescribe un rango fijo de índices en cada bar o vacía el array con Unset antes de volver a llenarlo.

ArrayMin solo funciona con datos numéricos. Cuando el array está vacío, la función devuelve un valor indefinido, por lo que las llamadas deberían protegerse con IsSet o un LastSet comprueba cuando el llenado del array es condicional.

Para las series integradas hay alternativas más simples: Lowest[n](series) devuelve el mínimo de una serie en los últimos n bars, y MIN(a, b) compara dos escalares. ArrayMin es la herramienta adecuada cuando los valores se han recogido manualmente en un array, por ejemplo muestras filtradas que no se corresponden con bars consecutivos.

Ejemplos

Ejemplo 1, El más bajo de cinco precios almacenados (Indicador)

probuilder
// Store five closing prices in an array
$myPrices[1] = 130
$myPrices[2] = 135
$myPrices[3] = 128
$myPrices[4] = 140
$myPrices[5] = 132

// Extract the smallest stored value
lowestPrice = ArrayMin($myPrices)
RETURN lowestPrice

El array contiene cinco valores y ArrayMin devuelve 128, el menor de ellos.

Ejemplo 2, Stop de protección a partir de mínimos de retroceso registrados (ProOrder)

probuilder
DEFPARAM CumulateOrders = false

// Record the low of each bar where RSI dipped below 40
IF RSI[14](close) < 40 THEN
  $pullbackLows[LastSet($pullbackLows) + 1] = low
ENDIF

// Long entry on a moving average cross, stop below the weakest recorded low
IF Average[20](close) CROSSES OVER Average[50](close) AND IsSet($pullbackLows[1]) THEN
  supportLevel = ArrayMin($pullbackLows)
  BUY 1 CONTRACT AT MARKET
  SET STOP PRICE supportLevel
ENDIF

La estrategia acumula los mínimos de retroceso en un array y usa ArrayMin para colocar el stop por debajo del mínimo registrado más profundo.

Ejemplo 3, Nuevo mínimo frente a una ventana almacenada (ProScreener)

probuilder
// Collect the lows of the previous 20 bars into an array
FOR i = 1 TO 20 DO
  $lows[i] = low[i]
NEXT

// Flag instruments printing a low beneath every stored value
windowMin = ArrayMin($lows)
SCREENER[low < windowMin] (close AS "Last price")

El screener almacena los últimos 20 mínimos y conserva solo los instrumentos cuyo mínimo actual queda por debajo del ArrayMin de esa ventana.

Errores y trampas habituales

  • El argumento debe ser un array. Pasar a ArrayMin una variable simple o una serie de precios no compila. Solo $-prefijadas, se aceptan variables de array indexadas entre corchetes.
  • Un array vacío devuelve undefined. Antes de asignar cualquier elemento, ArrayMin devuelve un valor indefinido que puede corromper silenciosamente los cálculos posteriores. Compruébalo con IsSet o LastSet antes de confiar en el resultado.
  • Los contenidos no numéricos provocan errores. La función está definida solo para datos numéricos. Las marcas booleanas almacenadas como 0 y 1 son válidas, pero el array debe contener números.
  • El histórico sigue acumulándose. Un array al que se añade en cada bar convierte ArrayMin en un mínimo de todo el histórico, no en uno móvil. Reutiliza índices fijos o límpialo con Unset para obtener un resultado por ventana.
  • ArrayMax, devuelve el valor más grande almacenado en un array.
  • ArraySort, ordena los elementos de un array en orden ascendente o descendente.
  • IsSet, comprueba si un elemento dado de un array ha sido asignado.
  • LastSet, devuelve el índice más alto asignado en un array.
  • Unset, borra un array o un solo elemento.
  • Lowest, el valor más bajo de una serie en un número fijo de bars.
  • MIN, el menor de dos valores escalares.
  • BarIndex, posición del bar actual en los datos cargados.