Erreurs, bugs, questions - page 348

 
Rosh:

S'il y a une position, vous obtiendrez une boucle infinie car

est équivalent à

Il n'y a aucun moyen de sortir de la boucle dans le code car il n'y a pas de rupture dans le corps de l'opérateur ;
Merci beaucoup, il ne devrait pas être là ; je l'ai corrigé, tout fonctionne.
 

Erreurs (build 421, peut-être quelque chose de corrigé dans la 425, pas encore de mise à jour de la 425 par alpari) :

1. Déjà écrit dans le fil de discussion sur la visualisation 3D : les légendes des graphiques 3D (nom de l'échelle et valeur de l'échelle) ne changent pas lorsque l'on modifie les paramètres d'affichage sur le graphique.

2. Au cours de l'optimisation rapide, le graphique est apparié à environ 10600ème passage, c'est-à-dire que l'optimisation se poursuit pendant 50,51...60 générations et le graphique ne se déplace pas et les nouveaux passages ne sont pas affichés. Dans le même temps, l'onglet Paramètres affiche "Progression de l'optimisation :" au lieu du nombre de passages, et dans certaines circonstances inexpliquées, il passe encore à, par exemple, 12420/14400 (les chiffres sont approximatifs).

3. Les agents supprimés peuvent passer à l'état Busy et rester dans cet état, je dois les désactiver et les réactiver, après quoi l'optimisation continue.

Et question : sera-t-il possible de changer la vue du graphique (1D/2D/3D) pendant l'optimisation et non après son achèvement ?

 
PiramidaR:

Erreurs (build 421, peut-être quelque chose de corrigé dans la 425, pas encore de mise à jour de la 425 par alpari) :

Dans le même terminal, ouvrez un compte de MetaQuotes et il sera mis à jour. Puis changez à nouveau de compte
 
PiramidaR:

Erreurs (build 421, peut-être quelque chose de corrigé dans la 425, pas encore de mise à jour de la 425 par alpari) :

1. Déjà écrit dans le fil de discussion sur la visualisation 3D : les légendes des graphiques 3D (nom de l'échelle et valeur de l'échelle) ne changent pas lorsque l'on modifie les paramètres d'affichage sur le graphique.

2. Au cours de l'optimisation rapide, le graphique est apparié à environ 10600ème passage, c'est-à-dire que l'optimisation se poursuit pendant 50,51...60 générations et le graphique ne se déplace pas et les nouveaux passages ne sont pas affichés. En même temps, l'onglet Paramètres affiche "Progression de l'optimisation :" au lieu du nombre de passages, et dans certaines circonstances inexpliquées, il change encore, par exemple, 12420/14400 (les chiffres sont approximatifs).

3. Les agents supprimés peuvent passer à l'état Busy et rester dans cet état, je dois les désactiver et les réactiver, après quoi l'optimisation continue.

Et une question : sera-t-il possible de changer la vue graphique (1D/2D/3D) pendant l'optimisation et non après son achèvement ?

1,2 Corrigé, mais pas inclus dans la dernière version.

3 Nous y travaillons.

Il n'y aura pas de telle fonction

 
Je souhaiterais avoir la possibilité non seulement de spécifier la valeur qui ne sera pas dessinée
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);

mais aussi pour pouvoir auto-initialiserle tableau avec cette valeur. Si rien n'a été assigné par l'indicateur à la dernière barre, alors par défaut il assigne ce qui a été spécifié dans le champ

PLOT_EMPTY_VALUE

ou plutôt, vous l'initialisez d'abord avec une valeur vide et laissez ensuite l'indicateur écrire ce qu'il veut.

Parce que maintenant la valeur par défaut sera zéro, mais zéro dans de nombreux indicateurs est un nombre significatif qui devrait être tiré.

HZ a écrit dans ce fil que je ne suis pas sûr que cela n'a pas été résolu, donc le souhait peut être considéré comme une question. Si c'est le cas, veuillez me dire comment le problème est résolu.

 

