Iscriviti ora
Istruzioni/probuilder · probacktest · proorder · proscreener

ArrayMax

ArrayMax restituisce il valore più grande memorizzato in un array ProBuilder. Usalo per estrarre il massimo dai dati raccolti in indicatori e strategie.

Sintassi

probuilder
result = ArrayMax($MyArray)

Parametri

NomeTipoPredefinitoDescrizione
$MyArrayarrayobbligatorioLa variabile array da analizzare. I nomi degli array iniziano sempre con $.

Come funziona

ArrayMax esamina ogni elemento assegnato nell'array e restituisce il singolo valore più grande. Sostituisce il pattern comune di ciclare sugli indici confrontando ogni elemento con un massimo progressivo, il che mantiene gli script più brevi e meno soggetti a errori.

La funzione opera sull'array così come esiste nel momento della chiamata. In ProBuilder gli array persistono da un bar al successivo, quindi un array che riceve un nuovo elemento per ogni bar accumula storico, e ArrayMax riflette tutto ciò che è stato memorizzato fino a quel punto, non solo il bar corrente. Per limitare il risultato a una finestra mobile, occorre sovrascrivere un insieme fisso di indici oppure svuotare l'array con Unset prima di ripopolarla.

Se l'array non contiene alcun elemento, ArrayMax restituisce un valore indefinito. Proteggere la chiamata con IsSet o verificare LastSet evita di passare un risultato indefinito ai calcoli successivi.

ArrayMax si differenzia da Highest, che opera su serie di prezzi su un numero fisso di bars, e da MAX, che confronta esattamente due valori scalari. ArrayMax è l'unica delle tre che opera su una collezione arbitraria riempita dall'utente.

Esempi

Esempio 1, Il più alto di cinque prezzi memorizzati (Indicatore)

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

L'array contiene cinque valori e ArrayMax restituisce 140, il più grande di essi. Questo è l'uso canonico: popolare, poi interrogare.

Esempio 2, Livello di breakout dai massimi di swing registrati (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 strategia aggiunge un massimo all'array ogni volta che il momentum è forte, poi usa ArrayMax per ricavare una soglia di breakout da tutti i massimi registrati.

Esempio 3, Filtro per picchi di volume (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")

Lo screener memorizza le 20 letture di volume precedenti, poi mantiene solo gli strumenti in cui il volume della bar corrente supera l'ArrayMax di quella finestra.

Errori e insidie comuni

  • L'argomento deve essere un array. Passare una variabile semplice, una serie di prezzi o il risultato di un indicatore produce un errore di compilazione. Solo le variabili con prefisso $ e indicizzate con parentesi quadre sono ammesse.
  • Un array vuoto restituisce undefined. Chiamare ArrayMax prima che sia stato assegnato un qualsiasi elemento produce un valore indefinito che si propaga silenziosamente nei calcoli. Verifica IsSet($array[index]) o LastSet prima.
  • Gli array si accumulano attraverso le bar. Un array a cui si aggiungono elementi a ogni bar cresce per tutta la durata del grafico, quindi ArrayMax copre l'intero storico accumulato. Per un massimo mobile, riutilizza un intervallo di indici fisso o svuota l'array con Unset.
  • Non sostituisce Highest. Per il massimo di una serie integrata sugli ultimi n bar, Highest[n](series) è più semplice e veloce che copiare i valori in un array.
  • ArrayMin, restituisce il valore più piccolo memorizzato in un array.
  • ArraySort, ordina gli elementi di un array in ordine crescente o decrescente.
  • IsSet, verifica se un dato elemento di un array è stato assegnato.
  • LastSet, restituisce l'indice più alto assegnato in un array.
  • Unset, svuota un array o un singolo elemento.
  • Highest, valore più alto di una serie su un numero fisso di bar.
  • MAX, il maggiore di due valori scalari.
  • BarIndex, posizione della bar corrente nei dati caricati.