Bugs et suggestions pour améliorer CopyTicks() et CopyTicksRange() après la build 1485. - page 3

 
MetaQuotes Software Corp.:
Merci pour le message, le bogue a été corrigé - il fonctionnera désormais aussi dans les indicateurs. Une mise à jour sera publiée prochainement.
Veuillez me dire si la vitesse d'obtention des ticks via CopyTicksRange() sera augmentée ?
 
Build 1491 - la documentation sur les langues dans ME n'a pas été mise à jour. Les informations sur CopyTicksRange() ne sont disponibles que sur le site web !
 
Dans le testeur, les ticks du "pack" (ayant le même temps msec) à ce moment (build 1495) sont donnés un par un. Et le testeur calcule chacun d'eux séparément. En réalité, cela ne peut être le cas.
 

Je pense que je suis venu au bon endroit. Chers membres du forum, j'ai longtemps lutté seul contre ce problème, mais je ne parviens pas à le résoudre. J'espère que vous pourrez m'aider.

La situation est la suivante : courtier Finam (Whotrades), compte MMA. Je travaille avec 26 titres russes, c'est-à-dire que j'ai 26 fenêtres ouvertes et j'ai une copie de mon Expert Advisor accrochée dans chaque fenêtre. Ils utilisent la bibliothèque commune C++, qui dispose d'une fenêtre commune pour gérer et afficher les informations de débogage.

