Séquence d'exécution de Init() et DeInit() - page 13

 
Andrey Dik:

...

Plusieurs personnes ont déjà demandé un exemple spécifique d'une tâche qui pose problème dans le paradigme de l'exécution des indicateurs dans MT5. Y aura-t-il ou non un exemple clair, qui ne soit pas tiré par les cheveux ?

Un indicateur a une première initiale puis une désinitiale. Mais lorsque l'on change de cadre temporel, la deuxième instance d'indicateur est créée, et son init peut être exécuté plus tôt que le deinit de l'instance précédente (non explorée).

L'exemple le plus évident - la sauvegarde des paramètres utilisateur lors du changement de période - nous sauvegardons les paramètres dans le deinit, nous les lisons dans le init. Si le init de la nouvelle instance est déclenché avant le deinit de l'instance précédente, les paramètres ne seront pas sauvegardés.

En pratique, le deinit de l'instance supprimée est le plus souvent déclenché avant le init de la nouvelle instance, mais si le changement d'horizon temporel est très rapide ou si les données sont chargées, un échec se produit.

 
Slawa:

Imaginons maintenant qu'il n'y ait pas une seule file d'attente d'événements, mais plutôt une file d'attente pour chaque période de symbole. Il y a autant de périodes de symboles que de files d'attente.

Proposez maintenant l'ordre dans lequel les files d'attente sont traitées.

À mon avis, la file d'attente devrait être liée à un graphique. Que l'utilisateur change un symbole, un TF ou qu'il le ferme simplement, tous les indicateurs doivent être complètement terminés, puis les EA, avec le traitement de toutes les commandes dans les déinitions (quoi qu'ils fassent, écrire dans les variables globales, les fichiers, supprimer les objets, interagir avec les DLL, envoyer quelque chose à Internet) et après l'achèvement et le déchargement de la mémoire - exécuter de nouvelles instances sur un nouveau TF ou symbole, sans rien savoir de la précédente, mais en étant capable de lire correctement les informations enregistrées de la précédente.

Ce sera probablement un peu plus lent, mais ce sera la bonne chose à faire.

Je suis en faveur de programmes qui fonctionnent correctement, pas de programmes rapides et erronés.

Si l'initialisation de la nouvelle instance est lancée plus tôt, alors il s'avère que deinit n'est pas du tout nécessaire et est même nuisible car il induira les programmeurs en erreur en espérant qu'ils sauvegarderont quelque chose et le compteront ensuite. Si nous le laissons tel quel, alors ajoutez à l'aide - que les résultats de cette fonction ne seront pas connus du prochain Les résultats de cette fonction ne seront pas connus de l'instance suivante, c'est-à-dire que personne ne fera rien dans cette fonction. Et encore mieux - supprimez-le, si l'ordre naturel des événements est très difficile à réaliser et vous demandera des centaines d'heures de travail.

 
Slawa:

Si le commutateur de délai descend, alors d'abord OnInit sur le délai inférieur (nouveau) et ensuite OnDeinit sur le délai supérieur (ancien ).

Si l'interrupteur monte, c'est l'inverse. Tout d'abord, nous lançons OnDeinit sur le cadre temporel inférieur (ancien), puis OnInit sur le cadre temporel supérieur (nouveau).

Ici, nous devons garder à l'esprit que les caches sont traités de la plus petite à la plus grande période de temps.

Une logique bien étrange ! Que dois-je faire ? Si certains paramètres sont écrits sur le disque lors de DeInit, ils doivent être lus et récupérés dans OnInit lors du prochain démarrage de l'indicateur, même s'il est lancé dans le cadre temporel inférieur.

Je suppose que je dois écrire un petit test pour le vérifier. En fait, si la fonction passe à un horizon temporel inférieur, la logique sera plus que parfaite.

En général, il est dommage que les variables statiques ne soient pas sauvegardées dans les indicateurs, en même temps les Expert Advisors sont excellents avec les statiques.
 
Ihor Herasko:

1. Comment appelez-vous les applications de bureau ? J'ai le sentiment que MT5 n'est pas une application de bureau...

2) Je n'invente rien. C'est le sujet du fil de discussion actuel. Le fait est que MT5 peut exécuter Init pour l'indicateur qui n'a pas encore DeInit. Oui, c'est vrai. Vous n'avez pas lu le sujet ?

Essayez de mettre à jour le même fichier plusieurs fois par seconde et partagez vos impressions.

4. Qu'est-ce que cela a à voir avec le fait d'ajouter 1 au nom ? Il s'agit du fait qu'il y a des objets graphiques du même indicateur, mais des copies différentes de celui-ci, sur l'écran en même temps. Techniquement, il n'y a pas de conflit. Il y aura un conflit pour l'utilisateur qui verra le chagrin sur l'écran jusqu'à ce que l'ancienne copie soit supprimée.

5. Je vais vous confier un grand secret : il y a une copie de la DLL par copie de terminal. Vous ne pouvez pas en utiliser plusieurs exemplaires.

1. Nous ne parlons pas de MT5, nous parlons d'indicateurs (comme les scripts et les experts) qui ne sont pas exécutés dans le système d'exploitation, mais dans un environnement sécurisé spécial.

