Bug MT5 (build 2361) : un autre problème avec les priorités d'appel des fonctions template surchargées par rapport au comportement du C++. Dans MT5 erreur de compilation "appel ambigu à une fonction surchargée", en C++ c'est OK. C++ en ligne(https://onlinegdb.com/Sy8cqdFr8);
template<typename _Tp>
struct It_wrapper{
_Tp p;
};
template<typename _Tp>
struct It_g : public It_wrapper<_Tp>{};
template<typename _It, typename _Tp>
int __test_print(const It_wrapper<_It> &it, int n, const _Tp &value){
Print(it.p);
return0;
};
template<typename _It>
int test_print(const It_wrapper<_It> &it, int n, constint value){
return __test_print(it, n, value);
}
template<typename _It, typename _ValueType>
int test_print(const It_wrapper<_It> &it, int n, const _ValueType &value){
return __test_print(it, n, value);
}
voidOnStart(){
It_g<int> it;
It_g<string> it_s;
it.p = 4;
it_s.p = "test";
constint n = 10;
test_print(it, 5, n); // Compile Error: 'test_print' - ambiguous call to overloaded function
test_print(it_s, 5, n); // Compile Error: 'test_print' - ambiguous call to overloaded function
};
int main(){
OnStart();
return1;
};
Bug 1 La commission position.Comision() dans les tests est toujours égale à 0 (dans le testeur lui-même, la commission est affichée dans l'historique de la position), cela affecte l'optimisation des paramètres pour les Expert Advisors qui calculent des calculs en utilisant la commission.
Bug 2 simbol.Spred() ne donne les valeurs réelles qu'au troisième accès depuis le début du programme.
Bug 3 : lorsque je perds un agent de test (je travaille en réseau local uniquement) pendant des heures, il ne peut pas l'oublier et essaie de le retrouver même si l'agent est déjà apparu dans le réseau local - je dois changer l'ip de l'agent et seulement après que le testeur oublie l'agent dans l'heure qui suit, je retourne l'ip de l'agent et le testeur continue à travailler. Le résultat est l'arrêt des tests pendant une période allant de 30 minutes à quelques heures - comme par hasard.
Bug 4 dans la description de l'algorithme génétique, il est écrit quand vous arrêtez le test ou quand vous arrêtez le test manuellement si les paramètres du test ne sont pas modifiés le cache de l'optimisation est stocké et quand vous reprenez le test, l'optimisation continue à partir du point d'arrêt - pas de conneries en réalité - l'optimisation recommence, et les résultats de l'optimisation sont ajoutés au fichier des résultats de l'optimisation arrêtée. Par conséquent, il y a juste plus de résultats d'optimisation dans le fichier de résultats d'optimisation - aucune utilité pratique pour trouver les paramètres optimaux, le temps d'optimisation global augmente.
Le bogue 5 dans le compilateur mql5 me semble qu'il n'est tout simplement pas optimisé - les programmes deviennent simplement plus lents, ce qui affecte la vitesse d'optimisation des paramètres. Un programme de 20 lignes ne peut pas être aussi lent.
J'ai rencontré un problème étrange, sur un tick il ouvre un ordre et ferme l'autre, tout fonctionne bien dans le testeur, mais je l'ai mis sur le compte réel et à un endroit le tambourin a commencé, la position s'ouvre, mais l'autre ne se ferme pas. J'ai une question à ce sujet : est-il possible d'envoyer deux ordres simultanément (d'ouverture et de fermeture) lorsque l'on négocie sur le compte réel ?
J'ai rencontré un problème étrange, sur un tick il ouvre un ordre et ferme l'autre à un certain moment. Dans le testeur tout fonctionne bien, mais je l'ai mis sur le compte réel et à un endroit le tambourin a commencé, la position s'ouvre, mais l'autre ne se ferme pas. À cet égard, j'ai une question : est-il possible d'envoyer deux ordres simultanément (ouverture et fermeture) lorsque l'on négocie sur le compte réel ?
Rappelez-moi s'il existe un moyen efficace de résoudre l'erreur "appel ambigu à une fonction surchargée" lorsque vous avez besoin d'une gestion séparée pour les types simples et les pointeurs, comme ceci :
Ici, le compilateur considère que (BaseFunctor *) correspond aussi à V. Vous pouvez spécifier explicitement la conversion de type lors de l'appel d'une méthode, mais c'est laid. Si vous prenez un paramètre par référence dans une fonction de modèle, vous ne pouvez pas passer des constantes et d'autres valeurs temporaires (une variable est nécessaire).
La différence ici est la présence de parenthèses.
La différence ici est la présence de parenthèses.
c'est à vous de voir, mais vous auriez pu vérifier avant d'écrire
Dans MT5 erreur de compilation "appel ambigu à une fonction surchargée", en C++ c'est OK.
C++ en ligne(https://onlinegdb.com/Sy8cqdFr8);
L'éditeur de texte ne fonctionne pas sur le marché. Lorsqu'on essaie de l'étendre en plein écran, seul le bouton d'enregistrement se bloque. ....
De plus, il est possible de télécharger une image de grand poids, l'image est téléchargée mais ne s'affiche pas correctement dans la description.Market a cassé l'éditeur de texte, lorsque j'essaie de l'étendre en plein écran, seul le bouton d'enregistrement se bloque .....
De plus, il est possible de télécharger une image de grand poids, l'image est téléchargée mais ne s'affiche pas correctement dans la description.Bonjour !
Merci pour le rapport de bogue!
Pourriez-vous préciser le problème posé par la photo ?
J'ai rencontré un problème étrange, sur un tick il ouvre un ordre et ferme l'autre, tout fonctionne bien dans le testeur, mais je l'ai mis sur le compte réel et à un endroit le tambourin a commencé, la position s'ouvre, mais l'autre ne se ferme pas. J'ai une question à ce sujet : est-il possible d'envoyer deux ordres simultanément (d'ouverture et de fermeture) lorsque l'on négocie sur le compte réel ?
J'ai rencontré un problème étrange, sur un tick il ouvre un ordre et ferme l'autre à un certain moment. Dans le testeur tout fonctionne bien, mais je l'ai mis sur le compte réel et à un endroit le tambourin a commencé, la position s'ouvre, mais l'autre ne se ferme pas. À cet égard, j'ai une question : est-il possible d'envoyer deux ordres simultanément (ouverture et fermeture) lorsque l'on négocie sur le compte réel ?
Votre cycle n'est pas correct pour les positions de fermeture. Faites le cycle inverse.
Une erreur critique a été détectée dans le terminal lors du travail avec le débogueur sur des données réelles (build 2361) :
2020.03.16 16:30:41.730 (RTS Splice,M1) crash --> 00000115A15300A5 488D0B lea rcx, [rbx]
2020.03.16 16:30:41.730 (RTS Splice,M1) 00000115A15300A8 E8850B0000 call 0x115a1530c32
2020.03.16 16:30:41.730 (RTS Splice,M1) 00000115A15300AD 90 nop
2020.03.16 16:30:41.730 (RTS Splice,M1) 00000115A15300AE 89842488000000 mov [rsp+0x88], eax
2020.03.16 16:30:41.730 (RTS Splice,M1) 00000115A15300B5 F4 hlt
2020.03.16 16:30:41.730 (RTS Splice,M1) 00000115A15300B6 842488 test [rax+rcx*4], ah
2020.03.16 16:30:41.730 (RTS Splice,M1) 00000115A15300B9 0000 add [rax], al
2020.03.16 16:30:41.730 (RTS Splice,M1)
2020.03.16 16:30:41.730 (RTS Splice,M1) 00: 0x00000115A15300A5
2020.03.16 16:30:41.730 (RTS Splice,M1) 01: 0x00000115A7DFFD64
2020.03.16 16:30:41.730 (RTS Splice,M1) 02: 0x00000001776FA270
2020.03.16 16:30:41.730 (RTS Splice,M1) 03: 0x0000000000000001
2020.03.16 16:30:41.730 (RTS Splice,M1) 04: 0x00000001776FA23C
2020.03.16 16:30:41.730 (RTS Splice,M1)
Rappelez-moi s'il existe un moyen efficace de résoudre l'erreur "appel ambigu à une fonction surchargée" lorsque vous avez besoin d'une gestion séparée pour les types simples et les pointeurs, comme ceci :
Ici, le compilateur considère que (BaseFunctor *) correspond aussi à V. Vous pouvez spécifier explicitement la conversion de type lors de l'appel d'une méthode, mais c'est laid. Si vous prenez un paramètre par référence dans une fonction de modèle, vous ne pouvez pas passer des constantes et d'autres valeurs temporaires (une variable est nécessaire).