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

ArrayMax

ArrayMax devuelve el valor más grande almacenado en un array de ProBuilder. Úsalo para extraer el máximo de puntos de datos recopilados en indicadores y estrategias.

Sintaxis

probuilder
result = ArrayMax($MyArray)

Parámetros

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

Cómo funciona

ArrayMax examina cada elemento que se ha asignado en el array y devuelve el único valor más grande. Sustituye el patrón habitual de recorrer los índices y comparar cada elemento con un máximo acumulado, lo que mantiene los scripts más cortos y menos propensos a errores.

La función opera sobre el array tal como está en el momento de la llamada. En ProBuilder los arrays persisten de bar a bar, de modo que un array que recibe un elemento nuevo por bar acumula histórico, y ArrayMax refleja todo lo almacenado hasta ese momento, no solo el bar actual. Para limitar el resultado a una ventana móvil, sobrescribe un conjunto fijo de índices o vacía el array con Unset antes de volver a rellenarlo.

Si el array no contiene ningún elemento, ArrayMax devuelve un valor indefinido. Proteger la llamada con IsSet o comprobar LastSet evita introducir un resultado indefinido en cálculos posteriores.

ArrayMax se diferencia de Highest, que funciona sobre series de precios en un número fijo de bars, y de MAX, que compara exactamente dos valores escalares. ArrayMax es la única de las tres que opera sobre una colección arbitraria rellenada por el usuario.

Ejemplos

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

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

// Extract the largest stored value
highestPrice = ArrayMax($prices)
RETURN highestPrice

El array contiene cinco valores y ArrayMax devuelve 140, el mayor de ellos. Este es el uso canónico: rellenar y después consultar.

Ejemplo 2, Nivel de breakout a partir de máximos de swing registrados (ProOrder)

probuilder
DEFPARAM CumulateOrders = false

// Record the high of each bar where RSI was above 60
IF RSI[14](close) > 60 THEN
  $swingHighs[LastSet($swingHighs) + 1] = high
ENDIF

// Enter long on a break above the strongest recorded high
IF IsSet($swingHighs[1]) THEN
  breakoutLevel = ArrayMax($swingHighs)
  IF close CROSSES OVER breakoutLevel THEN
    BUY 1 CONTRACT AT MARKET
  ENDIF
ENDIF

SET STOP %LOSS 2

La estrategia añade un máximo al array siempre que el momentum es fuerte y después usa ArrayMax para derivar un umbral de breakout a partir de todos los máximos registrados.

Ejemplo 3, Filtro de picos de volumen (ProScreener)

probuilder
// Collect the volume of the last 20 bars into an array
FOR i = 1 TO 20 DO
  $vols[i] = volume[i]
NEXT

// Flag instruments whose current volume exceeds every stored value
maxVol = ArrayMax($vols)
SCREENER[volume > maxVol] (volume AS "Volume")

El screener almacena las 20 lecturas de volumen anteriores y después conserva solo los instrumentos donde el volumen de la bar actual supera el ArrayMax de esa ventana.

Errores y trampas habituales

  • El argumento debe ser un array. Pasar una variable simple, una serie de precios o el resultado de un indicador produce un error de compilación. Solo las variables con el prefijo $ e indexados con corchetes son válidos.
  • Un array vacío devuelve undefined. Llamar a ArrayMax antes de haber asignado algún elemento devuelve un valor indefinido que se propaga silenciosamente por la aritmética. Comprueba IsSet($array[index]) o LastSet primero.
  • Los arrays se acumulan a lo largo de las bars. Un array al que se añaden elementos en cada bar crece durante toda la vida del gráfico, por lo que ArrayMax cubre todo el historial acumulado. Para un máximo móvil, reutiliza un rango de índices fijo o vacía el array con Unset.
  • No sustituye a Highest. Para el máximo de una serie integrada en los últimos n bars, Highest[n](series) es más simple y rápido que copiar valores en un array.
  • ArrayMin, devuelve el valor más pequeño 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.
  • Highest, valor más alto de una serie en un número fijo de bars.
  • MAX, el mayor de dos valores escalares.
  • BarIndex, posición del bar actual en los datos cargados.