Erreurs, bugs, questions - page 3079
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Le marché ne charge pas de capture d'écran. J'ai essayé à partir de deux navigateurs.
Moi aussi...
Bonjour, quel pourrait être le problème ? J'utilise une dll pour écrire sur le serveur SQL (exemple de l'article https://www.mql5.com/ru/article s/2895 ).
Si j'utilise jusqu'à 5 threads, les données sont écrites correctement. Si j'utilise plus de threads, il y aura une erreur "Unhandled exception 0xE0434352".
Bonjour, quel pourrait être le problème ? J'utilise une dll pour écrire sur le serveur SQL (exemple de l'article https://www.mql5.com/ru/article s/2895 ).
Si j'utilise jusqu'à 5 threads, les données sont écrites correctement. Si j'utilise plusieurs threads, l'erreur "Unhandled exception 0xE0434352" apparaît immédiatement.
Dans toutes les fonctions de l'interface DLL nous devrions utiliser try catch, attraper "unhandled exception" et l'écrire dans le journal...
C'est une bonne idée d'attraper toutes les exceptions et d'essayer tous les appels aux plus. Même dans la documentation de MQL, il est clairement écrit que les DLL ne doivent pas lancer d'exceptions, pas le C++.
en particulier dans l'article conn.Close et new SqlConnection ne relèvent pas de la "capture d'exception" et peuvent potentiellement lancer des exceptions.
La capture d'écran ne se charge pas dans le Marché. Je l'ai essayé avec deux navigateurs.
Moi aussi...
Avez-vous essayé un simple glisser-déposer de l'image ?
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie
Marché et mathématiques
Alexey Viktorov, 2021.08.19 21:01
Essayez d'insérer une image en la faisant simplement glisser et en la déposant sur le texte.
J'ai maintenant essayé d'effectuer des changements dans le conseiller expert caché et j'ai fait glisser la première image que j'ai vue.
Avez-vous essayé un simple glisser-déposer de l'image ?
sur 5 photos, une seule est ajoutée
C'est le cas depuis longtemps. Les chaînes mql n'aiment vraiment pas les caractères nuls à l'intérieur d'une chaîne et dans les littéraux, dans les fonctions aussi.
La seule façon normale est de convertir trois chaînes de caractères en un tableau avec un zéro à la fin.
C'est-à-dire que ce comportement tel qu'il est maintenant a été fait délibérément il y a quelques années. Je ne connais pas les raisons.Il y a des ennemis partout
Dans toutes les fonctions DLL d'interface, enveloppez tout dans try catch, attrapez l'exception non gérée et enregistrez-la...
C'est une bonne idée d'attraper toutes les exceptions et d'envelopper tous les appels aux plus dans un try. Même dans la documentation de MQL, il est clairement écrit que les DLL ne doivent pas lancer d'exceptions, pas le C++.
en particulier conn.Close et new SqlConnection ne lèvent pas d'exceptions et pourraient potentiellement en lever une.
Merci ! Je l'ai vérifié, erreur d'accès à la variable partagée. L'auteur a également écrit à ce sujet.
Il faut noter que le projet de démonstration a une limitation très importante : il ne permet d'exécuter qu'un seul conseiller expert travaillant avec DB dans un terminal MetaTrader. Le problème est que toutes les EA utilisent une instance d'une DLL chargée. Comme notre classe est statique, elle sera la même pour tous les Expert Advisors en cours d'exécution. Les variables seront également communes. Si vous exécutez plusieurs experts, ils utiliseront tous la même connexion et un seul objet de commande pour tous. Si plusieurs experts essaient d'accéder à ces objets en même temps, des problèmes peuvent survenir.
Q : Comment puis-je implémenter un accès multithread à la dll (instance séparée pour chaque appel de fonction et variables locales pour chaque appel) ?
Je rencontre ce problème dans le testeur MT5.
En travaillant avec plusieurs devises, les données sont parfois échangées contre une autre devise. Vérifiez le testeur. Veuillez le corriger.
La première valeur estSymbolInfoDouble(symbol,SYMBOL_BID) ;
Comme si elle ne pouvait pas recevoir de prixSymbolInfoDouble(EURGBP,SYMBOL_BID) ; et prend la valeur d'une autre paire qui est en cours. Existe-t-il un moyen de vérifier si la citation est correcte ?
Merci ! Je l'ai vérifié, erreur d'accès à la variable partagée. L'auteur a également écrit à ce sujet
Il convient de noter que le projet de démonstration présente une limitation très importante : il ne permet d'exécuter qu'un seul conseiller expert travaillant avec DB dans un terminal MetaTrader. Le problème est que toutes les EA utilisent une instance d'une DLL chargée. Puisque notre classe est statique, elle sera la même pour tous les Expert Advisors en cours d'exécution. Les variables seront également communes. Si vous exécutez plusieurs experts, ils utiliseront tous la même connexion et un seul objet de commande pour tous. Si plusieurs experts essaient d'accéder à ces objets en même temps, des problèmes peuvent survenir.
Q : Comment puis-je implémenter un accès multi-thread à la dll (instance séparée pour chaque appel de fonction et variables locales pour chaque appel) ?
Il n'y a pratiquement aucun moyen de le faire en .NET. La classe est rendue statique non pas parce que l'auteur de l'article est mauvais, mais parce que c'est ainsi que les classes pointues sont importées.
Je vois deux solutions : 1) (longue à écrire, mais rapide) réécrire en C++ et ne plus toucher à .NET 2) (plutôt mécaniquement, mais la vitesse diminuera et il pourrait y avoir des effets secondaires) envelopper les appels dans une section critique pour éviter que deux threads y accèdent simultanément.
si le sharping est important, une autre option consiste à réécrire les pools de connexion de contrôle au niveau de la DLL pour se souvenir du mappage EA<->connection_id et chaque EA fonctionne avec sa connexion ;
Je ne peux pas me prononcer sur .net - est-il possible d'obtenir et de stocker la référence à l'objet sharping dans une structure MQL ou un scalaire et de le faire passer dans les deux sens. Il s'agit de fonctionner comme avec un pointeur C++ ordinaire. Si vous le pouvez, alors tout est simplifié.