IsSet
IsSet dans ProBuilder retourne 1 lorsqu'un élément de tableau donné a reçu une valeur et 0 dans le cas contraire, ce qui évite de lire des entrées de tableau non initialisées.
Syntaxe
ISSET($MyArray[index])Paramètres
| Nom | Type | Par défaut | Description |
|---|---|---|---|
| $MyArray | tableau | requis | Le tableau dont l'élément est testé. Les noms de tableaux commencent par $. |
| index | entier | requis | La position de l'élément à vérifier. |
Formule
ISSET($a[i]) = 1 if element i of $a has been assigned
= 0 otherwiseComment ça marche
Les tableaux ProBuilder n'ont pas besoin d'être déclarés avec une taille, et des éléments peuvent être écrits à des index arbitraires. Cette souplesse signifie qu'un tableau peut contenir des trous : l'index 0 et l'index 2 peuvent contenir des valeurs alors que l'index 1 n'a jamais été touché. ISSET indique, élément par élément, si une affectation a eu lieu.
Lire un élément qui n'a jamais été défini ne lève pas d'erreur, cela produit simplement une valeur par défaut, ce qui rend les bugs de ce type silencieux et difficiles à tracer. Protéger les lectures avec ISSET transforme la valeur par défaut silencieuse en une branche explicite, de sorte que le script peut ignorer l'élément, substituer une valeur de repli ou chercher ailleurs.
La vérification se fait par index, pas par tableau. Tester ISSET($a[0]) ne dit rien sur $a[1]. Un élément reste défini une fois affecté, sauf s'il est explicitement effacé avec UNSET, après quoi ISSET renvoie à nouveau 0 pour lui. LASTSET complète ISSET en renvoyant l'indice le plus élevé qui a été affecté, ce qui est utile pour parcourir un tableau peu rempli.
Exemples
Exemple 1, Tester des éléments de tableau épars (Indicateur)
// Assign two of four elements
$levels[0] = 10
$levels[2] = 30
// ISSET returns 1 for assigned indices and 0 for the gaps
a = ISSET($levels[0]) // 1
b = ISSET($levels[1]) // 0
c = ISSET($levels[2]) // 1
d = ISSET($levels[3]) // 0
RETURN a + b + c + d AS "elements set"Seuls les indices 0 et 2 ont été écrits, donc les quatre tests renvoient 1, 0, 1, 0 et l'indicateur affiche 2, le nombre d'éléments remplis.
Exemple 2, Lire une valeur par bar uniquement lorsqu'elle existe (Indicateur)
// Store the high of each bar that sets a new 20-bar peak
IF high >= Highest[20](high) THEN
$peaks[BarIndex] = high
ENDIF
// Fall back to 0 on bars where no peak was recorded
val = 0
IF ISSET($peaks[BarIndex]) THEN
val = $peaks[BarIndex]
ENDIF
RETURN val AS "latest peak"Le tableau n'est écrit que sur les bars de sommet, laissant des trous partout ailleurs. ISSET distingue les bars enregistrés des bars vides avant que l'élément ne soit lu.
Exemple 3, Protéger les prix d'entrée stockés (ProBacktest)
// Record each entry price in an array as trades open
IF NOT ONMARKET AND close CROSSES OVER Average[50](close) THEN
BUY 1 CONTRACT AT MARKET
$entryPrices[n] = close
n = n + 1
ENDIF
// Exit 2 percent above the last stored entry, if one exists
IF LONGONMARKET AND ISSET($entryPrices[n - 1]) THEN
IF close > $entryPrices[n - 1] * 1.02 THEN
SELL AT MARKET
ENDIF
ENDIFAvant que la règle de sortie ne lise le dernier prix d'entrée stocké, ISSET confirme que l'élément existe, ce qui protège les premiers bars où aucun trade n'a encore été enregistré.
Erreurs et pièges courants
- Les lectures non définies échouent silencieusement. Accéder à un élément qui n'a jamais été affecté retourne une valeur par défaut au lieu d'une erreur, donc une garde ISSET manquante produit des nombres faux plutôt qu'un plantage.
- Zéro est une valeur définie. Un élément auquel la valeur 0 est affectée indique tout de même ISSET = 1. Tester
$a[i] = 0ne remplace pas ISSET, car elle ne peut pas distinguer « valeur zéro assignée » de « jamais assignée ». - Portée par élément. ISSET vérifie un index à la fois. Vérifier qu'un tableau "contient des données" nécessite de contrôler les index précis que le code va lire, ou d'utiliser LASTSET pour trouver la plage remplie.
- UNSET efface le drapeau. Après qu'UNSET a supprimé un élément, ISSET retourne de nouveau 0 pour cet index. Un code qui conserve un index d'un bar à l'autre doit revérifier avant de lire.
Instructions liées
Unset, efface un élément de tableau ou un tableau entier.LastSet, renvoie l'indice le plus élevé attribué dans un tableau.ArrayMax, plus grande valeur stockée dans un tableau.ArrayMin, plus petite valeur stockée dans un tableau.ArraySort, trie le contenu d'un tableau sur place.ONCE, initialisation unique d'une variable sur le premier bar.BarIndex, numéro du bar courant, un index de tableau courant.