Rejoignez-nous
Instructions/probuilder · probacktest · proorder · proscreener

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

probuilder
lastIndex = lastset($array)

Paramètres

NomTypePar défautDescription
$arraytableaurequisLa 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)

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

Seuls 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)

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

Le 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)

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 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. Testez lastset($array) >= 0 avant 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 IsSet sur 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.
  • 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.