Iscriviti ora
Istruzioni/probuilder · probacktest · proorder · proscreener

LastSet

LastSet restituisce l'indice più alto di un array ProBuilder a cui è stato assegnato un valore, oppure -1 quando nessun elemento è impostato. Utile per array riempiti in modo sparso.

Sintassi

probuilder
lastIndex = lastset($array)

Parametri

NomeTipoPredefinitoDescrizione
$arrayarrayobbligatorioLa variabile array da esaminare. I nomi degli array iniziano sempre con $.

Come funziona

Gli array in ProBuilder sono sparsi. Assegnare un valore a $prices[7] non crea né inizializza gli elementi da 0 a 6, segna soltanto l'indice 7 come assegnato. LastSet analizza l'array e restituisce l'indice più alto che sia mai stato assegnato, indipendentemente da eventuali lacune al di sotto.

Quando l'array non è mai stato scritto, o è stato azzerato con Unset, LastSet restituisce -1. Quel valore sentinella distingue un array vuoto da un array il cui elemento 0 contiene un valore.

Il pattern più comune è usare LastSet come contatore della lunghezza effettiva. Quando un array viene riempito in sequenza dall'indice 0, lastset($array) + 1 è pari al numero di elementi memorizzati, e $array[lastset($array)] legge il valore aggiunto più recentemente. Insieme a IsSet, che verifica un singolo indice, LastSet consente un'iterazione sicura su array la cui dimensione non è nota in anticipo.

Poiché il valore riflette anche le assegnazioni fatte sulle bar precedenti, LastSet è utile anche per rilevare se un buffer di accumulo è stato popolato prima di leggerlo.

Esempi

Esempio 1, Trovare l'ultimo indice assegnato (Indicatore)

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

Solo gli indici 3 e 7 sono impostati. LastSet ignora la lacuna e restituisce 7, la posizione assegnata più alta.

Esempio 2, Leggere il prezzo di ingresso memorizzato più recente (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

L'array cresce di uno slot per ogni ingresso. LastSet individua l'ultimo prezzo aggiunto, e la protezione contro -1 evita la lettura da un array vuoto.

Esempio 3, Mediare solo i valori raccolti finora (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 fornisce sia la posizione di aggiunta sia il limite del ciclo, così il codice non itera mai oltre la porzione riempita dell'array.

Errori e insidie comuni

  • Indice, non conteggio. LastSet restituisce una posizione, quindi un array riempito dall'indice 0 contiene lastset($array) + 1 elementi. Dimenticare l'offset produce limiti di ciclo sbagliati di uno.
  • -1 usato come indice. Su un array vuoto il risultato è -1, e $array[lastset($array)] poi legge un indice negativo. Verifica lastset($array) >= 0 prima di qualsiasi lettura.
  • Le lacune sono invisibili. LastSet riporta solo l'indice assegnato più alto. Gli elementi sotto di esso possono essere ancora non assegnati, quindi un ciclo da 0 a LastSet può leggere slot mai scritti. Usa IsSet su ogni indice quando sono possibili dei vuoti.
  • Azzerato da Unset. Dopo Unset($array) la funzione restituisce di nuovo -1, anche se la variabile array stessa continua a esistere e può essere riempita di nuovo.
  • IsSet, verifica se un indice specifico di un array contiene un valore.
  • Unset, cancella tutti i valori memorizzati in un array.
  • ArrayMax, restituisce il valore più grande memorizzato in un array.
  • ArrayMin, restituisce il valore più piccolo memorizzato in un array.
  • ArraySort, ordina il contenuto di un array in ordine crescente o decrescente.
  • BarIndex, posizione della bar corrente a partire da zero, spesso usata come indice di array.
  • ONCE, inizializza una variabile solo sulla prima bar.