Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 829

 

Il y a une question de ce format : Il y a ce code

int P=3 ;

si(P==5){alors il faut entrer dans la bibliothèque et calculer quelque chose}

Dans cette situation, P=3, c'est-à-dire que la condition est fausse. La question est de savoir si le compilateur va entrer dans la bibliothèque et exécuter le code à vide ou si le compilateur va lire le code dans le fichier actuel. Je vais expliquer pourquoi je demandais ça. Bon, écoutez, supposons que nous écrivions la condition de format suivante

int Y=4 ;

si(Y==4){faire quelque chose} sinon{faire autre chose}. Dans cette situation, nous obtenons l'image suivante Y==4, la première nous pouvons dire, l'opérateur de priorité a été exécuté, mais le bloc else{faire autre chose} sera également vérifié et calculé (juste calculé et toujours), mais pas exécuté, parce que la priorité est une expression if(Y==4). En d'autres termes, quel que soit le résultat de la vérité, la machine effectue tous les calculs, c'est-à-dire qu'elle dépense de l'énergie pour les calculs, que l'opérateur secondaire soit exécuté ou non. Si j'utilise de gros programmes et des bibliothèques, et que le compilateur va à chaque fois creuser le code de la bibliothèque, cela finira par ralentir le programme. Quelle sera l'efficacité de l'utilisation des bibliothèques dans ce cas, dois-je utiliser le code mql4 lui-même aussi concis que possible pour que les performances du robot soient élevées ? Qui a une idée sur ce sujet ?

 
Pavel Soin:

Bonjour.

Disons que j'ai 2 indicateurs, le premier a 4 tampons, le second en a 2. Je les mets sur un graphique et ouvre la fenêtre de données (CTRL+D). La liste contient 6 tampons de 0 à 5. Comment puis-je lire la valeur du tampon 5, disons, à partir de cette liste dans MQL ? Il n'est pas pratique d'utiliser iCustom par l'indicateur requis. Il est plus pratique d'utiliser cette liste. Je sais qu'ils le font, mais comment ?

Quelqu'un peut-il m'aider ?

 
Seric29:

Il y a une question de ce format : Il y a ce code

int P=3 ;

si(P==5){alors il faut entrer dans la bibliothèque et calculer quelque chose}

Dans cette situation, P=3, c'est-à-dire que la condition est fausse. La question est de savoir si le compilateur va entrer dans la bibliothèque et exécuter le code à vide ou si le compilateur va lire le code dans le fichier actuel. Je vais vous expliquer pourquoi je demandais ça. Bon, écoutez, supposons que nous écrivions la condition de format suivante

int Y=4 ;

si(Y==4){faire quelque chose} sinon{faire autre chose}. Dans cette situation, nous obtenons l'image suivante Y==4, la première nous pouvons dire, l'opérateur de priorité a été exécuté, mais le bloc else{faire autre chose} sera également vérifié et calculé (juste calculé et toujours), mais pas exécuté, parce que la priorité est une expression if(Y==4). En d'autres termes, quel que soit le résultat de la vérité, la machine effectue tous les calculs, c'est-à-dire qu'elle dépense de l'énergie pour les calculs, que l'opérateur secondaire soit exécuté ou non. Si j'utilise de gros programmes et des bibliothèques, et que le compilateur va à chaque fois creuser le code de la bibliothèque, cela finira par ralentir le programme. Quelle sera l'efficacité de l'utilisation des bibliothèques dans ce cas, dois-je utiliser le code mql4 lui-même aussi concis que possible pour que les performances du robot soient élevées ? Qui a une idée sur ce sujet ?

Le débogueur intégré de MetaEditor répond très bien à ces questions. Vous devriez écrire un script avec des conditions similaires et l'exécuter étape par étape dans le débogueur. Vous verrez que le programme n'entrera pas à l'endroit où il n'a rien à faire. De plus, une telle condition

int P = 3, Y = 4;
if(P == 5 && Y == 4)

Après avoir vérifié que P != 3, rien ne sera plus vérifié.

 
Bon après-midi. Pouvez-vous me dire ce qu'il faut faire pour que tous les éléments graphiques restent sur la carte pendant le week-end ?
 
Lomonosov1991:
Bon après-midi. Pouvez-vous me dire ce qu'il faut faire pour que tous les éléments graphiques restent sur la carte pendant le week-end ?
Ne les supprimez pas
 
Alexey Viktorov:

