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

 
Je l'ai fait plusieurs fois maintenant, cependant. C'est drôle, mais ça ne marche pas toujours. Parfois, la connexion ne s'établit pas à temps.
J'ai une bonne connexion de mon côté. C'est peut-être la raison.
 
Mais ce n'est pas ce que j'ai remarqué avec ce test. Même en fonctionnant maintenant avec le comptage des passes, j'obtiens 10 passes par OnCalculate, même aujourd'hui. Il s'avère que la meilleure option pour vous semble être de faire un petit délai lorsque l'indicateur démarre.
 
Konstantin Nikitin:
Mais j'ai remarqué quelque chose de différent avec ce test. Même en fonctionnant maintenant avec le comptage des passes, j'obtiens 10 passes par OnCalculate. Il s'avère que la meilleure option pour vous est de faire un petit retard au début de l'indicateur.

Il n'y a pas besoin d'une solution de béquille, je le répète. Le comportement actuel ne me convient pas, les conseils donnés par les développeurs eux-mêmes ne fonctionnent pas. Laisser des choses comme ça se faire toutes seules n'apportera rien de bon. Un problème a été détecté, il doit être résolu par les développeurs.

 
Alexey Kozitsyn:

Il n'y a pas besoin d'une solution de béquille, je le répète. Le comportement actuel ne me convient pas, les conseils donnés par les développeurs eux-mêmes ne fonctionnent pas. Laisser des choses comme ça se faire toutes seules n'apportera rien de bon. Un problème est découvert, il doit être résolu par les développeurs.

J'ai décrit ce que j'ai vu. Vous devez réfléchir à la manière de le réparer. Je veux dire, ce n'est pas bon du tout d'avoir un suivi du premier passage, etc...

 
Konstantin Nikitin:

J'ai décrit ce que j'ai vu. Je dois réfléchir à la façon de gérer ça. C'est-à-dire qu'il n'est pas bon en aucune façon d'obtenir le suivi du premier passage, etc.

Je pense qu'il faut un mécanisme testé dans ces endroits "minces", fonctionnant correctement avec des numéros d'erreur (en frappant à chaque demande), ou une sorte de contrôle supplémentaire dans les fonctions d'accès à l'historique (à savoir intégré, afin de ne pas chercher de tels problèmes pendant des heures). Et ce mécanisme doit être décrit en détail dans la documentation. Alors il n'y aura pas de questions aux développeurs. Mais comment c'est maintenant ? Dans la documentation, rien sur l'accès aux données des anciennes TF, donc les développeurs eux-mêmes ne savent pas comment obtenir les données. Il y a seulement quelques liens vers des forums des années barbus où ils ont le même raisonnement.

 
Si vous connaissez la différence avec le serveur en heures. Vous pouvez utiliser une comparaison entre l'horloge locale actuelle et l'heure d'ouverture de la dernière barre d'heures. TimeCurrent ne convient pas car l'heure peut ne pas être mise à jour.
Quelque chose comme ça
     MqlDateTime mqlDateTime;
     TimeToStruct( (TimeLocal()-60*3), mqlDateTime );
     mqlDateTime.min = 0;
     mqlDateTime.sec = 0;
     
     if( IsConnected() )
          Comment( TimeToString( iTime(Symbol(), PERIOD_H1, 0) ), "\n", TimeToString( StructToTime(mqlDateTime) ) );
 
Alexey Kozitsyn:

Vous n'avez pas répondu à votre question sur la version terminale, d'ailleurs.

terminal 1121 et 1090

Alexey Kozitsyn:

La communication avec le serveur est établie. Lors de la demande de données senior TF, si les données ne sont pas prêtes - erreur ou retour 0. Si les données sont prêtes - retourner UNIQUEMENT les données réelles. C'est tout. Si les données ne sont pas prêtes pendant un long moment - laissez-le retourner une erreur ou 0.

Il n'y a pas d'erreur ici. Il existe une connexion et des données historiques.
Les données qui se trouvent déjà dans le terminal sont affichées immédiatement.
Les nouvelles données sont accompagnées d'un délai, car il est nécessaire d'envoyer une demande au courtier et de le charger si quelque chose manque.

Dès que de nouvelles données apparaissent, un tick est immédiatement généré (même maintenant, lorsque le marché est fermé).
Il vous suffit de vérifier l'apparition d'une nouvelle barre et de modifier vous-même vos variables.

ps. il n'y a pas de drapeau pour la pertinence des données dans mt4.

 
Taras Slobodyanik:

terminal 1121 et 1090

Il n'y a pas d'erreur ici. Il y a une connexion et les données historiques sont présentes.
Les données qui se trouvent déjà dans le terminal sont affichées immédiatement.
Les nouvelles données arrivent avec un certain retard car une demande doit être envoyée au courtier et téléchargée si quelque chose manque.

Dès que de nouvelles données apparaissent, un tick est immédiatement généré (même maintenant, lorsque le marché est fermé).
Il vous suffit de vérifier l'apparition d'une nouvelle barre et de modifier vous-même vos variables.

ps. il n'y a pas de drapeau de mise à jour des données dans mt4.

Comme je l'ai dit, je vais devoir réessayer sur le terminal mis à jour.

Je suis catégoriquement en désaccord avec le comportement qui ne peut être contrôlé. La fonction renvoie des données incorrectes sans erreur - c'est faux. Vous rencontrerez une telle situation et devinerez quel est le problème.

Disons qu'au début, la fonction a renvoyé une erreur. Ils sont libérés. Lors de la requête suivante, la fonction n'a pas renvoyé l'erreur et a renvoyé des données "incorrectes". Est-ce que ça va ?

 

Qu'entendez-vous par données incorrectes ?

S'ils ne sont pas là, ou s'il n'y a pas de connexion, ou quoi que ce soit, alors oui, il y a une erreur.
Et il n'y a rien à compter.

Lorsque toutes les données sont correctes, tout est normal et tout fonctionne.

Votre indicateur ne suit pas la mise à jour des données.
Les nouvelles barres viennent du courtier et vous ne les vérifiez pas.
J'ai ajouté quelques lignes pour montrer que lorsque vous le vérifiez, tout est correct.

C'est une situation de travail pour vérifier un nouveau bar.

 
Taras Slobodyanik:

Qu'entendez-vous par données incorrectes ?

Et regardez mon tout premier message. Voyez-vous l'erreur 4066 ? Ensuite, l'erreur 0 et le retour de données incorrectes. Pourquoi la fonction (SeriesInfoInteger() dans ce cas) ne vérifie-t-elle pas la pertinence avant d'envoyer les données ? Pourquoi ne met-il pas le drapeau d'erreur ? Vous voyez, je préfère attendre un peu plus longtemps pour que les contrôles internes passent plutôt que de chercher des erreurs plus tard.

Mais après cela, on m'a donné beaucoup de conseils, avec lesquels je n'ai jamais obtenu de résultat. Et il s'est avéré que ce n'était même pas à propos de la minuterie.

Raison: