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
Prival:
Rarement, mais il y a des situations où les cotations d'un instrument se figent pendant une longue période (j'ai vu une telle situation avec le yen). Et si le conseiller expert se bloque sur cette paire, vous avez des problèmes si vous n'avez pas traduit tout le code dans OnTime().
Lizar:
Un tel événement peut être reçu à l'aide de TimeCuurent(), mais la question est de savoir ce qu'il faut en faire et comment le synchroniser.
Quel est le rapport entre TimeCuurent() et cela ?
L'aide indique :
Dans le gestionnaire OnTick(), cette fonction renvoie l'heure du tic-tac traité entrant. Dans d'autres cas (par exemple, dans les gestionnaires OnInit(), OnDeinit(), OnTimer(), etc.), il s'agit de l'heure d'arrivée de la dernière cotation pour n'importe quel symbole disponible dans la fenêtre "Market Watch", la même heure que celle indiquée dans le titre de cette fenêtre.
Le synopsis se lit comme suit :
Dans le gestionnaire OnTick(), cette fonction renvoie l'heure d'arrivée du tick en cours de traitement. Dans d'autres cas (par exemple, appel dans les gestionnaires OnInit(), OnDeinit(), OnTimer(), etc.), il s'agit de l'heure d'arrivée de la dernière cotation pour tout symbole disponible dans la fenêtre "Market Watch", la même heure qui est affichée dans l'en-tête de cette fenêtre.
Oui, c'est clair. Seulement si on le met dans OnTime on ne peut pas mettre à jour l'heure plus d'une fois par minute, et si on le met dans le courant OnTick() on risque de manquer des ticks sur certaines des paires (dans les mults).
Et ce qu'il faut faire dans le bloc de traitement est clair (pour les mults) - Nous obtenons une nouvelle valeur, la comparons avec celle existante et tirons des conclusions pour savoir s'il y a eu un nouveau tick ou non.
Mais dites-moi, pourquoi le faire dans l'Expert Advisor ?
Le synopsis se lit comme suit :
erreur. voici ce que dit l'aide https://www.mql5.com/fr/docs/basis/function/events
L'événement NewTick n'est généré que pour les conseillers experts lorsqu'un nouveau tick est reçu sur le symbole au graphique duquel le conseiller expert est attaché.
Encore une fois. Nous parlons d'un Expert Advisor qui est attaché à un symbole. Il est déclenché par l'événement
void OnTick() {}
Si vous êtes dans cette fonction et qu'il n'y a pas de ticks sur cette paire pendant plus d'une heure, vous ne pouvez rien faire dans l'heure qui suit. Jusqu'à présent, la seule solution est de le faire dans un timer, qui démarre indépendamment de l'arrivée de ticks sur l'instrument.
Mais si nous le plaçons dans OnTime, nous ne pouvons pas mettre à jour l'heure plus d'une fois par minute, et si nous le plaçons dans le OnTick() actuel, nous risquons de manquer des ticks sur certaines des paires (en mults).
Voici ce que dit l'aide https://www.mql5.com/fr/docs/basis/function/events.
Encore une fois. Nous parlons d'un Expert Advisor qui se bloque sur un symbole. Il est lancé par l'événement
void OnTick() {}
Si vous êtes dans cette fonction, et qu'il n'y a pas de ticks sur cette paire pendant plus d'une heure, vous ne pouvez rien faire dans l'heure qui suit. Jusqu'à présent, la seule solution est de le faire dans le timer, il est lancé indépendamment de l'arrivée de ticks sur l'instrument.
Oui, si nous agissons dans le cadre de ce https://www.mql5.com/fr/docs/basis/function/events, je suis d'accord que la meilleure option, comme nous le voyons actuellement, est OnTime. Mais cela nous évitera seulement de dépendre de l'arrivée des ticks. Et elle ne nous sauvera pas de la monotonie : pendant que nous traitons un signal pour un instrument, nous risquons de manquer ou de retarder le traitement d'autres instruments. C'est particulièrement vrai lorsque le "temps de traitement des ordres est de 2 à 7 secondes" + les requêtes.
Je me suis souvenu de TimeCuurent() parce que l'intérêt a commencé à parler de ticks en temps réel pour toutes les paires dans la revue de marché.
Article très intéressant. Merci d'avoir partagé tout cela.
Cependant, quelques remarques :
En parlant de cette fonction, vous dites :
If you call this prototype function from one place, then we have what we need. But if we want to use this function, for example, again in another place in the same calculation loop, it will always return false, which means that there is no bar. And this will not always be true. Static variable in this case imposes an artificial limit on the number of prototype function calls.
Vous avez remplacé une variable locale statique par une variable globale, ce qui revient au même et vous n'avez pas résolu votre problème.
Néanmoins, votre article a le mérite de pousser à la réflexion et d' offrir des idées intéressantes.
Bon article, merci pour le partage ! Tout cela est très utile !
Quoi qu'il en soit, j'ai pris votre fonction isNewBar et elle affiche le message suivant lors de la compilation :"possible loss of data due to type conversion".
J'ai donc changé les types de var de datetime à long de cette façon :
Maintenant, elle compile sans problème et semble fonctionner correctement. Je vous remercie de votre attention.