Services, nouvelles fonctionnalités dans l'architecture de MT5, les funérailles de MT4 ne sont pas loin. - page 8
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
de l'anglais.
données
alimentation
datafeed -- source de données (bien que le mot "source" ne soit pas tout à fait juste)
feeder -- feeder, feeder, feeder
О датафидах. Сколько встречал этот термин, сложилось ощущение, что этим словом обозначают источник данных (котировок). Буквально "заполнитель данных". Когда речь идет о собственных инструментах, понимаю так, что мы сможем вычислять котировки, например, никем не котируемого MXNRUB по известным курсам MXNUSD и USDRUB, выгруженным из терминала в .csv формат, и легализовать для терминала новые котировки, указав файл .csv как новый датафид. Возможно, будет реализовано и более изящное решение, без выгрузки в файлы, путем онлайновых операций */ над тиками (MXNRUB = MXNUSD * USDRUB). И это будет новый датафид.
Il n'y a pas de lien vers une discussion, un rapport de bogue ou autre chose de ce genre ? Ou juste le sentiment qu'il y en avait un, mais que vous ne l'avez pas vérifié maintenant ?
Autant que je me souvienne, les ticks collectés dans OnCalculate correspondaient à ceux demandés via CopyTix.
Maintenant, je l'ai vérifié exprès... comme je m'en doutais, j'ai reçu des conneries, mais pas celles que j'attendais :)
OnBookEvent() attrape les ticks avec le flag 0...
Et c'est ce que je m'attendais à voir :
Comme vous pouvez le voir, en demandant le dernier tick à chaque appel à OnCalculate() avec SymbolInfoTick() - il y a un saut dans certains des ticks que CopyTicks() renvoie.Code à vérifier :
Code à tester :
Je n'écrirais les ticks dans le fichier que lorsque OnCalculate est appelé, pour être sûr (pas pour tester OnBookEvent et CopyTicks, maisOnCalculate, comme prévu).
Et ensuite, le script aurait généré le même fichier, en récupérant les ticks via CopyTicks. La différence serait plus évidente, et indiquerait soit des ticks manqués dans OnCalculate, soit un travail incorrect de CopyTicks.
Pour être sûr (pas pour tester OnBookEvent et CopyTicks, mais OnCalculate, comme prévu), je laisserais seulement les ticks écrire dans le fichier lorsque OnCalculate est appelé.
Et ensuite, le script aurait généré le même fichier, en récupérant les ticks via CopyTicks. La différence serait beaucoup plus claire et indiquerait soit un saut de ticks dans OnCalculate, soit un travail incorrect de CopyTicks.
Avec un calcul aussi simple, je ne vois pas l'intérêt de s'embêter. Il y a une comparaison spécifique de deux appels : SymbolInfoTick() et CopyTicks(). Et tous les appels de SymbolInfoTick() sont clairement affichés. Et on peut clairement voir que CopyTicks() a retourné le tick, qui n'a pas été reçu dans l'appel SymbolInfoTick() de OnCalculate(). Et il peut y avoir deux raisons pour l'erreur ici : 1. Soit OnCalculate() manque un tick, soit 2. SymbolInfoTick() renvoie la mauvaise chose quelque part.
Oui, c'est une partie du journal, qui a été collecté pendant environ 30 secondes... alors imaginez le nombre de ticks manquants.
Notre dialogue avec le service d'assistance :
Regardez pour ne pas vous perdre: https://www.mql5.com/ru/forum/190129/page8#comment_5081300 et les 2 postes suivants.
CopyTicks de l'indicateur donne un tick que l'indicateur n'obtient pas dans OnCalculate (ni avant ni après).
OnCalculate est appelé à chaque tic.
Les ticks sont ajoutés à la base de données dans un fil séparé. C'est-à-dire de manière asynchrone. Ce n'est pas un fait qu'avec CopyTicks vous obtiendrez le même tick qui a appelé OnCalculate.
Il ne s'agit pas de ça.
Avec CopyTicks il est possible d'obtenir un tick, qui n'était pas dans OnCalculate (nous l'apprenons dans OnCalculate sur un tick, dont le temps est plus long que manqué).
Jetez un coup d'œil aux journaux.
C'est exactement ce dont nous parlons.
Un lot de tiques est arrivé. Deux threads commencent à traiter ce paquet - un thread dans la boucle exécute OnCalculate sur chaque tick du paquet ; un autre thread place le paquet entier dans une base de données de tick. Ces deux threads ne sont pas synchronisés entre eux de quelque manière que ce soit et on ne sait pas quel thread traitera un paquet de ticks plus rapidement.
Mais chaque tick du pack doit être traité par OnCalculate. Et ce n'est pas le cas.
Il n'y a pas de tic avec ce temps. Il y a une tique avec moins de temps, et une tique avec plus de temps. Et il n'y a pas d'appel OnCalculate entre les deux.
komposter
Mais chaque tick du paquet doit être traité par OnCalculate. Et ce n'est pas le cas.
Il n'y a pas de tic avec ce temps. Il y a une tique avec moins de temps, et une tique avec plus de temps. Et il n'y a pas d'appel de OnCalculate entre eux.
Chaque tick du paquet est traité à OnCalculate. Il n'y a pas de saut de puce. La boucle est écrite de cette façon.
Pour savoir quel tick est traité dans OnCalculate, utilisezSymbolInfoTick- tout est clair ici. Le tick est appliqué à l'information du symbole et ensuite tous les indicateurs de ce symbole sont appelés, le tout en une seule fois.
Veuillez consulter le journal en cliquant sur le lien.
SymbolInfoTick de OnCalculate ne voit pas le tick, qui peut être obtenu de CopyTicks.
C'est pourquoi j'ai écrit
Nous devons faire exactement ce que vous avez suggéré surhttps://www.mql5.com/ru/forum/190129/page8#comment_5082755.
Pour être sûr (pour tester OnCalculate au lieu de OnBookEvent et CopyTicks, comme prévu), je laisserais seulement l'écriture des ticks dans le fichier lorsque OnCalculate est appelé.
Et ensuite, le script aurait généré le même fichier, en récupérant les ticks via CopyTicks. La différence serait beaucoup plus claire et indiquerait soit un saut de ticks dans OnCalculate, soit un travail incorrect de CopyTicks.
Et c'est exactement de cette façon que nous avons vérifié à un moment donné l'exactitude de CopyTicks. Les scripts de test et les indicateurs sont laissés, nous allons les vérifier à nouveau.
Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading
Bugs, bugs, questions
fxsaber, 2017.02.07 13:41
SymbolInfoTick dans les indicateurs fonctionne assez différemment que dans les EAs.
Dans un indicateur, il renvoie toujours le tick qui était l'initiateur de l'appel OnCalculate. Et ces tics initiateurs dans l'indicateur ne doivent pas être ignorés - c'est l'idéologie des développeurs. Le problème réside dans la formation de la file d'attente de ces tics.
Dans le conseiller expert, le SymbolInfoTick dans OnTick ne renvoie pas le tick qui a initié l'appel de OnTick, mais fait une demande complète pour l'état actuel.
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie
Caractéristiques du langage mql5, subtilités et astuces
fxsaber, 2017.03.29 22:32
L'événement Calculate est généré sur CHAQUE tick. Il existe donc une file d'attente pour les indicateurs. S'il atteint un certain nombre, un avertissement dans le journal indique que l'indicateur est trop lent.
Les barres elles-mêmes sont des indicateurs par nature et sont générées par les Calculate-events. Par conséquent, si TF M1 et qu'il est 10:15:00.020 et qu'un paquet de 50ms arrive, le premier tick dans celui-ci a toujours le temps 10:14:59.970. Et tous les indicateurs sont appelés en premier sur cet événement Calculate - d'abord l'indicateur de séries chronologiques et ensuite les indicateurs personnalisés avec ces séries chronologiques. C'est-à-dire que dans cette disposition, la barre de 10:15 n'est pas encore formée comme la barre de zéro. Et la barre de zéro est à 10:14.
Ensuite, lorsque le pack commence à se dérouler via les événements Calculate, la barre de 10:15 apparaîtra également. Je pense l'avoir décrit en détail.
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie
Caractéristiques du langage mql5, subtilités et astuces
fxsaber, 2017.03.29 22:41
Par conséquent, il est tout à fait normal qu'un EA obtienne un tick d'une barre qui ne s'est pas encore formée. Mais c'est un point si subtil qu'il faut faire un effort pour le reproduire volontairement. En général, il est plus théorique que pratique.
Si nous sommes paranoïaques à propos de la vitesse, l'utilisation des indicateurs (et des barres, bien sûr) n'est pas une option. Tout est dans l'EA.
Notre dialogue avec le Service Desk :
Le Service Desk fait malheureusement partie de leur répertoire. Ils n'ont pas besoin d'ajouter un lien lorsqu'il s'agit de discuter. Mais pour donner un exemple concret, sur leurs doigts. Ce n'est pas de ça qu'il s'agit. Ils disent que SymbolInfoTick() renvoie le tick actuel à vérifier, et comme OnCalculate() traite chaque tick - il s'avère que la sortie devrait être de chaque tick. Et CopyTicks() nous dit le contraire. Eh bien... Et ils disent, ne regardez pas CopyTicks() :). Ils m'ont aussi expliqué à propos de deux fils, quand ils ont corrigé CopyTicks() à la fin de l'année. Seulement ce n'est pas le problème ici (bien que, peut-être en elle aussi, je ne sais pas).
Vous ne leur avez pas demandé ce qu'il en est des ticks avec le drapeau 0 lorsqu'ils sont reçus de OnBookEvent() ?