Erreurs, bugs, questions - page 1516

 
Renat Fatkhullin:
Est-il prévu d'apporter des modifications à la fonctionnalité du MetaEditor pour mettre en évidence les variables, dans le débogueur pour créer automatiquement toutes les variables utilisées ? Comme dans l'IDE Qt Creator ou VS.
 
coderex:
Est-il prévu d'apporter des modifications à la fonctionnalité du MetaEditor pour mettre en évidence les variables, dans le débogueur pour créer automatiquement toutes les variables utilisées ? Comme dans l'IDE Qt Creator ou VS.
Oui, absolument.
 
Renat Fatkhullin:
Oui, je le ferai.
Je me demande dans combien de temps ?
 
Slawa:
Veuillez consulter l'application #1416121 sur l'initialisation des variables globales/statiques!
 
Alexey Kozitsyn:
Veuillez vérifier la demande #1416121 sur l'initialisation des variables globales/statiques!

Dans la file d'attente. L'application ne date que de deux heures.

En général, ces questions doivent être posées dans un forum. Parce que ça peut toucher beaucoup de gens. Je vais prendre la liberté de vous citer et de répondre ensuite.

Bonjour. Corrigez-moi si je me trompe. Les variables statiques et globales sont initialisées une fois avant le démarrage du programme (c'est-à-dire par la fonction OnInit()). Par conséquent, si le programme est désinitialisé (la fonction OnDeinit() est appelée), le programme doit "oublier" les valeurs des variables globales/statiques et avant la prochaine exécution de la fonction OnInit() les initialiser avec les valeurs initiales.

J'ai trouvé un fait intéressant dans les Expert Advisors de mql4. Si vous déclarez des variables globales/statiques, alors, par exemple, lorsque vous modifiez les paramètres d'entrée, c'est-à-dire après OnDeinit(), les valeurs de ces variables ne sont pas réinitialisées. Mais dans les indicateurs - ils le sont. Que faire ? Cela ressemble à une erreur.

Je l'ai vérifié sur mql5 (build 1241 x64) - similaire. Dans les conseillers experts - pas de réinitialisation, dans les indicateurs - réinitialisation.

C'est un comportement planifié. De plus, il est clairement décrit dans la documentation

Chargement et déchargement des indicateurs

Les indicateurs sont chargés dans les cas suivants :

-attacherun indicateur à un graphique ;

-ledébutdu terminal (si un indicateur a été attaché à un graphique avant la fermeture précédente du terminal)

-chargementd'un modèle (si le modèle contient un indicateur attaché au graphique)

-changer deprofil (si un indicateur est attaché à l'un des graphiques de profil);

-changerle symbole et/ou la période du graphique auquel l'indicateur est attaché;

-après larecompilation réussie d'un indicateur, si cet indicateur a été attaché à un graphique.

-modification des paramètres d'entrée de l'indicateur.

Les indicateurs sont déchargés dans les cas suivants :

-lors dudétachement d'un indicateur d'un graphique ;

-la fermeturedu terminal (si un indicateur est attaché à un graphique) ;

-chargement d'un modèle, si un indicateur est attaché à un graphique

Fermer legraphique auquel un indicateur a été attaché ; - Fermer le terminal (si un indicateur a été attaché au graphique).

-Modifierun profil, si un indicateur est attaché à l'un des graphiques du profil à modifier ;

-Changer lesymbole et/ou la période du graphique auquel l'indicateur est attaché ;

-modifier lesparamètres d'entrée de l'indicateur.

Le déchargement et le chargement impliquent une réinitialisation complète de tout.

A Five, comme vous l'avez bien noté, la situation est similaire.

C'est vrai, c'est historiquement ainsi que dans MQL4 nous avons d'abord changé ce comportement (pour le rendre comme dans les experts, c'est-à-dire le comportement que vous attendez). Mais beaucoup de questions se sont posées avec les anciens indicateurs, qui étaient basés sur cette initialisation. Nous avons été obligés de retourner

Dans le cinq, c'était le cas immédiatement à cause de l'architecture. Lorsque vous modifiez les paramètres, l'ancien indicateur avec les anciens paramètres est détruit et le nouvel indicateur avec les paramètres modifiés est créé.

Input переменные
Input переменные
  • docs.mql4.com
Input переменные
 
Slawa:
Dans la file d'attente. L'application ne date que de deux heures.

Je l'ai dupliqué ici juste au cas où.

C'est un comportement planifié. De plus,elle est clairement décrite dans la documentation.

Je viens de regarder ici et ici. Et je pense que c'est logique, puisque je travaille avec une classe à mémoire statique. Et, encore une fois, il est logique que s'il existe un "piège" sous la forme de techniques établies par rapport à différents types de programmes, il serait bon de le décrire également dans la documentation de la classe de mémoire statique (variables statiques et globales).

Veuillez ajouter aux remarques.

 
Alexey Kozitsyn:

Je l'ai dupliqué ici, juste au cas où.

C'est juste que j'ai regardé ici et ici. Et je pense que c'est logique, puisque je travaille avec une classe à mémoire statique. Et, encore une fois, il est logique que s'il existe un "piège" sous la forme de techniques établies par rapport à différents types de programmes, il serait bon de le décrire également dans la documentation de la classe de mémoire statique (variables statiques et globales).

Veuillez ajouter aux remarques.

Quelles remarques ? A propos du chargement/déchargement du programme ?
 
Slawa:
Quel commentaire ? A propos du chargement/déchargement du programme ?
Sur le fait que l'initialisation des variables statiques et globales est provoquée par différents événements dans les indicateurs et les Expert Advisors. Ajouter, en conséquence, dans le paragraphe sur les variables globales et statiques, dans la sous-section "remarques".
 

Aide MT5 :

IsStopped
 
Проверяет принудительное завершение работы mql5-программы.
 
bool  IsStopped();
 
Возвращаемое значение
 
Возвращает true, если в системной переменной _StopFlag содержится значение, отличное от 0. Ненулевое значение записывается в переменную _StopFlag, если поступила команда завершить выполнение mql5-программы. 
В этом случае необходимо как можно быстрее завершить работу программы, в противном случае программа будет завершена принудительно извне через 3 секунды.

Je viens de vérifier - l'indicateur est retiré du graphique mais continue de fonctionner pendant 3 secondes, 10 secondes, 3 minutes...(IsStopped n'a pas été vérifié ici, ce n'est pas la question)

1) Pourquoi est-il indiqué "interruption forcée pendant 3 secondes" mais que cela ne fonctionne pas dans la réalité ?

2) Pourquoi les processus (scripts, indicateurs, Expert Advisors, agents de test) ne se terminent-ils pas de manière forcée lorsqu'ils sont retirés d'un graphique, qu'un utilisateur arrête un test, etc.

 

J'ai également une question sur l'arrêt des programmes. Est-il possible d'ajouter une fonction de déchargement rapide "universelle" aux langages pour tout type de programme ? Ou ajouter des fonctions comme ExpertRemove() pour les indicateurs et les scripts. Vous pouvez, bien sûr, résoudre le problème en divisant par 0 ou en surchargeant le tableau. Mais, d'une certaine manière, ce n'est pas agréable.