Le débogueur intégré à MetaEditor répond très bien à ces questions. Écrivez un script avec des conditions similaires et exécutez-le étape par étape dans le débogueur. Vous verrez comment le programme n'entre pas à l'endroit où il n'a rien à faire. De plus, cette condition

Après avoir vérifié que P != 3, rien ne sera plus vérifié.

Voici un exemple

int pp=8;if(pp==8){pp=3;}else{pp=340000000000000000000000000000;}

pp=8 dans ce cas est 8, mais le compilateur jure sur le grand nombre, que je veux mettre dans une variable, mais je ne mettrai pas ce nombre dans une variable parce que pp=8 est correct, mais pour une raison quelconque le compilateur commence à creuser ce que j'ai écrit et vérifie si cela peut être, donc nous concluons que c'est le compilateur qui vérifie et compte, bien, c'est certainement une erreur grossière, nous pourrions faire une erreur moins grave, mais le compilateur vérifiera toujours si cela peut être ou non. Je ne veux pas écrire ce genre de choses dedans, mais le compilateur vérifiera ce qu'il est censé faire, mais il ne le fera pas et cela comptera. J'ai essayé de travailler avec le débogueur MQL4 ; j'ai lu les instructions icihttps://www.metatrader5.com/ru/metaeditor/help/development/debug mais je n'ai même pas vu d'onglet actif "check against history" alors que les instructions suggèrent qu'il devrait être actif.

 
Seric29:

Voici un exemple

int pp=8;if(pp==8){pp=3;}else{pp=340000000000000000000000000000;}

pp=8 dans ce cas est 8, mais le compilateur jure sur le grand nombre que je veux mettre dans une variable, mais je ne mettrai pas ce nombre dans une variable parce que pp=8 est correct, mais pour une raison quelconque le compilateur commence à creuser ce que j'ai écrit et vérifie si c'est possible, donc nous concluons que c'est le compilateur qui vérifie et ajoute tout, bien sûr c'est une erreur grossière, nous pourrions faire des erreurs moins graves, mais le compilateur va quand même vérifier si c'est possible ou non. Je ne veux pas écrire ce genre de choses dedans, mais le compilateur vérifiera ce qu'il est censé faire, mais il ne le fera pas et cela comptera. J'ai essayé de travailler avec le débogueur MQL4 ; j'ai lu les instructions à partir d'icihttps://www.metatrader5.com/ru/metaeditor/help/development/debug mais l'onglet "check against history" n'est même pas actif, alors que les instructions suggèrent qu'il devrait l'être. J'ai essayé de vérifier avec des données réelles mais dans ce cas les valeurs des variables ne sont pas affichées, je n'ai rien vu, je me demande juste ce qui se passe.

Le compilateur vérifie les valeurs valides au moment de la compilation, mais pas au moment de l'exécution. Renseignez-vous sur les types de variables et sur les plages dans lesquelles les valeurs de ces variables sont autorisées. Si le compilateur n'a pas vérifié ces plages, vous risquez de perdre des valeurs au moment de l'exécution du code et d'obtenir des résultats de calcul erronés. Ce comportement est donc bon pour le programmeur. Le compilateur avertit toujours de la perte possible de précision.

Et le débogueur MT4 ne fonctionne pas sur les données historiques. C'est la prérogative du testeur MT5. Mais il est inutile de déboguer des scripts sur l'historique de toute façon, et vous pouvez observer ce que je suggère dans le testeur MT4. Il suffit de placer un point d'arrêt au début du code, puis d'observer la séquence d'exécution et les valeurs des variables étape par étape.

 
Pensez-vous qu'il est acceptable de discuter de morceaux de code décompilé ?
Ils devraient au moins renommer les variables. Ce n'est pas si effronté...
 
Artyom Trishkin:
Pensez-vous qu'il est acceptable de discuter de morceaux de code décompilé ?

Ils devraient au moins renommer les variables. Sinon, c'est trop effronté...

Cet EA est disponible en ligne au format MQL4. Trio Dancer. Je le refais juste pour moi.

 
Lomonosov1991:

Ce conseiller est disponible en ligne. Trio Dancer. Je le modifie juste pour moi.

Et alors ? Il y a des endroits où ils achètent et vendent des biens volés.
Ce forum ne fait pas partie de cette catégorie.
Il a été piraté (volé à l'auteur) il y a quelque temps et maintenant vous le faites pour vous. S'il vous plaît, ne le faites pas sur ce site. Nous avons une éthique ici.