Erreurs, bugs, questions - page 2490

 
Igor Makanu:

La référence n'est pas correcte, elle est trompeuse, j'ai écrithttps://www.mql5.com/ru/forum/304239/page57#comment_11519307.

Dans MQL5, les tampons fonctionnent en général comme des tableaux habituels. Dans MT4, le terminal traitait les tampons - il les réinitialisait à EMPTY_VALUE, puis ... Je ne me souviens pas où j'ai écrit sur la différence entre les indicateurs MT5 et MT4.

Vous devez effacer les tampons - vous les effacez comme un tableau habituel, le terminal ne définit que la taille du tampon-réseau lui-même.

Igor, pouvez-vous expliquer en russe simple : si chaque trou du tampon indicateur sera rempli avec certaines valeurs, qui remplaceront les déchets qu'il contient, quel est le but de forcer ces trous avant de les remplir avec les bonnes valeurs ? Pour la perte de vitesse d'exécution ?

 
Alexey Viktorov:

Igor, pouvez-vous expliquer en russe clair : si chaque trou du tampon indicateur sera rempli avec des valeurs qui remplaceront les déchets qu'il contient, à quoi sert-il de vider ces trous avant de les remplir avec les valeurs nécessaires ? Pour la perte de vitesse d'exécution ?

Le remplissage des "trous" est critique seulement dans un indicateur avec des "flèches", dans MT4 pendant l'initialisation de l'indicateur ces "trous" seront remplis automatiquement par la valeur EMPTY_VALUE.

dans MT5, cela doit être fait par le programmeur.

ou dans MT5, le programmeur doit remplir les tampons de l'indicateur via la construction if() else.

C'est-à-dire que cela fonctionnera dans MT4 :

if(...) Buf[i] = high[i];

dans MT5, vous devez écrire :

if(...) Buf[i] = high[i]; else Buf[i] = EMPTY_VALUE;

ou dans MT5, vous devez vider les tampons de l'indicateur, sinon l'indicateur va tirer des "déchets" du tableau, qui est lié par le tampon de l'indicateur ...., lorsque vous changez le TF. c'est une question de goût, comment écrire et ce qu'il faut prendre en compte


SZY : vitesse ? Eh bien, mesurez la vitesse, dans 99% des cas les fonctions intégrées sont plus rapides, mais il n'y a pas de différence de performance entre remplir chaque barre dans la boucle EMPTY_VALUE et une initialisation avec ArrayInitialize(Buf,EMPTY_VALUE)

 
Igor Makanu:

Le remplissage des "trous" est critique seulement dans un indicateur avec des "flèches", dans MT4 pendant l'initialisation de l'indicateur ces "trous" seront remplis automatiquement par la valeur EMPTY_VALUE.

dans MT5, cela doit être fait par le programmeur.

ou dans MT5, le programmeur doit remplir les tampons de l'indicateur via la construction if() else.

C'est-à-dire que cela fonctionnera dans MT4 :

dans MT5, vous devez écrire :

ou dans MT5, vous devez vider les tampons de l'indicateur, sinon l'indicateur va tirer des "déchets" du tableau, qui est lié par le tampon de l'indicateur ...., lorsque vous changez le TF. c'est une question de goût, comment écrire et ce qu'il faut prendre en compte


Eh bien, si l'on mesure la vitesse, dans 99% des cas, les fonctions intégrées s'exécutent plus rapidement, mais il n'y a pas de différence de performance entre remplir chaque barre dans la boucle EMPTY_VALUE et l'initialiser une fois avec ArrayInitialize(Buf,EMPTY_VALUE).

Tout ceci n'est qu'un canasson. C'était comme ça, c'est comme ça que je veux que ce soit, c'est difficile de changer mes habitudes et d'autres raisons.

La construction if else peut facilement être remplacée par

Buf[i] = условие ? high[i] : EMPTY_VALUE;
 
Alexey Viktorov:

C'est juste du harcèlement. C'était comme ça, c'est comme ça que je le veux, c'est difficile de changer mes habitudes et d'autres raisons.

La construction if else est facilement remplacée par

Si vous êtes pointilleux, les conseils pour améliorer les performances en C++ ou C# recommandent simplement de ne pas utiliser "l'opérateur conditionnel ? : " Je crois avoir lu un article sur Habra une fois (je ne l'ai pas testé, j'écris le plus commodément possible).

;)

 
Igor Makanu:

