Erreurs, bugs, questions - page 1524

 
-Aleks-:

Ugh, donc le bug n'est pas de retour - vous pouvez fermer le terminal et être sûr que tous les graphiques sont sauvegardés.

Il est dit que lors de la fermeture du terminal, le programme est forcé de se terminer après 3 secondes maintenant. C'est ainsi que cela fonctionne maintenant et continuera à fonctionner. Ils ne veulent pas renvoyer l'arrêt forcé en supprimant le programme du tableau sans terminer le terminal.
 
Slawa:

Il s'agissait à l'origine d'un indicateur en boucle. Ce qui n'est absolument pas recommandé. Même à titre d'illustration

Nous ne parlons pas de l'indicateur bouclé, mais de tout indicateur sans contrôle IsStopped dans ses cycles. Parce que les cycles de construction d'indicateurs complexes peuvent être longs. Bien sûr, ce problème n'est pas si actuel pour moi à cause de la boucle infinie, mais je ne peux pas montrer le code source, et c'est inutile parce que c'est trop lourd.
 

Tout indicateur utilise au moins un cycle.

Une boucle sans contrôle IsStopped rend cette boucle potentiellement infinie. Parce qu'il peut y avoir des millions de données de prix dans le tableau, et que chaque itération peut être écrite de manière non optimale.

Un programmeur qui crée délibérément une boucle infinie ne peut pas invoquer un manque d'information dans la documentation ; de plus, la documentation indique explicitement que

В одном потоке с индикаторами также последовательно выполняются остальные действия по данному символу - обработка тиков и синхронизация истории. Это означает, что если в индикаторе выполняется бесконечное действие, все остальные события по его символу никогда не выполнятся.

Le programmeur conscient comprend immédiatement que, dans ce cas, c'est lui qui est responsable de l'efficacité de l'indicateur, et non la documentation. En outre, il y a eu beaucoup de discussions et d'articles sur ce sujet.

 
Slawa:

Le programmeur consciencieux comprend immédiatement que, dans ce cas, il est responsable de l'efficacité de l'indicateur, et non de la documentation. En outre, de nombreux débats et articles ont été consacrés à ce sujet.

J'avoue que je n'avais pas le contrôle IsStopped, et c'est pourquoi j'ai eu des problèmes d'interruption dans la construction d'indicateurs complexes par ma seule faute. Mais, d'un autre côté, je me suis habitué au fait que le travail du programme et sa documentation doivent coïncider.
 
Ilya Malev:
Il est dit que lorsque vous fermez le terminal, le programme est forcé de se terminer après 3 secondes déjà. C'est ainsi que cela fonctionne maintenant et continuera à fonctionner. Ils ne veulent pas ramener l'arrêt forcé lorsqu'on retire le programme du tableau sans terminer le terminal.
Um, j'ai fait mon point sur quadruple - il semble terminer et fermer tout correctement maintenant, alors qu'il avait l'habitude de perdre les graphiques avec les EAs.
 
Ilya Malev:
Tout ceci est correct, je me repens que je n'avais pas la vérification de IsStopped et que j'ai donc eu des problèmes d'interruption de la construction d'indicateurs complexes uniquement par ma faute. Mais, d'un autre côté, je me suis habitué au fait que le fonctionnement du programme et sa documentation doivent coïncider.

La documentation ne peut pas prendre en compte toutes les nuances. Surtout lorsque nous parlons de secondes, de GHz, de mégaoctets - des valeurs mesurables mais qui dépendent fortement de leur environnement.

Nous essayons de combler les lacunes de la documentation (bien que nous espérions secrètement une présomption de conscience).

 
-Aleks-:
Hum, j'ai fait un commentaire sur quadruple - il semble compléter et fermer tout correctement maintenant, mais il avait l'habitude de perdre les graphiques avec les EAs.

Le quatuor a mis en parallèle les processus de clôture de chaque graphique. Ils ont donc pu augmenter le temps d'attente pour chacun d'eux.

Dans le passé, les tableaux étaient mémorisés un par un, et chacun d'entre eux bénéficiait du même temps d'arrêt. Plus il y avait de graphiques et plus il y avait d'EA inhibés sur ceux-ci, plus le processus de clôture était long.

 
Slawa:

Le quatuor a mis en parallèle les processus de clôture de chaque graphique. Ils ont donc pu augmenter le temps d'attente pour chacun d'eux.

Dans le passé, les tableaux étaient mémorisés un par un, et chacun d'entre eux bénéficiait du même temps d'arrêt. Plus il y avait de tableaux et plus le processus de clôture était long.

Compris grossièrement.

Lent pas lent, beaucoup dépend du matériel et des tâches que l'EA effectue, et vous devez tenir compte du fait que les programmes ne sont souvent pas écrits par des programmeurs professionnels - c'est pourquoi il y a un langage de programmation, je pense.

 

MT4. Je voudrais encore une fois attirer votre attention sur les particularités de l'initialisation des variables globales du programme.

Les variables globales sont initialisées une fois lorsque vous installez le programme sur un graphique ou que vous recompilez le code.

Si vous voulez changer de cadre temporel, de symbole ou de paramètres d'entrée, les variables globales ne sont pas réinitialisées (par exemple, elles ne sont pas effacées), et conservent les valeurs qu'elles ont obtenues lors du travail avec les cadres temporels, les symboles ou les paramètres d'entrée précédents.

input int c;
int a,b;
void OnInit() {
 a++; Print(" a=",a," b=",b," c=",c); }

Il s'avère que si vous n'effacez pas toutes les variables globales de manière programmatique, alors lorsque vous modifiez les paramètres du TF, de l'instrument ou de l'entrée, le code fonctionnera avec les valeurs précédentes, c'est-à-dire de manière incorrecte.

Est-ce raisonnable ? Ne serait-il pas préférable de le faire dans le testeur de stratégie ? Les variables globales y sont réinitialisées à chaque changement de TF, d'instrument ou de paramètres d'entrée.

 
Yuri Evseenkov:

MT4. Une fois de plus, je voudrais attirer votre attention sur les particularités de l'initialisation des variables globales du programme.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Bugs, bugs, questions

Slawa, 2016.02.24 07:34

File d'attente. L'application ne date que de deux heures.

En général, ces questions doivent être posées sur le forum. Parce que beaucoup peuvent être affectés. Je me permets de vous citer et de vous répondre immédiatement.

C'est un comportement planifié. En fait, il est explicitement décrit dans la documentation

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

En cinq, comme vous l'avez remarqué à juste titre, la situation est similaire.

C'est vrai, c'était historiquement en quatre, et nous avons changé ce comportement au début lors du passage au nouveau MQL4 (pour qu'il se comporte comme dans les experts, c'est-à-dire comme vous l'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 un nouvel indicateur avec les paramètres modifiés est créé.