2. Vous vous contredisez. Si le recalcul est effectué très rapidement (plusieurs fois par seconde), il n'y a aucun problème pour effectuer un nouveau recalcul dans une nouvelle copie de l'indicateur. Dans ce cas, il est judicieux de réinitialiser les données de fonctionnement périodiquement après un temps défini (vous pouvez utiliser ontimer ou un compteur personnalisé pour cela). Et si les calculs sont longs, plus il est nécessaire de sauvegarder les données après les calculs pour éviter leur perte en cas de force majeure (maman a retiré la fiche de la prise "pour éviter la phonation").

3. L'ancienne copie sera supprimée en moins d'une seconde, et avec elle ses graphobjets. Quel genre de crétin changerait de TF avec une fréquence telle qu'on observerait un scintillement ? - Et alors ? Une dll ne peut pas être retirée de la copie en moins d'une seconde.

4. alors ? le dll peut être occupé, c'est normal. Vous n'avez pas à vous en soucier, il suffit de répéter la demande dans une seconde, par exemple.

Comme vous pouvez le constater, il n'y a pas de problème, il suffit de manipuler correctement les programmes dans le terminal MT, en se rappelant qu'il ne s'agit pas d'applications de bureau et qu'elles fonctionnent dans un environnement protégé spécial.

 
Dmitry Fedoseev:

Un indicateur a une première initiale puis une désinitiale. Mais lorsque l'on change de cadre temporel, la deuxième instance d'indicateur est créée, et son init peut être exécuté plus tôt que le deinit de l'instance précédente (non explorée).

L'exemple le plus évident - la sauvegarde des paramètres utilisateur lors du changement de période - nous sauvegardons les paramètres dans le deinit, nous les lisons dans le init. Si le init de la nouvelle instance est déclenché avant le deinit de l'instance précédente, les paramètres ne seront pas sauvegardés.

En pratique, le deinit de l'instance supprimée est déclenché avant le init de la nouvelle instance, mais si le changement d'horizon temporel est très rapide ou si les données sont chargées, un échec se produit.

C'est reparti... Pourquoi "changer très rapidement d'horizon temporel" ? ! Est-ce que l'un d'entre vous allume (ou éteint) vraiment l'ordinateur "en appuyant rapidement sur le bouton" Power ?
 
Andrey Dik:
C'est reparti... Pourquoi "changer très rapidement d'horizon temporel" ? ! Est-ce que l'un d'entre vous allume (ou éteint) son ordinateur "en appuyant rapidement sur le bouton" Power ?

Pourquoi ? Le code pénal l'interdit-il ou la constitution ?
 
Dmitry Fedoseev:

Pourquoi ? Le code pénal l'interdit-il ou la constitution ?

Il y a beaucoup de choses que le CA n'interdit pas, comme mettre ses doigts dans une prise.

Donnez un exemple de la nécessité de changer fréquemment de TF si rapidement que les objets commencent à scintiller. - Ne donnez pas d'exemple de l'effet hypnotique, car il peut être obtenu par des méthodes plus efficaces.

 
Andrey Dik:

Il y a beaucoup de choses que le régulateur n'interdit pas, comme mettre ses doigts dans une prise.

Donnez un exemple de la nécessité de changer la TF si souvent que les objets commencent à scintiller. - Ne donnez pas d'exemple de l'effet hypnotique, car il peut être obtenu par des méthodes plus efficaces.

Parce que la prise et la fiche ont été conçues par des designers sains d'esprit, pas par des idiots. Du côté de la tension se trouve la prise, et non la fiche. En outre, les trous de la douille sont si grands qu'il est impossible d'y mettre le doigt. Mais vous pouvez le faire à votre façon dans votre propre maison - laissez les fiches sortir du mur et les prises s'accrocher aux fils. Après tout, vous comprenez et ne toucherez pas de vos mains les fiches qui dépassent du mur.
 
Dmitry Fedoseev:
Parce que la prise et la fiche ont été conçues par des designers sensés, pas des idiots. Du côté de la tension se trouve la prise, et non la fiche. En outre, les trous de la douille sont si grands qu'il est impossible d'y mettre le doigt. Mais vous pouvez le faire à votre façon dans votre propre maison - laissez les fiches sortir du mur et les prises s'accrocher aux fils. Vous comprenez et ne touchez pas avec vos mains les fiches qui dépassent du mur.

OK. Les prises de courant en sont un exemple malheureux.

Alors prenons-en un autre - sauter du balcon ! Le CA interdit-il de sauter du balcon ? - Non ? - Alors pourquoi ne pas le pratiquer pour la montée d'adrénaline ?

Tous les objectifs doivent être atteints par des moyens raisonnables, sinon les objectifs ne sont pas raisonnables.

 
Dmitry Fedoseev:

Andrey Dik:

Donnez un exemple de la nécessité de changer fréquemment de TF si rapidement que les objets commencent à scintiller. - Ne donnez pas d'exemple de l'effet hypnotique, car il peut être obtenu par des méthodes plus efficaces.

Raison: