Quelqu'un sait-il comment développer un indicateur multi-devises ? - page 2

 

La première fois que vous appelez ACR, vous obtenez l'erreur 4066. C'est tout. Appelez-le à nouveau et vous obtenez un compte valide mais aucune donnée dans les tableaux. L'accès aux tableaux n'entraînera pas un dépassement de la plage.

 
WHRoeder:

La première fois que vous appelez ACR, vous obtenez l'erreur 4066. C'est tout. Appelez-le à nouveau et vous obtenez un compte valide mais aucune donnée dans les tableaux. L'accès aux tableaux n'entraînera pas un dépassement de la plage.

Je ne suis pas d'accord, car je ne vois pas ce que vous venez de décrire. Cependant, cela peut être dû au fait que la plupart du temps, dans mon utilisation Real Live, toutes les données sont généralement disponibles, et que dans mon environnement de démonstration/test, j'ai généré des ".hst" et des ".fxt" à partir de données externes.

Je vais essayer de recréer les conditions de "table rase" sans données locales et voir si je peux reproduire ce que vous décrivez.

 

J'ai recréé les conditions de "table rase" et codé un petit script pour tester cela dans une boucle continue sans fonction de veille. J'ai exécuté le script deux fois sur un graphique "EURUSD", mais j'ai demandé au code de demander des données sur "NZDCAD" qui n'a jamais été chargé auparavant.

Les résultats de la première exécution sont les suivants.

  • Pendant les 73607 premières itérations (qui ont duré environ 516ms), le "ArrayCopyRates" a toujours retourné un compte de -1, et a généré une erreur 4073 (Error 4073 - No history data). La taille du tableau était toujours de 0 pendant ces itérations.

  • Finalement, à la 73608ème itération, il a retourné un compte de 512 et la taille du tableau a été fixée à 512 également et le temps pour le 0ème élément avait un temps valide (et non 0) et aucune erreur n'a été générée.
J'ai ensuite effectué une deuxième exécution du script, puisque les données étaient déjà chargées, et voici les résultats :
  • Au cours de la première et unique itération, le "ArrayCopyRates" a renvoyé un compte de 2048 mais a généré une erreur 4066 même si le compte de retour était valide (Error 4066 - Requested history data is in updating state). La taille du tableau était également de 2048 et l'heure du 0ème élément était valide (et non 0).

  • J'
ai joint un fichier ZIP avec le script de test ainsi que les fichiers journaux résultants.

Je vous laisse tirer vos propres conclusions !

