Erreurs, bugs, questions - page 2753

 
Mihail Matkovskij:

Comment puis-je changer le compilateur ?

J'ai découvert que le compilateur est intégré à MetaEditor à partir de la version 900: https://www.mql5.com/ru/forum/21374.

Alors pourquoi y a-t-il une fenêtre avec une ligne menant au répertoire où VS est installé ?

Compilateurs

Обратите внимание, что компилятор переехал внутрь MetaEditor, начиная с 900 билда
Обратите внимание, что компилятор переехал внутрь MetaEditor, начиная с 900 билда
  • 2014.03.01
  • www.mql5.com
Консольный компилятор MQL4/MQL5 остался, обновляется вместе с платформами МетаТрейдер 4/5 и всегда доступен по ссылкам:.
 
Igor Makanu:

Sans démagogie, nous devons pouvoir accéder aux prix actuels le plus rapidement possible. Le profileur montre que les appels constants à SymbolInfoDouble() et SymbolInfoTick() réduisent la vitesse d'optimisation

Eh bien, c'est ici qu'il a été suggéré précédemment d'ajouter la possibilité de passer NULL au lieu du nom du symbole actuel. Cela pourrait accélérer le travail dans des cas particuliers. En général, nous avons besoin d'un accès par les poignées, et non par les valeurs textuelles des symboles. Mais je pense que les développeurs ne sont pas susceptibles de se lancer dans une telle complication. Le problème semble être tiré par les cheveux.

Dans les mesures mentionnées ci-dessus, le coût n'était que de 6 % de l'exécution à vide (sans charge) du testeur. Et dans un code fonctionnel, ce sera un ordre de grandeur inférieur. Il n'est pas utile de prêter attention à de telles bagatelles, et appeler ces fonctions plus d'une fois dans un gestionnaire est une décision incorrecte en soi.

 
Alexey Navoykov:

Eh bien ici, il a été suggéré plus tôt d'ajouter la possibilité de passer NULL au lieu du nom du symbole actuel. Cela pourrait accélérer le travail dans des cas particuliers. Mais en général, nous avons besoin d'un accès via des poignées, et non des valeurs textuelles de caractères. Mais je pense que les développeurs sont peu susceptibles de se lancer dans une telle complication. Et cela ne vaut pas la peine, il me semble. Le problème est plutôt tiré par les cheveux.

Cela fonctionne déjà, mais il n'y a pas d'accélération (j'ai vérifié) - apparemment tout est déjà accéléré au maximum ou vice versa - pour l'accélération, on est encore loin du compte (demandez aux développeurs de le souligner)

 
A100:

Par conséquent, pour des raisons de rigueur, nous devrions utiliser Digits() au lieu de _Digits. Alors, formellement et sans contradiction logique, Digits() n'est pas lié par le modificateur const.

D'après ce que j'ai compris, _Digits était nécessaire pour la compatibilité avec MT4 - rien de plus.

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

Bugs, bugs, questions

Ilyas, 2020.05.20 15:39

L'appel de Symbol() accède TOUJOURS à la variable globale _Symbol, ainsi que Digits(), Point(), Period(), GetLastError(), IsStopped(), UninitializeReason().

 
Mihail Matkovskij:

Pendant le débogage et lorsque l'indicateur fonctionne lui-même, dans le journal, il écrit soudainement Stack overflow. Lors du débogage, le message "Critical error occurred, debugging stopped" s'affiche. Voici mon fil de discussion similaire: https://www.mql5.com/ru/forum/338301. Mais pendant la compilation, le compilateur ne gronde pas et tout se passe bien. Lors du débogage, il est impossible de déterminer à quel moment le programme se plante.

Peut-être que c'est le compilateur ? Le compilateur que j'utilise ne m'intéresse pas vraiment, mais dans mes paramètres, cela ressemble à ceci :

J'ai installé VS, et j'ai donc ce lien dans les paramètres. Le compilateur est donc approprié aussi... ? Mais quel compilateur y avait-il quand je n'avais pas VS, honnêtement je ne m'y suis pas intéressé. Je devrais peut-être essayer de revenir à ce compilateur et essayer de compiler le projet avec lui ?

Pendant que je cherchais des moyens de résoudre le problème, avec l'arrivée d'une autre mise à jour du terminal, le débogage a fonctionné correctement. J'ai réussi à trouver des erreurs. Certaines méthodes tournaient en boucle et s'appelaient elles-mêmes. C'est pourquoi le programme s'est écrasé avec le message "Stack overflow". Mais avec l'aide d'un débogueur fonctionnel, j'ai réussi à trouver toutes les lignes problématiques et à les corriger. J'exprime ma gratitude aux développeurs pour la correction rapide du bug avec débogage !

 

в естественном языке (в математике) константа это... ну как бы константа! ))

En C++, une constante est une vérification automatique par le compilateur de la présence d'une constante dans la portée (ou durée de vie) d'une variable.

En C++ comme en MQL, une constante peut être définie une fois à la création et ne plus jamais être modifiée. Les lunettes n'ont rien à voir avec ça.

Ce n'est pas très différent des mathématiques.


 
Mihail Matkovskij:

J'ai découvert que le compilateur est intégré à MetaEditor à partir de la version 900: https://www.mql5.com/ru/forum/21374.

Alors pourquoi cette fenêtre avec une ligne menant au répertoire où VS est installé ?


Le compilateur VS est utilisé si vous écrivez une DLL.

 
fxsaber:

Ce qui confirme une fois de plus qu'il est inutile d'utiliser directement _Digits,_Point , _Period, _LastError, etc. (et même _Symbol peut être remplacé par NULL). En fait, ils doivent être déclarés comme const volatile.

Et vous, au contraire, vous suggérez d'ajouter

 
A100:

Ce qui confirme une fois de plus qu'il est inutile d'utiliser directement _Digits,_Point , _Period, _LastError, etc. Et même _Symbol peut être remplacé par NULL.

Et vous, au contraire, vous proposez de compléter cette série.

L'intérêt réside dans la possibilité de passer par référence.

 
fxsaber:

Le but est de pouvoir passer par référence.

Comme pour les chaînes de caractères, les développeurs ont la possibilité (si ce n'est déjà fait) de tout passer par référence sans copier réellement la variable.

void f()
{
        MqlTick tick;
        SymbolInfoTick( NULL, tick );
        g( tick );
}
inline void SymbolInfoTick( string symbol, MqlTick& tick )
{
      tick = _LastTick; //л енивое программирование: а не будем ничего копировать,
                        //пока _LastTick не изменится
}


Et ce sera une solution non pas pour une structureMqlTick particulière, mais pour toutes les occasions.