Si je suis pointilleux, le conseil sur la façon d'améliorer les performances en C++ ou C# est de ne pas utiliser "l'opérateur conditionnel ? : " Je crois avoir lu un article sur Habra une fois (je ne l'ai pas testé, j'écris moi-même le plus commodément possible).

;)

Le compilateur n'est pas un idiot et optimise mieux qu'un gourou sur Habra.
 
Artyom Trishkin:
Eh bien, le compilateur ici n'est pas un idiot, et optimise mieux que les "gourous" sur le hubr

En de telles occasions, je répète toujours : "Le soleil se lève le matin et se couche le soir..." - Vous voyez une logique ici ? - Oui, c'est logique, mais y a-t-il des informations dans ma phrase ? - Il n'est pas là.

je ne le testerai pas ? : , compilateur machine.... Hubr, bien...

 
Igor Makanu:

Je ne vais pas faire de tests ? :

Testé MT5 :

2019.06.30 13:37:04.230 tst (EURUSD,H1) Testing if() cycles=9999999999999999 time=10859 ms

2019.06.30 13:37:15.116 tst (EURUSD,H1) Test ? : cycles=99999999999999 time=10891 ms

2019.06.30 13:38:05.348 tst (EURUSD,H1) Testing if() cycles=9999999999999999 time=10843 ms

2019.06.30 13:38:16.190 tst (EURUSD,H1) Test ? : cycles=99999999999999 time=10844 ms

2019.06.30 13:38:32.111 tst (EURUSD,H1) Testing if() cycles=9999999999999999 time=10860 ms

2019.06.30 13:38:42.955 tst (EURUSD,H1) Test ? : cycles=99999999999999 time=10843 ms

J'ai testé le MT4 :

2019.06.30 13:46:09.087 tst EURUSD,H1 : Test ? : cycles=99999999999999 time=33234 ms

2019.06.30 13:45:35.854 tst EURUSD,H1 : Test if() cycles=99999999999999 time=32953 ms

2019.06.30 13:44:43.421 tst EURUSD,H1 : Test ? : cycles=99999999999999 time=333298 ms

2019.06.30 13:44:10.094 tst EURUSD,H1 : Test if() cycles=99999999999999 time=33016 ms

2019.06.30 13:42:56.925 tst EURUSD,H1 : Test ? : cycles=99999999999999 time=33344 ms

2019.06.30 13:42:23.584 tst EURUSD,H1 : Test if() cycles=99999999999999 time=32953 ms

Les développeurs de MT, comme toujours au sommet du jeu !
 
J'ai remarqué depuis longtemps que la mise en évidence des noms de macros personnalisées dans un grand projet ne fonctionne pas toujours. De nombreuses macros définies dans d'autres fichiers ne sont pas mises en évidence pour une raison quelconque. Je n'arrive pas encore à trouver le modèle. Tout ce que je vois, c'est que toutes les macros définies dans un certain fichier après une certaine ligne cessent d'être mises en évidence dans d'autres fichiers. Quelqu'un d'autre a vu cela en lui-même ?
 
Alexey Navoykov:
J'ai remarqué depuis longtemps que la mise en évidence des noms de macros définies par l'utilisateur dans un grand projet ne fonctionne pas toujours. De nombreuses macros définies dans d'autres fichiers ne sont pas mises en évidence pour une raison quelconque. Je n'ai pas encore trouvé de modèle. Tout ce que je vois, c'est que toutes les macros définies dans un certain fichier cessent d'être mises en évidence dans d'autres fichiers après une certaine ligne. Quelqu'un d'autre a vu cela se produire ?

J'ai remarqué que si vous écrivez comme paramètre d'une fonction, celle-ci ne s'allume pas. Je pense que cela vient du fait que le type de correspondance n'est pas complet. Ou comment l'appeler plus précisément, je ne sais pas.

 
Alexey Navoykov:
J'ai remarqué depuis longtemps que la mise en surbrillance des noms de macros définies par l'utilisateur dans un grand projet ne fonctionne pas toujours. De nombreuses macros définies dans d'autres fichiers ne sont pas mises en surbrillance pour une raison quelconque. Je n'ai pas encore trouvé le modèle. Tout ce que je vois, c'est que toutes les macros définies dans un certain fichier après une certaine ligne cessent d'être mises en surbrillance dans d'autres fichiers. Quelqu'un d'autre voit-il cela dans son propre fichier ?
Oui