LastSet
LastSet retourne l'index le plus élevé d'un tableau ProBuilder ayant reçu une valeur, ou -1 lorsqu'aucun élément n'est défini. Utile pour les tableaux remplis de façon éparse.
Syntaxe
lastIndex = lastset($array)Paramètres
| Nom | Type | Par défaut | Description |
|---|---|---|---|
$array | tableau | requis | La variable tableau à inspecter. Les noms de tableaux commencent toujours par $. |
Comment ça marche
Les tableaux en ProBuilder sont creux. Affecter une valeur à $prices[7] ne crée pas et n'initialise pas les éléments 0 à 6, il marque seulement l'index 7 comme défini. LastSet parcourt le tableau et renvoie le plus grand index jamais assigné, indépendamment des trous en dessous.
Lorsque le tableau n'a jamais été écrit, ou a été vidé avec Unset, LastSet renvoie -1. Cette valeur sentinelle distingue un tableau vide d'un tableau dont l'élément 0 contient une valeur.
Le schéma le plus courant consiste à utiliser LastSet comme compteur de longueur effective. Quand un tableau est rempli séquentiellement à partir de l'indice 0, lastset($array) + 1 est égal au nombre d'éléments stockés, et $array[lastset($array)] lit la dernière valeur ajoutée. Associé à IsSet, qui teste un seul index, LastSet permet d'itérer sans risque sur des tableaux dont la taille n'est pas connue à l'avance.
Comme la valeur reflète aussi les affectations faites sur les bars précédents, LastSet est également utile pour détecter si un tampon d'accumulation a bien été rempli avant d'y lire.
Exemples
Exemple 1, Trouver le dernier index affecté (Indicateur)
// Assign values at two non-contiguous indices
$myArray[3] = 50
$myArray[7] = 100
lastIndex = lastset($myArray) // returns 7
RETURN lastIndexSeuls les index 3 et 7 sont définis. LastSet ignore le trou et retourne 7, la position affectée la plus élevée.
Exemple 2, Lire le dernier prix d'entrée stocké (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
ENDIFLe tableau grandit d'un emplacement par entrée. LastSet localise le dernier prix ajouté, et la garde contre -1 empêche de lire dans un tableau vide.
Exemple 3, Moyenner uniquement les valeurs collectées jusqu'ici (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 fournit à la fois la position d'ajout et la borne de la boucle, de sorte que le code n'itère jamais au-delà de la portion remplie du tableau.
Erreurs et pièges courants
- Index, pas décompte. LastSet renvoie une position, donc un tableau rempli depuis l'indice 0 contient
lastset($array) + 1éléments. Oublier ce décalage produit des bornes de boucle décalées d'une unité. - -1 utilisé comme index. Sur un tableau vide le résultat est -1, et
$array[lastset($array)]lit alors un index négatif. Testezlastset($array) >= 0avant toute lecture. - Les trous sont invisibles. LastSet ne renvoie que l'indice assigné le plus élevé. Les éléments en dessous peuvent encore être non assignés : une boucle de 0 à LastSet peut donc lire des emplacements jamais écrits. Utilisez
IsSetsur chaque index lorsque des lacunes sont possibles. - Effacé par Unset. Après
Unset($array)la fonction renvoie de nouveau -1, même si la variable tableau elle-même existe toujours et peut être remplie à nouveau.
Instructions liées
IsSet, teste si un index de tableau précis contient une valeur.Unset, efface toutes les valeurs stockées dans un tableau.ArrayMax, renvoie la plus grande valeur stockée dans un tableau.ArrayMin, renvoie la plus petite valeur stockée dans un tableau.ArraySort, trie le contenu d'un tableau en ordre croissant ou décroissant.BarIndex, position du bar courant à partir de zéro, souvent utilisée comme index de tableau.ONCE, initialise une variable sur le premier bar uniquement.