Quel genre de logique est gâchée ?
Lorsque vous changez d'horizon temporel, une nouvelle copie de l'indicateur est créée qui ne sait rien de la copie précédente. Pendant une certaine période de temps (très courte), les deux copies de l'indicateur existent en parallèle. Ensuite, la copie précédente est déchargée.
Lire la documentation https://www.mql5.com/ru/docs/runtime/running

- www.mql5.com
Quel genre de logique est gâchée ?
Lorsque vous changez d'horizon temporel, une nouvelle copie de l'indicateur est créée qui ne sait rien de la copie précédente. Pendant un certain temps (un temps très court), les deux copies de l'indicateur existent en parallèle. Ensuite, la copie précédente est exclue.
Lire la documentation https://www.mql5.com/ru/docs/runtime/running
Merci pour vos commentaires
À propos de "l'altération de la logique"
J'ai écrit un indicateur qui remplace le graphique principal (chandeliers) par son propre type de dessin DRAW_CANDLES
Le but est de supprimer le graphique principal des prix et de n'afficher que mon graphique.
- Lorsque Inite définit la couleur du graphique principal sur transparent.
Je dessine mon propre graphique (selon mes paramètres).
Puisque je veux restaurer la couleur du graphique principal après la suppression de mon indicateur
- Dans DeInit je restaure la couleur du graphique principal
Quand je change le TF, je veux dire d'abord DeInit (restaurer la couleur), et ensuite Init (redevenir transparent).
L'exécution des commandes n'est pas séquentielle ; périodiquement, lors du changement de la TF
périodiquement le graphique principal (avec une couleur restaurée) est superposé à mon indicateur.
Voici par exemple une "erreur de logique".
PS : (((Lire la documentationhttps://www.mql5.com/ru/docs/runtime/running )))
Si vous changez de symbole ou d'horizon temporel pour le graphique auquel le conseiller expert est attaché, le conseiller expert n'est pas déchargé et chargé. Dans ce cas , les gestionnairesOnDeinit() sur l'ancien symbole/la ligne de temps etOnInit() sur le nouveau symbole/la nouvelle ligne de temps (si disponible) sont appelésde manière cohérente, les valeurs des variables globales et desvariables statiques ne sont pas réinitialisées. Tous les événements reçus pour un EA avant la fin de l'initialisation (OnInit()) sont ignorés.

- www.mql5.com
Concernant.
"une nouvelle copie de l'indicateur est crééequi ne sait rien de la copie précédente"
Pourquoi alors DeInit supprime les objets qui ont été créés dans la nouvelle copie Init. Si c'est juste une copie.
Lorsque le délai est modifié, OnInit est appelé à chaque fois, ce qui cause quelques désagréments.
Qu'est-ce que cela signifie d'appeler OnInit à chaque fois
A quoi sert OnInit - à initialiser une fois toutes les variables et tous les paramètres
Par exemple
Je veux écrire un indicateur qui crée un marqueur de texte sur un graphique avec la trame temporelle actuelle.
Lorsque vous supprimez l'indicateur, cette marque de texte est supprimée du graphique.
Et lors du changement de TF, il mettrait à jour son contenu vers un nouveau (en supprimant l'ancien et en créant un nouveau).
Ce que nous obtenons
Nous avons changé plusieurs fois le TF et la marque de texte a disparu. (Donc, d'abord OnInit et ensuite DeInit a agi, ce qui a supprimé cette étiquette).
Ensuite, quelques fois de plus, j'ai changé de TF et il est apparu.
Ce n'est pas bien.
s'il s'agit d'objets graphiques, ils appartiennent à la salle de discussion et sont accessibles à tout logiciel fonctionnant sur cette salle de discussion.
s'il s'agit d'objets graphiques, ils appartiennent au chat et sont accessibles par tout programme s'exécutant sur ce chat.
Alors, comment résoudre ce problème ? (Quelqu'un l'a-t-il ? ??)
Ou accepter tel quel. Que pour accélérer les calculs, il est possible d'exécuter les commandes de manière non séquentielle.
Ce qui est contraire à la documentation
Lorsque l'on change de symbole ou d'horizon temporel d'un graphique, auquel le conseiller expert est attaché, le conseiller expert ne sera pas déchargé et chargé. Dans ce cas
séquentiellement
Les gestionnairesOnDeinit() sur l'ancien symbole/la ligne de temps etOnInit() sur le nouveau symbole/la nouvelle ligne de temps (si disponible) sont appelés.
Alors, ce problème peut-il être résolu ? (Cela a-t-il fonctionné pour quelqu'un ? ??)
Je me joins à l'auteur de ce fil. La question n'est pas vraiment oiseuse. Et très spécifique.
J'ai découvert ce problème il y a longtemps. J'ai contacté servicedesk dès juin 2016 avec un exemple absolument similaire à celui de l'auteur de ce fil. Ils l'ont ignoré - c'est toujours un sujet ouvert :
Bien sûr, j'ai fait un transfert de paramètres dans l'indicateur lors du changement de TF, ayant passé beaucoup de temps dessus. Mais je ne veux pas faire une simple tâche avec des diamants.
Mais les développeurs, s'il vous plaît, implémentez la possibilité de créer des variables globales spéciales dans les indicateurs qui ne se réinitialiseront pas pendant les changements d'horizon temporel. Dans les conseillers experts, la réinitialisation ne se fait pas au moment du changement de TF, dans l'indicateur, si. S'il existait une possibilité de ne pas réinitialiser certaines variables et tableaux dans les indicateurs, la synchronisation de OnInit et OnDeinit ne se produirait pas, et elle ouvrirait de nouvelles possibilités intéressantes pour les programmeurs. Je ne pense pas que cette possibilité de désinitialisation des variables affectera la sécurité des programmes.
C'est pour quoi faire ?
Il y a beaucoup de situations.
Par exemple :
-Lorsque je lance l'indicateur, j'effectue des calculs de variables, de tableaux d'indices, de tableaux de données, indépendants de TF, et ils peuvent être assez longs et volumineux. La question est de savoir pourquoi je dois le faire à chaque fois que je change de TF.
- Je ne peux pas modifier les paramètres de l'indicateur à travers la fenêtre des paramètres, mais pour des raisons de commodité et de clarté, directement à partir du graphique avec une souris (vous pouvez voir et utiliser cet indicateur, qui le réalise d'une manière plus compliquée). Et les paramètres ne sont pas perdus chaque fois que vous changez de TF.
Ce problème est résolu comme deux doigts... Tu sais quoi...
Dans OnDeinit, il est nécessaire de conditionner la raison de la désinitialisation avant de supprimer l'objet... S'il ne s'agit PAS d'un changement de période, l'objet est supprimé. ET C'EST TOUT...
Ce problème est résolu comme deux doigts... Tu sais quoi...
Dans OnDeinit, il est nécessaire de conditionner la raison de la désinitialisation avant de supprimer l'objet... S'il ne s'agit pas d'un changement de période, l'objet est supprimé. ET C'EST TOUT...
J'ai expérimenté et utilisé au maximum ce code de raison (REASON_CHARTCHANGE). Quelle est l'utilité si toutes les variables sont remises dans leur état d'origine et que OnDeinit peut être exécuté après OnInit de la nouvelle TF ?

- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Bonjour à tous !
Je suis confronté au problème suivant
J'ai un indicateur ou un conseiller expert.
Il contient deux fonctions : Init() et DeInit().
Quelle est la séquence d'exécution de ces fonctions lorsque je change de TF (timeframe) ?
Je comprends que lorsque je lance ou attache l'indicateur, la fonction Init() doit fonctionner.
En le supprimant du graphique, il doit exécuterDeInit().
Lors d'un changement de TF, lafonction DeInit() de la TF actuelle doit d'abord fonctionner, puis lafonction Init() de la nouvelle TF doit fonctionner.
Cependant, il n'est pas toujours exécuté dans cet ordre, ce qui gâche la logique de l'écriture du programme.
J'ai joint un échantillon de l'indicateur et des journaux.
Veuillez indiquer qui a résolu ce problème ou bien oubliez-le !