PS ! Ma conclusion, est de combiner tous les tests avant de continuer. (i.e. tester le code de retour de "ArrayCopyRates", vérifier les codes d'erreur, tester la taille du tableau MqlRates et (par sécurité comme WHRoeder le suggère) tester aussi la validité de la date des éléments du tableau.

EDIT : Si j'avais utilisé uniquement le test "pair[0].time == 0", il aurait donné une erreur d'index de tableau (et causé l'arrêt de l'exécution) pendant les premières itérations de la première exécution quand aucune donnée n'était disponible. Par conséquent, je maintiens mon affirmation selon laquelle il faut vérifier le code de retour et la taille du tableau, mais j'admets que le test de temps peut offrir un niveau de vérification ultérieur une fois que les autres conditions ont été remplies.

Dossiers :
testacr.zip  217 kb
 
Il est étrange de constater qu'il n'y a pas eu un seul commentaire de la part du posteur original depuis le début de ce fil. Est-ce qu'il suit au moins ce sujet ?
 
FMIC:
  • Pendant les 73607 premières itérations (qui ont duré approximativement 516ms), le "ArrayCopyRates" a toujours retourné un compte de -1, et a généré une erreur 4073 (Error 4073 - No history data). La taille du tableau était toujours 0 pendant ces itérations.
  • Enfin, à la 73608ème itération, il a retourné un compte de 512 et la taille du tableau a été fixée à 512 également et le temps pour le 0ème élément avait un temps valide (et non 0) et aucune erreur n'a été générée.
C'est exactement le comportement opposé à celui de la version 600 pré-build.
C'est ce à quoi je m'attendais à l'origine, mais on m'a prouvé que j'avais tort.
Ils ont finalement eu raison et je vais le noter pour l'avenir.
 
FMIC:


EDIT : Si j'avais utilisé uniquement le test "pair[0].time == 0", il aurait donné une erreur d'index de tableau (et provoqué l'arrêt de l'exécution) pendant les premières itérations de la première exécution, alors qu'aucune donnée n'était disponible. Par conséquent, je maintiens mon affirmation selon laquelle il faut vérifier le code de retour et la taille du tableau, mais j'admets que le test de temps peut offrir un niveau de vérification ultérieur une fois que les autres conditions ont été remplies.


Tout ceci est très utile, merci pour les recherches et les résultats.

 
FMIC:
Il est étrange de constater qu'il n'y a pas eu un seul commentaire de la part du posteur original depuis le début de ce fil de discussion. Suit-il seulement ce sujet ?

Pourquoi devrait-il/elle suivre ce message, les messages suivants ont dépassé le niveau de compréhension de la plupart des gens sur ce forum.

Pourquoi ne pas essayer de répondre à la question de manière simple et précise ?

Maintenant, pour répondre à la question originale, juste au cas où il y aurait une petite chance que le posteur original soit toujours là, Google est votre ami.

 
4x_Gypsy:

Et si vous essayiez de répondre à la question de manière simple et précise ?

Nous avons répondu à la question qui était en substance :"Je veux choisir entre 1 et 10 devises différentes et 5 barres pour chaque devise."

Puisqu'il n'a pas fourni d'exemple de code, ou plus de détails, il n'était pas possible de donner une réponse simple et précise. Tout ce que nous pouvions faire était de fournir des réponses générales et une prise de conscience des problèmes auxquels il serait confronté. Nous lui avons répondu qu'il devrait utiliser"ArrayCopyRates()" ou utiliser les"iFunctions()" et qu'il devrait tenir compte du délai inhérent et des erreurs qu'il obtiendrait évidemment. Nous avons ensuite complété l'information en discutant des pièges et des problèmes, tels que l'absence de la fonction sleep dans les Indicateurs et les différents comportements entre les constructions pré-600 et post.

Si vous dites que tout cela lui passe au-dessus de la tête, tout ce qu'il avait à faire était de poster quelque chose du genre : "Désolé, je ne comprends pas ! Pouvez-vous me simplifier la tâche ?". Mais comme il n'y a jamais eu de tel message (ni aucun autre d'ailleurs), la discussion s'est poursuivie en pensant que lui et les autres étaient capables de la suivre.

Maintenant, comme vous l'avez écrit, il pourrait utiliser Google et trouver de nombreux indicateurs multi-temporels, mais s'il ne sait toujours pas COMMENT cela fonctionne, il n'ira pas très loin pour faire fonctionner son indicateur comme il le souhaite.

EDIT : PS ! NB ! Après y avoir repensé, WHRoeder a effectivement fourni un code squelette comme solution au problème. On ne peut pas faire plus simple et plus précis que cela, étant donné le manque de détails dans la question initiale.

 
FMIC:

Nous avons répondu à la question qui était en substance :" Je veux choisir ENTRE 1 et 10 devises différentes et 5 barres pour chaque devise."

Comme il n'a pas fourni d'exemple de code, ni de détails supplémentaires, il n'a pas été possible de donner une réponse simple et précise. Tout ce que nous pouvions faire était de fournir des réponses générales et une prise de conscience des problèmes auxquels il serait confronté. Nous lui avons répondu qu'il devrait utiliser"ArrayCopyRates()" ou utiliser les"iFunctions()" et qu'il devrait tenir compte du retard inhérent et des erreurs qu'il obtiendrait évidemment. Nous avons ensuite complété l'information en discutant des pièges et des problèmes, tels que l'absence de la fonction "sleep" dans les indicateurs et les différents comportements entre les constructions pré-600 et post.

Si vous dites que tout cela lui passe au-dessus de la tête, tout ce qu'il avait à faire était de poster quelque chose du genre : "Désolé, je ne comprends pas ! Pouvez-vous me simplifier la tâche ?". Mais comme il n'y a jamais eu de tel message (ni aucun autre d'ailleurs), la discussion s'est poursuivie en pensant que lui et les autres étaient capables de la suivre.

Maintenant, comme vous l'avez écrit, il pourrait utiliser Google et trouver de nombreux indicateurs multi-temporels, mais s'il ne sait toujours pas COMMENT cela fonctionne, il n'ira pas très loin pour faire fonctionner son indicateur comme il le souhaite.

EDIT : PS ! NB ! Après y avoir réfléchi à nouveau, WHRoeder a effectivement fourni un squelette de code comme solution au problème. On ne peut pas faire plus simple et plus précis que cela, étant donné le manque de détails dans la question originale.

La question était "Quelqu'un sait-il comment développer un indicateur multi-devises?".

La réponse évidente était "Oui, nous (FMIC et WHRoeder) le savons, regardez-nous en discuter", sans demander ni attendre de détails sur ce dont le PO a réellement besoin.

Ce qu'il/elle voulait faire avec cet indicateur était "Je veux choisir entre 1 et 10 devises différentes et 5 barres pour chaque devise".

Oui, des exemples ont été fournis. Mais ils ont été fournis plus comme un concours entre vous deux. Un débat intéressant ? Oui. J'ai appris quelque chose que je ne savais pas. L'exemple était-il fourni de manière à ce qu'un débutant puisse le comprendre ? Pas vraiment. Les gens viennent sur ce forum en raison du manque d'assistance et de didacticiels de MetaTrader. La plupart des gens qui postent ici ont une compréhension minimale de ce qu'ils souhaitent faire et lorsque la discussion va trop loin, ils s'éloignent. Ce qui est une honte absolue.

Le gros indice était "Mais je ne sais pas comment faire ça".

L'absence de toute réponse de la part du PO indique que quelque chose ne va pas. Je pense que le PO a été frustré par le manque de compréhension et a abandonné le fil. Il y a des années, j'ai fait la même chose. J'ai plus appris sur différents sites/forums que sur celui-ci parce que personne ne prenait le temps de réaliser à quel point j'étais nouveau et ne cessait de poster des exemples et d'avoir des discussions qui dépassaient complètement ma compréhension à ce moment-là.

Mais tout cela n'a plus d'importance depuis que l'OP a disparu.

Encore une fois, c'est une honte, qui sait, cette personne pourrait être ou devenir le prochain gourou dont ce forum et d'autres ont tant besoin.

 
4x_Gypsy:

Le gros indice était "Mais je ne sais pas comment faire ça.".

L'absence de toute réponse de la part du PO indique que quelque chose ne va pas. Je pense que le PO a été frustré par le manque de compréhension et a abandonné le fil. Il y a des années, j'ai fait la même chose. J'ai plus appris sur différents sites/forums que sur celui-ci parce que personne ne prenait le temps de réaliser à quel point j'étais nouveau et ne cessait de poster des exemples et d'avoir des discussions qui dépassaient complètement ma compréhension à ce moment-là.

De votre point de vue, vous avez peut-être raison, mais d'un autre côté, j'ai vu beaucoup de questions auxquelles on répondait simplement en jetant un coup d'œil rapide dans les documentations et j'ai vraiment l'impression d'être un imbécile en répondant à ce genre de questions encore et encore.

De plus, il y a Google et une option de recherche ici. Si je ne sais pas comment faire quelque chose, ce sera ma prochaine étape pour essayer de résoudre le problème par moi-même.

Venons-en maintenant au sujet de ce fil de discussion : "...comment développer un système multi-devises". Cela ressemble pour moi à "apprenez-moi à coder gratuitement", ce qui est assez proche de "pouvez-vous coder cela pour moi". Tout cela n'est pas très sérieux.

Comme il y a tellement de code disponible gratuitement, ma réponse aurait été la suivante : "Utilisez Google ou la recherche ici pour trouver du code gratuit et modifiez-le !"

Si les gens sont offensés par cela, je pense que c'est leur problème.