[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 306

 
drknn:

Un tableau de longueur "infinie" peut être déclaré dans un indicateur. Déclarez-le et ensuite, dans la boucle, écrivez immédiatement les valeurs trouvées dans le tableau. La seule question qui se pose est de savoir comment transférer la sélection nécessaire à l'Expert Advisor/Script ? Il existe des outils, mais nous devons en évaluer la complexité. Peut-être serait-il vraiment plus facile de faire deux exécutions - dans la première, nous calculons le nombre de valeurs filtrées, puis nous changeons la dimension du tableau, et dans la seconde, nous entrons les valeurs dans le tableau ?

Merci, mais la variante avec l'indicateur n'est pas adaptée - avant de transférer l'échantillon obtenu vers le Conseiller Expert, il y a un problème avec le transfert des conditions de l'échantillon du Conseiller Expert vers l'indicateur.
 
PapaYozh:

Déclarer un tableau plus grand que la taille maximale requise.


Exactement :) Cela fonctionnera si nous augmentons la taille plusieurs fois. Par exemple, nous savons à l'avance que le nombre de valeurs filtrées ne peut pas dépasser mille. Déclarons un tableau de plusieurs milliers de cellules et nous avons terminé :)

Mais il prendra une partie de la mémoire nécessaire. :(

 
drknn:


Exactement :) Cela fonctionnera si nous augmentons la taille plusieurs fois. Par exemple, nous savons à l'avance que le nombre de valeurs filtrées ne peut pas dépasser mille. Déclarons un tableau de plusieurs milliers de cellules et nous avons terminé :)

Mais il prendra une partie de la mémoire nécessaire. :(


Si "on sait d'avance que le nombre de valeurs filtrées ne peut pas dépasser mille", il suffit de déclarer un tableau de taille 1000.
 
splxgf:

https://docs.mql4.com/ru/math/MathPow non ? Ou les opérations élémentaires sont une condition du problème. Alors l'option http://bpascal.ru/download/desc/436.php si vous faites tout à la main, puis implémentez l'exposant et le logarithme avec vos propres fonctions.

Oui, exactement selon les conditions. Merci pour le lien, c'est exactement ce dont j'ai besoin !
 
Elenn:
Bonjour, quelques conseils : La boucle recherche les valeurs qui répondent à certaines conditions. Les valeurs trouvées sont écrites dans un tableau. On ne sait pas à l'avance combien de valeurs seront trouvées, la taille du tableau à déclarer est donc inconnue. Du point de vue du temps et des ressources, je préférerais ne pas faire deux exécutions (afin de pouvoir compter le nombre de valeurs trouvées dans la première exécution, déclarer le tableau et écrire des données dans le tableau dans la seconde). Existe-t-il un moyen d'obtenir le résultat souhaité en une seule fois ?
Vous pouvez augmenter la taille du tableau d'une cellule pour chaque valeur trouvée. Mais ce n'est pas très rapide. Vous pouvez optimiser en augmentant la taille de plusieurs cellules, puis en sautant le redimensionnement pendant plusieurs itérations.
 
PapaYozh:

Si vous "savez à l'avance que le nombre de valeurs filtrées ne peut dépasser mille", vous pouvez simplement déclarer un tableau de taille 1000.


Mais qu'en est-il d'un plan d'urgence en cas de force majeure ? Pourriez-vous écrire un code qui informe d'une erreur et bloque l'Expert Advisor ? Eh bien, une personne pourrait ne pas le voir - eh bien, il était juste au travail à ce moment-là.

Oui, en effet, il y a plus d'une solution au problème. Je pense que la meilleure solution est celle suggérée par Zhunko - augmenter dynamiquement la dimension du tableau à l'intérieur de la boucle de filtrage. Franchement, je suis ravi de cette réponse. Cela ne m'est jamais venu à l'esprit :)

 
drknn:


Je pense que la meilleure solution serait encore celle suggérée par Zhunko - augmenter dynamiquement la dimensionnalité du tableau à l'intérieur de la boucle de filtrage. Honnêtement, je suis ravi de cette réponse. Cela ne m'est jamais venu à l'esprit :)

La solution est vraiment originale, je devrais l'essayer. Mais lors de la redéclaration du tableau, les données ne seront-elles pas perdues en raison de la réinitialisation ?
 
Elenn:
La solution est vraiment originale, nous devrions l'essayer. Mais lorsque vous redéclarez le tableau, les données ne seront-elles pas perdues en raison de la réinitialisation ?

Je fais souvent cela. Je crée un tableau initial. Ensuite (si nécessaire), je le maximise par une certaine valeur (on ne peut pas, cela prend trop de temps pour effectuer des opérations de tableau) et je vérifie simplement la taille du tableau réellement rempli dans mon travail. Jusqu'à présent, il n'y a pas eu de problèmes
 
Vinin:

Les opérations sur les tableaux prennent trop de temps à se terminer
Toutes les opérations du tableau sont-elles longues, ou seulement certaines d'entre elles ?
 
Elenn:
Est-ce qu'il faut beaucoup de temps pour effectuer toutes les opérations du tableau ou seulement certaines d'entre elles ?

Surtout pour redimensionner un tableau. Il est préférable de les faire le moins souvent possible.