
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
Forum sur le trading, les systèmes de trading automatisé et les tests de stratégie
FAQ des débutants MQL5 MT5 MetaTrader 5
Aleksey Vyazmikin, 2019.02.17 06:56
J'ai décidé de répéter l'expérience à nouveau, voici le code
Et voici le résultat
Une idée de la cause de l'erreur ?Les télépathes sont en vacances. Et pour les gens ordinaires, nous avons besoin :
Où vous a-t-on dit qu'il y avait une erreur ? Je vous l'ai dit - cherchez le point dans la bibliothèque où il peut être écrit dans la variable _LastError. Ce n'est pas nécessairement que le code avec l'erreur a fonctionné. Parce qu'il pourrait rechercher un objet (et s'il est absent, le code d'erreur sera écrit dans la variable) et le créer. Mais si l'objet n'est pas créé, alors c'est une erreur, mais il sera créé et tout se passera bien. Mais après vérification, le code d'erreur (l'objet était absent avant la création) sera écrit dans une variable, que vous lirez ensuite dans votre code.
Les télépathes sont en vacances. Ce qu'il faut pour les gens ordinaires, c'est :
1. Code
2. Pas de prévision de messages d'erreur dans le journal
3. Windows 7 Home 32 bit, build 1940, non connecté au serveur pendant les tests - broker Discovery.
Où vous a-t-on dit qu'il y avait une erreur ? Je vous l'ai dit - cherchez un fragment dans la bibliothèque où il peut être écrit dans la variable _LastError. Ce n'est pas nécessairement que le code avec l'erreur a fonctionné. Parce qu'il pourrait rechercher un objet (et s'il est absent, le code d'erreur sera écrit dans la variable) et le créer. Mais si l'objet n'est pas créé, c'est une erreur, mais il sera créé et tout se passera bien. Mais après vérification, le code d'erreur (l'objet était absent avant la création) sera écrit dans une variable, que vous lirez ensuite dans votre code.
La bibliothèque doit soit produire une erreur lorsqu'il y a une erreur réelle, soit gérer correctement la situation et ne pas produire d'erreur lorsqu'il n'y en a pas. Si mon utilisation de la bibliothèque n'est pas décrite dans la classe lors de la vérification des erreurs, vous devez le préciser. En tout état de cause, il est déraisonnable pour l'utilisateur de modifier les bibliothèques du fabricant du produit.
La bibliothèque doit soit produire une erreur lorsqu'il y a une erreur réelle, soit gérer correctement la situation et ne pas produire d'erreur lorsqu'il n'y en a pas. Si mon utilisation de la bibliothèque n'est pas décrite dans la classe lors de la vérification des erreurs, vous devez le préciser. En tout état de cause, il est déraisonnable pour l'utilisateur de modifier les bibliothèques du fabricant du produit.
Il n'y a pas d'erreur, relisez-le :
Où vous a-t-on dit qu'il y avait une erreur ? Je vous l'ai dit - cherchez un fragment dans la bibliothèque où il peut être écrit dans la variable _LastError. Ce n'est pas nécessairement que le code avec l'erreur a fonctionné. Parce qu'il pourrait rechercher un objet (et s'il est absent, le code d'erreur sera écrit dans la variable) et le créer. Mais si l'objet n'est pas créé, c'est une erreur, mais il sera créé et tout se passera bien. Mais après vérification, le code d'erreur (l'objet était absent avant la création) sera écrit dans une variable que vous lirez ensuite dans votre code.
Il est donc de votre intérêt de savoir pourquoi vous lisez l'erreur après l'exécution normale du code. Ce que vous ne comprenez probablement pas, c'est qu'avoir un code différent de zéro dans la variable _LastError ne signifie pas nécessairement qu'il y a une erreur dans le code de CGraphic et pas seulement dans celui-ci. Dans ce cas, il pourrait s'agir d'un simple résultat de la recherche de l'existence d'un objet, qui a été exécuté à l'intérieur du CGraphique en SB. Il y a eu une requête pour un objet par son nom, le résultat a retourné -1 et le code 4202 a été écrit dans _LastError. Puis l'objet a été créé, tout a fonctionné et a été renvoyé au programme appelant. Et là, vous lisez immédiatement le code d'erreur et vous l'obtenez. Mais il n'y a pas d'erreur - vous voyez le résultat des requêtes à l'intérieur du SB.
Je ne fais que suggérer une raison possible pour ce que vous rapportez.
Ainsi, si vous voulez vraiment trouver une erreur réelle et la signaler, vous devez parcourir l'ensemble du code CGraphic dans le débogueur et attraper l'erreur réelle qui causera des échecs de logique et de performance, plutôt que de simplement prétendre que vous avez lu le code d'erreur et donc - qu'il est bien là.
Il n'y a pas d'erreur, relisez-le :
Il est donc dans votre intérêt de savoir pourquoi vous lisez l'erreur après l'exécution normale du code. Vous ne comprenez probablement pas que le contenu de la variable _LastError, qui n'est pas nul, ne signifie pas nécessairement qu'il y a une erreur dans le code CGraphic, et pas seulement dans celui-ci. Dans ce cas, il pourrait s'agir d'un simple résultat de la recherche de l'existence d'un objet, qui a été exécuté à l'intérieur du CGraphique en SB. Il y a eu une requête pour un objet par son nom, le résultat a retourné -1 et le code 4202 a été écrit dans _LastError. Puis l'objet a été créé, tout a fonctionné et a été renvoyé au programme appelant. Et là, vous lisez immédiatement le code d'erreur et vous l'obtenez. Mais il n'y a pas d'erreur du tout - vous voyez le résultat des requêtes à l'intérieur du SB.
Je ne fais que suggérer une raison possible pour ce que vous rapportez.
Donc, si vous voulez vraiment trouver l'erreur réelle et la signaler, vous devez parcourir l'ensemble du code graphique dans le débogueur et attraper l'erreur réelle qui fera échouer la logique et l'opération, plutôt que de simplement prétendre que vous avez lu le code d'erreur et donc - qu'il est bien là.
Vous avez vous-même dit dans votre raisonnement logique qu'il pouvait y avoir une erreur dans le code, et elle s'exprime en ne réinitialisant pas l'erreur. qui a été reçue en raison de l'absence d'un objet avant sa création.
Non, je n'ai pas la compétence nécessaire pour chercher une erreur dans un code complexe et obtenir une réponse disant que c'était prévu ainsi.
Pouvez-vous me dire si ce message est une erreur de l'utilisateur ou non ?
Le code qui indique cela estD.PointsFill(false) ;
Vous avez vous-même indiqué dans votre raisonnement logique qu'il peut y avoir une erreur dans le code, et elle s'exprime en ne réinitialisant pas l'erreur. qui a été reçue en raison de l'absence de l'objet avant sa création.
Non, je n'ai pas la compétence nécessaire pour chercher une erreur dans un code complexe et obtenir une réponse disant que c'était prévu ainsi.
Pouvez-vous me dire si ce message est une erreur de l'utilisateur ou non ?
Il pointe vers ce code -D.PointsFill(false) ;
Je ne comprends pas du tout le sens de cette phrase.
Il me semble que je vous ai déjà tout décrit en détail.
Je ne sais pas. Pas beaucoup d'informations.
Je ne comprends pas du tout le sens de cette phrase.
Il me semble que je vous ai déjà tout expliqué en détail.
Je ne sais pas. Pas beaucoup d'informations.
Vous ne comprenez pas que si votre code est construit pour réagir à une erreur (nous créons un objet en cas d'erreur), alors après avoir réparé l'erreur(création d'un objet), il est logique de réinitialiser cette erreur, ce qui selon votre raisonnement logique n'est pas fait dans la bibliothèque.
Ici, je n'ai pas non plus d'informations sur la manière de réagir à cette erreur...
Vous ne comprenez pas que si le code est construit sur la réponse à l'erreur (en cas d'erreur nous créons un objet), alors après la correction de l'erreur(création de l'objet), il est logique de réinitialiser cette erreur, ce qui selon votre raisonnement logique n'est pas fait dans la bibliothèque.
Ici, je n'ai aucune information sur la façon de réagir à cette erreur...
Vous devez être bien conscient que ce n'est pas le code dans _LastError qui n'est pas égal à zéro qui constitue une erreur, mais le résultat renvoyé par la fonction qui indique une exécution erronée de cette fonction. Et _LastError contient le code qui pointe exactement vers cette erreur qui fait que la fonction s'exécute par erreur. Il est donc douteux que vous puissiez utiliser la description du code d'erreur stockée dans la variable de service au lieu d'utiliser directement le code de retour de la fonction. Si la fonction a retourné -1 ou false ou 0 (pour chaque fonction, le code d'erreur est décrit dans l'aide), eh bien - seule l'analyse du résultat retourné par la fonction doit être traitée par vous, pas le code dans _LastError, qui n'indique pas l'erreur, mais est utilisé pour indiquer la cause du retour d'un certain résultat par la fonction.
La fonction de recherche d'objet renvoie une valeur inférieure à zéro dans le cas où un objet portant le nom donné n'existe pas. Est-ce une erreur ? Non. Il s'agit d'une réponse standard de la fonction, sur la base de laquelle vous prenez la décision de créer un objet avec le nom donné. Le code contenu dans _LastError dit explicitement que "Un objet avec le nom demandé n'existe pas" - vous pouvez le créer.
Eh bien, je suis fatigué de vous l'expliquer. Celui qui le veut, comprendra.