[SERVICE DESK] Fehler beim Abrufen der Zeit der älteren TF im Timer! - Seite 10

 
Alexey Kozitsyn:

Versuchen Sie es selbst. Schalten Sie den Indikator ein, schalten Sie das Terminal aus und schalten Sie es wieder ein, wenn die neue Stunde angebrochen ist.

Wenn Sie also TimeCurrent erhalten

Gibt die letzte bekannte Serverzeit zurück, die Ankunftszeit der letzten Notierung durch eines der in Market Watch ausgewählten Symbole.

Das ist richtig.
 
Konstantin Nikitin:

Wenn Sie also TimeCurrent erhalten

Liefert die letzte bekannte Serverzeit, also die Ankunftszeit des letzten Kurses für eines der in Market Watch ausgewählten Symbole.

Das ist richtig.

Können Sie mir sagen, wo in diesem Code der TimeCurrent-Aufruf ist?

 
Alexey Kozitsyn:

Können Sie mir sagen, wo in diesem Code der TimeCurrent-Aufruf gemacht wird?

Die Öffnungszeit der Bar ist also immer noch dieselbe wie vor der Schließung des Terminals. Es wird ein neuer Balken gebildet und die Uhrzeit wird aktualisiert. Was ist das Problem?

 
Konstantin Nikitin:

Die Uhrzeit der Baröffnung ist die gleiche wie die, die wir vor der Schließung des Terminals erhalten haben. Es wird ein neuer Balken gebildet und die Uhrzeit wird aktualisiert. Was ist das Problem?

Das Terminal schaltet sich aus, wenn der letzte Stundenbalken auf dem Diagramm 22:00 Uhr ist. Sie wird zum Beispiel um 22:45 Uhr ausgeschaltet. Schaltet sich um 23:01 Uhr ein - Zeitabfrage für die letzte Stunde nach dem Aufbau der Verbindung zum Server und nach der Vorabanfrage an OnInit() ohne Zeitgeber - es sind immer noch 22 Stunden. Ist das normal, was meinen Sie?

 

Überprüfen Sie die Kerzenzeit, nicht die Berechnung der Balken.
Auf diese Weise wird sie korrekt aktualisiert (überprüft).

//--- Проверяем первый запуск индикатора
   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__,": Данные старших ТФ загружены!");
     }
 
So wie ich es verstehe, gibt das Terminal beim ersten Mal die letzten Daten an, die es in der Historie hat, und dann werden sie vom Server heruntergeladen.
 
Taras Slobodyanik:

Prüfen Sie die Candlestick-Zeit, nicht die Berechnung der Balken.
Auf diese Weise wird sie korrekt aktualisiert (überprüft).

Um welche Art von Balkenberechnung handelt es sich?

Ich werde Ihre Variante überprüfen, aber eigentlich haben Sie nur eine "Leerlauf"-Datenanforderung in OnCalculate() eingefügt und das ist alles. Und nach der Logik wird es nicht einmal zur "Leerlauf"-Anforderung kommen, weil prev_calculated <= 0 bereits ausgeführt wird und der erste Laufblock ausgeführt wird.

Wie auch immer, das ist eine Krücke, solche Situationen darf es in der Sprache nicht geben. Die Verbindung wird hergestellt, die Funktion der Datenerfassung wird auf Fehler und Korrektheit der gewonnenen Daten überprüft. Aber was bekommen wir am Ende? Die Daten sind immer noch falsch.

Wenn wir sichergehen wollen, können wir einfach die aktuelle Zeit in der Inite und dann die aktuelle Zeit in OnCalculate() abfragen und beide vergleichen, bis sie unterschiedlich sind. Aber das ist die gleiche Krücke und sollte nicht der Fall sein.

 
Alexey Kozitsyn:

Das Terminal schaltet sich aus, wenn der letzte Stundenbalken auf dem Diagramm 22:00 Uhr ist. Sie wird zum Beispiel um 22:45 Uhr ausgeschaltet. Schaltet sich um 23:01 Uhr ein - Zeitabfrage für die letzte Stunde nach dem Aufbau der Verbindung zum Server und nach der Vorabanfrage an OnInit() ohne Zeitgeber - es sind immer noch 22 Stunden. Ist das Ihrer Meinung nach normal?

Die Schlusszeit des letzten Balkens ist TimeCurrent (d.h. aktuell) und scheint das zu sein, was Sie brauchen, wenn man von Ihrer Frage ausgeht.

 
Taras Slobodyanik:
So wie ich es verstehe, gibt das Terminal zum ersten Mal die letzten Daten aus, die es in der Historie hat, und dann wird vom Server geladen.

Frage! Warum werden frühere Daten ausgegeben, nachdem die Verbindung zum Server bereits hergestellt wurde? Es gab eine Vorababfrage nach Daten in OnInit(), eine Prüfung auf Laden von Daten in jedem der CheckCurren...() Funktionen. Wie viele verdammte Überprüfungen muss ich durchführen, damit alles richtig funktioniert...

 
Konstantin Nikitin:

Die Schlusszeit des letzten Balkens ist TimeCurrent (d.h. die aktuelle Zeit), was Ihrer Frage nach zu urteilen genau das Richtige zu sein scheint.

Wann ist Feierabend? Ich brauche eine Öffnungszeit...

Grund der Beschwerde: