[Erreur dans la récupération de l'heure du senior TF dans le chronomètre ! - page 4

 
Vitaly Gorbunov:
Je ne dirais pas que c'est une béquille. J'attends un flux de citations du serveur, sinon l'historique ne sera pas mis à jour. Une autre option consiste à prendre l'heure locale de l'ordinateur et à la corriger en fonction du fuseau horaire, ce qui peut être calculé automatiquement et, en fin de compte, attendre la mise à jour des citations. C'est un peu tordu mais je ne pense pas que Metakvotov va changer quoi que ce soit dans MT4. En fin de compte, c'est un problème de connexion au serveur qui doit être traité d'une manière ou d'une autre.

Voilà. Et vous vous êtes rendu compte que c'est un problème ! Mais, je pense que cela devrait être corrigé et/ou que l'aide devrait être complétée par un algorithme pour tous les cas.

La fonction d'extraction des données ne doit pas fournir des données gauches sans erreurs ni avertissements !

Ce n'est pas mon premier sujet (le précédent concernait MT5, je n'ai pas eu de réponse claire à ce sujet) sur la synchronisation et les blocages/erreurs qui en découlent.

 
Alexey Kozitsyn:

Oui, ça semble fonctionner. En option, il peut être utilisé. Merci ! Mais j'aimerais quand même que les fonctions fonctionnent correctement.

Cela ne fonctionnera que s'il n'y a pas de barres manquantes, ce qui ne peut être garanti. Supposons, par exemple, qu'il n'y ait pas de nouvelles cotations sur le serveur pour l'heure en cours (et peut-être aussi pour l'heure précédente). Par conséquent, la dernière barre est une barre précédente.

 
Ihor Herasko:

Il y a deux erreurs importantes dans votre approche de la vérification :

  1. Dans le OnInit() de l'indicateur vous ne pouvez pas obtenir les données correctes de n'importe quel TF, même celui en cours. Le OnInit() de l'indicateur au démarrage du terminal est exécuté presque dans une fenêtre vide (il se peut qu'il n'y ait même pas les données qui étaient au moment de l'arrêt du terminal). Même l'environnement du marché n'est souvent pas encore disponible. L'aide contient beaucoup d'avertissements sur ce qu'il ne faut pas faire dans OnInit(). Par conséquent, il n'y a pas grand-chose à inclure dans son code. En général, il s'agit d'une vérification des valeurs des paramètres définis, de la liaison des tampons indicateurs aux tableaux et de la création de classes, si de telles classes sont utilisées. Tout le reste doit être fait dans OnCalculate().
  2. Toutes ces vérifications ne peuvent être effectuées qu'après que OnCalculate ait été appelé au moins une fois.

Igor, avez-vous revu le code ? Où puis-je obtenir quelque chose dans OnInit() ?

2. Quels contrôles ? Où est-il écrit que l'indicateur doit utiliser OnCalculate() au moins une fois pour fonctionner correctement ?

 
Alexey Navoykov:

Cela ne fonctionnera que s'il n'y a pas de barres manquées, ce qui ne peut être garanti. Supposons qu'il n'y ait pas de nouvelles cotations sur le serveur pour l'heure en cours (et peut-être aussi pour l'heure précédente). Par conséquent, la dernière barre est une barre précédente.

Cette solution (comme je l'ai dit, une béquille) est de loin meilleure que rien. Comme je l'ai dit (et prouvé), il y a un bug. Le plus tôt les développeurs le répareront, le mieux ce sera.

 
Ainsi, il ne donne pas de fausses données, il donne les dernières données reçues et l'erreur ne se produira pas avant que le terminal ne commence à recevoir le flux de cotation. Dans votre cas, vous essayez de recevoir des données avant que les guillemets ne soient reçus, et le programmeur doit gérer lui-même ces situations exceptionnelles. Ainsi que les éventuels échecs de connexion. Quel est le problème avec MT5 ?
 
Alexey Navoykov:

Cela ne fonctionnera que s'il n'y a pas de barres manquées, ce qui ne peut être garanti. Supposons qu'il n'y ait pas de nouvelles cotations sur le serveur pour l'heure en cours (et peut-être aussi pour l'heure précédente). Par conséquent, la dernière barre est une barre précédente.

La méthode avec iBarShift permet d'identifier les écarts d'historique mais elle doit être vérifiée à certains intervalles. J'ai écrit pour moi-même une procédure qui s'en occupe, et après cela, j'ai oublié les lacunes des programmes MTF.
 
Vitaly Gorbunov:
Il ne donne donc pas de données restantes, il donne les dernières données reçues et l'erreur ne se produira pas tant que le terminal ne commencera pas à recevoir un flux de citations. Dans votre cas, vous essayez de recevoir des données avant le début des cotations. Ainsi que les éventuels échecs de connexion. Quel est le problème avec MT5 ?

Oh, mec... Nous avons déjà dépassé cette étape du démantèlement. Voir votre propre journal :

2018.09.21 15:02:42.910 Custom indicator test XAUUSD,H1: removed
2018.09.21 15:15:27.985 test XAUUSD,H1: initialized
2018.09.21 15:15:29.520 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.552 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.589 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.605 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.636 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.667 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.705 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.736 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.768 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.805 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.837 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.868 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.906 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.937 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.969 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.006 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.038 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.069 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.106 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.138 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.169 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:31.880 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #4066
2018.09.21 15:15:31.900 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:31.940 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:31.990 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.010 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.074 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.100 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.120 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.174 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0

Séquence. Tout d'abord, nous vérifions la connexion. Une fois la connexion établie, nous obtenons l'heure. Expliquez-moi, s'il vous plaît, pourquoi l'erreur 4066 est renvoyée en premier et ensuite elle n'est pas renvoyée ! Qu'est-ce qui a changé en 20ms depuis le dernier appel ?

 
Vitaly Gorbunov:
Quel est le problème avec MT5 là très intéressant à lire ?

https://www.mql5.com/ru/forum/219829

Клинч в индикаторах mql5.
Клинч в индикаторах mql5.
  • 2017.11.15
  • www.mql5.com
Недавно столкнулся с одной крайне неприятной проблемой...
 
Alexey Kozitsyn:

Cette solution (comme je l'ai dit, une béquille) est de loin meilleure que rien. Comme je l'ai dit (et prouvé), il y a un bug. Le plus tôt les développeurs le répareront, le mieux ce sera.

Eh bien, si nous parlons de la meilleure béquille, nous devrions vérifier non seulement l'heure actuelle, mais aussi toutes les heures précédentes depuis la dernière barre connue. Sinon, vous serez bloqué sur cette vérification, s'il n'y a pas de cotations pour l'heure actuelle.
 
Alexey Kozitsyn:

Oh, mec... Nous avons déjà dépassé cette étape du démantèlement. Voir votre propre journal :

Séquence. Tout d'abord, nous vérifions la connexion. Une fois la connexion établie, nous obtenons l'heure. Expliquez-moi, s'il vous plaît, pourquoi l'erreur 4066 est renvoyée en premier et ensuite elle n'est pas renvoyée ! Qu'est-ce qui a changé en 20ms depuis le dernier appel ?

Les données sont chargées erreur 4066 alors il est un bug metakvotovtsev très probablement reçu des données est traitée pour cette situation une erreur n'est pas inventé. Et jusqu'à ce point, tout est logique.