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
J'ai ici une question pratique.
Pourquoi est-il nécessaire de vérifier le handle de l'indicateur pour l'invalidité à chaque appel de CopyBuffer() ? Dans mon EA j'ai fait cette procédure une fois (avec l'arrivée du premier tick, après avoir vérifié la synchronisation des données), et plus tard j'ai commencé à recevoir l'erreur 4807 Error indicator handle. CSymTotal=7. Les handle ont été reçus dans un tableau :
La vérification de l'impression montre que les sept H_Ind[0..6] ont des valeurs respectives de 10..15, c'est-à-dire différentes de -1. Les handles semblent être valides, mais en réponse à CopyBuffer(H_Ind[0-6]...) j'obtiens CopyBuffer=-1, LastError=4807( !!!).Parfois cela se passe normalement, et parfois il y a des erreurs.Après avoir introduit des vérifications comme dans cet article,
jusqu'à présent, tout fonctionne correctement. Mystère...
Je ne comprends pas où est ma faute.... Et surtout, pourquoi est-il nécessaire de vérifier la validité du handle àchaque fois que j'utilise CopyBuffer() et queje le recrée ? N'est-il pas sauvegardé jusqu'à ce que l'Expert Advisor termine son travail ? Est-ce une nécessité en général, ou est-ce juste pour la commodité de l'exemple ?
J'ai ici une question pratique.
Pourquoi est-il nécessaire de vérifier le handle de l'indicateur pour l'invalidité à chaque appel de CopyBuffer() ? Dans mon EA j'ai fait cette procédure une fois (avec l'arrivée du premier tick, après avoir vérifié la synchronisation des données), et plus tard j'ai commencé à recevoir l'erreur 4807 Error indicator handle. CSymTotal=7. Les handle ont été reçus dans un tableau :
La vérification de l'impression montre que les sept H_Ind[0..6] ont des valeurs respectives de 10..15, c'est-à-dire différentes de -1. Les handles semblent être valides, mais en réponse à CopyBuffer(H_Ind[0-6]...) j'obtiens CopyBuffer=-1, LastError=4807( !!!).Parfois cela se passe normalement, et parfois il y a des erreurs.Après avoir introduit des vérifications comme dans cet article,
jusqu'à présent, tout fonctionne correctement. Mystère...
Je ne comprends pas où est ma faute.... Et surtout, pourquoi est-il nécessaire de vérifier la validité du handle àchaque fois que j'utilise CopyBuffer() et queje le crée à nouveau ? N'est-il pas sauvegardé jusqu'à ce que l'Expert Advisor termine son travail ? Est-ce une nécessité, ou est-ce juste pour la commodité de l'exemple ?
En général, la question devrait être formulée de manière plus large :
Quels contrôles, conditions ou délais devraient être introduits AVANT et APRES CopyBuffer(), afin d'obtenir GARANTIEMENT ces valeurs d'indicateur 400(0), dont j'ai besoin maintenant ( !), sur sept (dix) instruments dans des conditions de vitesse maximale (dans une boucle) ?
Car, return(0) = "ah, bon, ça n'a pas marché maintenant, peut-être que la prochaine fois ça marchera...".
Ici, d'ailleurs, le reste de Copy est à côté...
PS. Peut-être est-ce déjà hors sujet. La question ne s'adresse pas à l'auteur, mais à tous ceux qui peuvent apporter des éclaircissements...
Dans mes exemples, la condition est la suivante : si le handle est valide, on procède à la copie des données. sinon, on crée à nouveau l'indicateur et on quitte cette fonction, car le calcul de l' indicateur prend du temps. il en va de même pour la copie, pendant la copie l'indicateur peut être recalculé, donc CopyBuffer() renvoie -1, dès que les données sont prêtes la fonction fera son travail, c'est pourquoi il est nécessaire de tout vérifier.
Oui, Sergey, je comprends. Je ne voulais pas jeter l'opprobre sur l'article ou l'auteur. L'article est excellent. Il ne s'agit pas d'une plainte, mais d'une tentative de réponse. C'est simplement la discussion la plus proche que j'ai trouvée sur le sujet. Vous aimeriez sans doute vous aussi connaître la réponse de manière plus précise, n'est-ce pas ? )
Peut-être devrions-nous le mettre dans un autre fil de discussion ?
Peut-être le mettre dans un fil séparé ?
https://www.mql5.com/ru/forum/1880.
Ici, mettez-le dans le sujet. Sergey, je m'excuse d'avoir dépassé le cadre de l'article. J'en serai ravi...)))
J'aimerais que quelqu'un me donne 20 méthodes de gestion de l'argent! !!!!!
Pour cet article, l'idée est très bonne. Mais vous avez oublié le concept de la POO et de la programmation en général : L'ABSTRACTNESS. A l'intérieur de vos fonctions sont codés en dur les indicateurs, le symbole actuel, la période actuelle, les paramètres de l'indicateur. L'idée est bonne, mais elle n'est pas entièrement mise en œuvre, elle est loin de la perfection. Par exemple, je veux vérifier le croisement des lignes de l'indicateur, chacune d'entre elles provenant d'une période différente et de symboles différents - c'est une première chose. Deuxièmement, qu'arrive-t-il à vos fonctions si le terminal perd temporairement la connexion avec le serveur et manque les trois barres que vous êtes en train de traiter ? Il y a un signal, mais l'entrée est manquée. La recherche d'un signal doit être effectuée avec une CHARGE. Il faut ensuite vérifier si le signal a déjà été traité. Vous pouvez avoir tellement d'intersections que vous serez vous-même surpris. Il suffit de passer des paramètres (numéro de l'indicateur, symbole, période, début de la recherche, fin de la recherche, ligne de l'indicateur...) aux fonctions. - Vous rendrez votre système plus flexible et l'Expert Advisor sera capable de voir ce qui est inaccessible aux humains - l'intersection des lignes de différents symboles et de différentes périodes. C'est beaucoup mieux que les fonctions données ici. Vous devez également travailler sur le concept de dénomination des variables - vous avez trop de variables avec des noms qui ne veulent rien dire - mais c'est un autre sujet. C'est ce qu'on appelle le style de programmation. Chacun a son propre style. Mais je vois que vous vous rapprochez lentement des concepts que j'ai essayé d'utiliser dans MT4 - c'est très encourageant.
Pour cet article, l'idée est très bonne. Mais vous avez oublié le concept de la POO et de la programmation en général : L'ABSTRACTNESS. A l'intérieur de vos fonctions sont codés en dur les indicateurs, le symbole actuel, la période actuelle, les paramètres de l'indicateur. L'idée est bonne, mais elle n'est pas entièrement mise en œuvre, elle est loin de la perfection. Par exemple, je veux vérifier le croisement des lignes de l'indicateur, chacune d'entre elles provenant d'une période différente et de symboles différents - c'est une première chose. Deuxièmement, qu'arrive-t-il à vos fonctions si le terminal perd temporairement la connexion avec le serveur et manque les trois barres que vous êtes en train de traiter ? Il y a un signal, mais l'entrée est manquée. La recherche d'un signal doit être effectuée avec une CHARGE. Il faut ensuite vérifier si le signal a déjà été traité. Vous pouvez avoir tellement d'intersections que vous serez vous-même surpris. Il suffit de passer des paramètres (numéro de l'indicateur, symbole, période, début de la recherche, fin de la recherche, ligne de l'indicateur...) aux fonctions. - Vous rendrez votre système plus flexible et l'Expert Advisor sera capable de voir ce qui est inaccessible aux humains - l'intersection des lignes de différents symboles et de différentes périodes. C'est beaucoup mieux que les fonctions données ici. Vous devez également travailler sur le concept de dénomination des variables - vous avez trop de variables avec des noms qui ne veulent rien dire - mais c'est un autre sujet. C'est ce qu'on appelle le style de programmation. Chacun a son propre style. Mais je vois qu'ils se rapprochent lentement des concepts que j'ai essayé d'utiliser dans MT4 - c'est très encourageant.