Urain:

Parce qu'à l'heure actuelle, le chiffre par défaut sera zéro, mais dans de nombreux indicateurs, zéro est un chiffre significatif à tirer.

En fait, tout peut être là, c'est juste que c'est généralement une chance que ce soit zéro. L'articleindicateur de l'indicateur dans MQL5 dit directement :

Est-il nécessaire d'initialiser les tampons indicateurs ?

Les tableaux dans MQL5 ne sont pas initialisés par défaut avec une valeur quelconque, et cela s'applique certainement aux tableaux qui sont assignés aux tampons d'indicateurs en utilisant SetIndexBuffer(). Si un tableau est un tampon indicateur, sa taille dépendra du paramètre rates_total du gestionnaire OnCalculate().

On peut être tenté d'initialiser tous les tampons d'indicateurs avec une valeur vide de EMPTY_VALUE en utilisant la fonction ArrayInitialize(), par exemple, une fois au début de OnCalculate()
//--- если это первый вызов OnCalculate() 
   if(prev_calculated==0)
     {
      ArrayInitialize(TSIBuffer,EMPTY_VALUE);
     }

Mais il n'est pas recommandé de le faire pour la raison suivante : pendant le fonctionnement du terminal, les cotations du symbole, sur les données duquel l'indicateur est calculé, sont reçues. Ainsi, le nombre de barres augmentera au fil du temps, et le terminal allouera de la mémoire supplémentaire pour les tampons d'indicateurs.

Mais les valeurs des éléments du tableau nouvellement attachés auront n'importe quelle valeur, car lorsque la mémoire est réallouée pour un tableau, il n'y a pas d'initialisation. Et l'initialisation initiale peut donner une confiance trompeuse que tous les éléments du tableau, auxquels nous n'avons pas explicitement assigné de valeur, seront remplis avec la même valeur avec laquelle nous avons initialisé le tableau la première fois. Ce n'est certainement pas vrai, et nous ne devrions jamais compter sur le fait que la valeur d'une variable ou d'un élément de tableau soit initialisée avec la valeur que nous voulons.

Il est nécessaire de définir une valeur pour chaque élément du tampon de l'indicateur, et si la valeur de l'indicateur pour cette barre n'est pas définie (non calculée, selon l'algorithme implémenté dans l'indicateur), alors pour de tels cas une valeur vide doit être explicitement définie. Par exemple, la valeur du tampon de l'indicateur est calculée en utilisant l'opération de division, et à un moment donné il peut s'avérer que le diviseur est égal à zéro.
 
Rosh:

En fait, tout peut être là, c'est juste que c'est généralement une chance qu'il n'y en ait pas. L'articleIndicator from Indicator in MQL5 le dit explicitement :


C'est exactement le problème que je voudrais résoudre au niveau du langage, car l'initialisation de la dernière valeur nécessitera des lignes de code supplémentaires où il peut y avoir des erreurs.

De cette façon, vous pouvez être sûr de la valeur exacte et, sur cette base, vous pouvez construire d'autres algorithmes.

 
Urain:

C'est exactement le problème que je voudrais résoudre au niveau du langage, car l'initialisation de la dernière valeur nécessitera des lignes de code supplémentaires qui peuvent contenir des erreurs.

De cette façon, vous pouvez être sûr qu'il existe une valeur exacte et sur cette base, vous pouvez construire d'autres algorithmes.

J'ai aussi été confronté à ce problème. Je soutiens : trouver une solution au niveau de la langue.
 
Lizar:
J'ai rencontré cela aussi. Je suis favorable à ce que la solution se situe au niveau de la langue.
+1
 

Construire 425

Je suis confus par cette situation avec le testeur : l'EA est exécuté plusieurs fois dans les mêmes conditions, mais les résultats des exécutions sont différents. La différence est minime, mais...

Vérifié sur deux machines, j'obtiens 2 résultats différents, avec une probabilité approximativement égale. Qu'est-ce que ça veut dire ?