Certains paramètres de la stratégie dépendent directement de la bande de ticks, il est donc très important que tous les ticks passent par l'algorithme. Bien sûr, ce fut une surprise d'apprendre que OnTick() ne fonctionne pas à chaque tick, et pas toujours, même sur un tick. Par conséquent, j'en suis venu à la nécessité d'utiliser les fonctions CopyTicks et CopyTicksRange par minuterie. Grâce à de grands efforts (et ce n'est écrit nulle part), j'ai découvert que datetime*1000 est exactement le nombre de millisecondes depuis 1970, mais ce n'est pas le sujet.
Le résultat final de ce que nous avons maintenant est un bloc de code, qui, onTimer, depuis 10AM commence à demander les dernières données de tick.

Le problème est que, pour une raison importante, le premier jour après le redémarrage de metatrader, pour certains titres, les données tick ne commencent à arriver qu'à 11 heures (à peu près), le jour suivant - tout est normal, cela commence à 10 heures. La liste de ces titres n'est en aucun cas figée, certains titres peuvent ne pas donner de ticks le premier jour, d'autres le lendemain.
Je pensais que le problème était de mettre en cache les ticks. Je pensais qu'il s'agissait d'un problème de mauvais timing, mais cela s'est avéré ne pas être le cas. De plus, il semble que si CopyTicks(Range) ne pouvait pas renvoyer les données, il pourrait renvoyer une erreur (-1) et tout aurait un sens. Mais il renvoie 0, le tableau est également zéro et GetLastError renvoie ERR_SUCCESS. C'est-à-dire que c'est comme si ces tics n'existaient pas, ce qui est étrange car ils sont présents dans le ruban de la fenêtre.

Je suis perdu. J'espère que vous pourrez me dire ce qu'il faut faire, ou du moins la direction à prendre.

Si vous devez fournir le code, je vais, avec le prochain commentaire, le nettoyer des commandes "supplémentaires" et le poster.

Merci !

 
antru:

Oui, un code est souhaitable. S'agit-il d'un compte réel ou de démonstration ? Quelle est la construction du terminal ?

Honnêtement, je ne sais pas si quelqu'un ici travaille avec votre courtier. Si personne ici ne réagit à votre message - écrivez à ServiceDesk, vous pouvez créer un lien direct vers votre message. Ils devront également fournir un code.

 
antru:
Vous feriez mieux d'aller directement au bureau de service avec le code pour le lire.
 
Alexey Kozitsyn:

Oui, un code est souhaitable. S'agit-il d'un compte réel ou de démonstration ? Quelle est la construction du terminal ?

Honnêtement, je ne sais pas si quelqu'un ici travaille avec votre courtier. Si personne ici ne réagit à votre message - écrivez à ServiceDesk, vous pouvez créer un lien direct vers votre message. Ils devront également fournir un code.

Le compte est réel, dernière version, 1525. Je pense que voici ce qu'il faut faire. Créez le code de prise de tic-tac nu sans l'algorithme de la stratégie. Exécutez-le. Si cela ne fonctionne pas, vous devez appeler le service d'assistance. Si cela fonctionne, il faut peut-être chercher les erreurs dans son propre code.

Merci d'avoir mentionné le service d'assistance, je ne savais pas que c'était possible. J'ai regardé sur le site de metaquotes, tous les contacts sont des numéros de téléphone à Chypre et en Chine, pas un seul email.

 
Andrey Khatimlianskii:
Il vaut mieux aller directement au service d'assistance avec le code pour le lire.
Merci !
 
antru:

Le compte est réel, la construction est la plus récente, 1525. Je pense que c'est ce que nous devrions faire. Faites un code de prise de tic-tac nu sans l'algorithme de stratégie. Exécutez-le. Si cela ne fonctionne pas, apportez-le au bureau de service. Si cela fonctionne, il faut peut-être chercher les erreurs dans son propre code.

Merci d'avoir mentionné le service d'assistance, je ne savais pas que c'était possible. J'ai regardé sur le site de metaquotes, tous les contacts sont des numéros de téléphone à Chypre et en Chine, pas un seul email.

Ce dont vous avez besoin, votre stratégie, dans ce cas, ne fera que vous empêcher d'identifier le problème. Ce qui est nécessaire est un code de la façon dont vous demandez les tics.
 
antru:

Je pense que je suis venu au bon endroit. Chers membres du forum, j'ai longtemps lutté seul contre ce problème, mais je ne parviens pas à le résoudre. J'espère que vous pourrez m'aider.

La situation est la suivante : courtier Finam (Whotrades), compte MMA. Je travaille avec 26 titres russes, c'est-à-dire que j'ai 26 fenêtres ouvertes et j'ai une copie de mon Expert Advisor accrochée dans chaque fenêtre. Ils utilisent la bibliothèque commune C++, qui dispose d'une fenêtre commune pour gérer et afficher les informations de débogage.

Certains paramètres de la stratégie dépendent directement de la bande de ticks, il est donc très important que tous les ticks passent par l'algorithme. Bien sûr, ce fut une surprise d'apprendre que OnTick() ne fonctionne pas à chaque tick, et pas toujours, même sur un tick. Par conséquent, j'en suis venu à la nécessité d'utiliser les fonctions CopyTicks et CopyTicksRange par minuterie. Grâce à de grands efforts (ce n'est écrit nulle part), j'ai découvert que datetime*1000 est exactement le nombre de millisecondes depuis 1970, mais ce n'est pas le sujet.
Le résultat final de ce que nous avons maintenant est un bloc de code, qui, onTimer, depuis 10AM commence à demander les dernières données de tick.

Le problème est que, pour une raison importante, le premier jour après le redémarrage de metatrader, pour certains titres, les données tick ne commencent à arriver qu'à 11 heures (à peu près), le jour suivant - tout est normal, cela commence à 10 heures. La liste de ces titres n'est en aucun cas fixe, dans certains cas les ticks du premier jour peuvent ne pas arriver pour certains titres, dans d'autres - pour d'autres.
Je pensais que le problème était de mettre en cache les ticks. Je pensais qu'il s'agissait d'un problème de mauvais timing, mais cela s'est avéré ne pas être le cas. De plus, il semble que si CopyTicks(Range) ne pouvait pas renvoyer les données, il pourrait renvoyer une erreur (-1) et tout aurait un sens. Mais il renvoie 0, le tableau est également zéro et GetLastError renvoie ERR_SUCCESS. C'est-à-dire que c'est comme si ces tics n'existaient pas, ce qui est étrange car ils sont présents dans le ruban de la fenêtre.

Je suis perdu. J'espère que vous pourrez me dire ce qu'il faut faire, ou du moins la direction à prendre.

Si vous devez fournir le code, je vais, avec le prochain commentaire, le nettoyer des commandes "supplémentaires" et le poster.

Merci !

Essayez d'utiliser toutes les méthodes possibles pour obtenir les ticks et OnTisk et CopyTicks, puis comparez les résultats et utilisez la plus adéquate.
Raison: