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
lastIndex = lastset($array)Parametri
| Nome | Tipo | Predefinito | Descrizione |
|---|---|---|---|
$array | array | obbligatorio | La 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)
// Assign values at two non-contiguous indices
$myArray[3] = 50
$myArray[7] = 100
lastIndex = lastset($myArray) // returns 7
RETURN lastIndexSolo 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)
// 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
ENDIFL'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)
// 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) + 1elementi. 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. Verificalastset($array) >= 0prima 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
IsSetsu 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.
Istruzioni correlate
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.