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

 
Alexey Kozitsyn:

Essayez vous-même. Démarrez l'indicateur, éteignez le terminal et rallumez-le lorsque la nouvelle heure arrive.

Donc si vous obtenez TimeCurrent

Renvoie la dernière heure connue du serveur, l'heure d'arrivée de la dernière cotation par l'un des symboles sélectionnés dans Market Watch.

C'est exact.
 
Konstantin Nikitin:

Donc si vous obtenez TimeCurrent

Renvoie la dernière heure connue du serveur, l'heure d'arrivée de la dernière cotation pour l'un des symboles sélectionnés dans Market Watch.

C'est vrai.

Pouvez-vous me dire où se trouve l'appel TimeCurrent dans ce code ?

 
Alexey Kozitsyn:

Pouvez-vous me dire où dans ce code l'appel à TimeCurrent est effectué ?

L'heure d'ouverture du bar est donc toujours la même qu'avant la fermeture du terminal. Une nouvelle barre est formée et l'heure est mise à jour. Quel est le problème ?

 
Konstantin Nikitin:

L'heure d'ouverture du bar est la même que celle que nous avons reçue avant la fermeture du terminal. Une nouvelle barre est formée et l'heure est mise à jour. Quel est le problème ?

Le problème, c'est que le terminal s'éteint lorsque la dernière barre horaire du graphique est à 22 heures. Il est éteint à 22h45, par exemple. S'allume à 23:01 - demande de temps pour la dernière heure après que la connexion au serveur ait été établie et après la pré-demande à OnInit() sans aucun timer - c'est toujours 22 heures. C'est normal, tu crois ?

 

Vérifiez le temps des bougies, pas le calcul des barres.
C'est ainsi qu'il sera mis à jour correctement (coché).

//--- Проверяем первый запуск индикатора
   if(prev_calculated<=0 || 
      _weekOpenTime!=iTime(_Symbol,PERIOD_W1,0)+SEC_PER_DAY ||
      _dayOpenTime!=iTime(_Symbol,PERIOD_D1,0) ||
      _hourOpenTime!=iTime(_Symbol,PERIOD_H1,0) )
     {
     
      _weekOpenTime= 0;
      _dayOpenTime = 0;
      _hourOpenTime= 0;
        
      //--- Проверяем, записано ли время открытия текущей недели
      if(!CheckCurrentWeekOpenTime())                              // Если время не записано
         return(0);                                                // Выходим
      //--- Проверяем, записано ли время открытия текущего дня
      if(!CheckCurrentDayOpenTime())                              // Если время не записано
         return(0);                                                // Выходим
      //--- Проверяем, записано ли время открытия текущего часа
      if(!CheckCurrentHourOpenTime())                              // Если время не записано
         return(0);                                                // Выходим
      //--- Устанавливаем флаг соединения с сервером для запуска таймера
      _isConnected=true;
      //---
      Print(__FUNCTION__,": Данные старших ТФ загружены!");
     }
 
Si je comprends bien, le terminal donne pour la première fois les dernières données qu'il a dans l'historique, puis elles sont téléchargées depuis le serveur.
 
Taras Slobodyanik:

Vérifiez le temps des chandeliers, pas le calcul des barres.
C'est ainsi qu'il sera mis à jour correctement (coché).

De quel type de calcul de barre parlons-nous ?

Je vais vérifier votre variante, mais en fait vous avez juste ajouté une requête de données "idle" dans OnCalculate() et c'est tout. Et par logique, il n'arrivera même pas à la requête "idle", car prev_calculated <= 0 sera déjà exécuté et le premier bloc d'exécution sera exécuté.

De toute façon, c'est une béquille, il ne doit pas y avoir de telles situations dans la langue. La connexion est établie, la fonction d'acquisition de données est vérifiée pour détecter les erreurs et l'exactitude des données obtenues. Mais au final, qu'est-ce qu'on obtient ? Les données sont toujours fausses.

En fait, si nous voulons être sûrs, nous pouvons simplement demander l'heure actuelle dans l'inite et ensuite demander l'heure actuelle dans OnCalculate() et les comparer jusqu'à ce qu'elles soient différentes. Mais c'est la même béquille et ça ne devrait pas être le cas.

 
Alexey Kozitsyn:

Le problème, c'est que le terminal s'éteint lorsque la dernière barre horaire du graphique est à 22 heures. Il est éteint à 22h45, par exemple. S'allume à 23:01 - demande de temps pour la dernière heure après que la connexion au serveur ait été établie et après la pré-demande à OnInit() sans aucun timer - c'est toujours 22 heures. Est-ce normal selon vous ?

L'heure de clôture de la dernière barre sera TimeCurrent (c'est-à-dire actuelle). Cela semble être ce dont vous avez besoin, à en juger par votre question.

 
Taras Slobodyanik:
Si je comprends bien, le terminal, pour la première fois, sort les dernières données qu'il a dans l'historique, puis le chargement depuis le serveur se produit.

Question ! Pourquoi les données précédentes sont-elles affichées alors que la connexion au serveur a déjà été établie ? Il y avait une pré-requête de données dans OnInit(), une vérification du chargement des données dans chacune des fonctions CheckCurren...(). Combien de contrôles sanglants dois-je faire pour que tout fonctionne correctement...

 
Konstantin Nikitin:

L'heure de clôture de la dernière barre sera TimeCurrent, ce dont vous semblez avoir besoin d'après votre question.

Quelle heure de fermeture ? J'ai besoin d'une heure d'ouverture...

Raison: