Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 74

 
Vitaly Muzichenko:

Wie kann ich herausfinden, ob es keine Kurse gibt, weil es ein freier Tag ist, oder ob es am Donnerstag keine Kurse gibt, weil der Server im Handelsraum eingefroren ist?

Es ist möglich, anhand der Ortszeit festzustellen, dass es sich um einen freien Tag handelt.

Und die GMTOffset-Berechnung sollte nur in OnTick durchgeführt werden. Solange das Häkchen nicht gesetzt ist, sollten Sie die Serverzeit nicht in Berechnungen verwenden. In den meisten Fällen ist dies wirklich nicht erforderlich.

Als letztes Mittel, wenn GMTOffset am Wochenende benötigt wurde, geben Sie dem Benutzer eine Nachricht und fordern Sie vielleicht GMTOffset-Server von ihm an.

 
Der GMTOffset für Devisensymbole kann durch die Schluss-/Eröffnungszeit der Handelswoche bestimmt werden. Immerhin ist die Ortszeit dieses Ereignisses bekannt.
 
Ihor Herasko:

Die Tatsache, dass der Tag frei ist, kann durch die Ortszeit bestimmt werden.

Aber die Berechnung des GMTOffset des Servers sollte nur bei OnTick erfolgen. Solange das Häkchen nicht gesetzt ist, wird die Serverzeit nicht in die Berechnungen einbezogen. In den meisten Fällen ist dies wirklich nicht erforderlich.

Als letzte Möglichkeit, wenn GMTOffset an einem Wochenende benötigt wird, geben Sie eine Nachricht an den Benutzer aus und fordern Sie eventuell einen Server-GMTOffset von ihm an.

fxsaber:
Der GMTOffset für Devisensymbole kann durch die Schluss-/Eröffnungszeit der Handelswoche bestimmt werden. Immerhin ist die Ortszeit dieses Ereignisses bekannt.

Wir kennen die Serverzeit am Samstag und Sonntag nicht, wir kennen nur die Ankunftszeit des letzten Angebots. Wir wissen auch nicht, in welcher Zeitzone der Server arbeitet.

Wir brauchen wirklich eine Funktion, die die aktuelle Zeit des Servers anzeigt, so etwas wie: TimeServer(); dann wissen wir immer, dass die Serverzeit größer ist als die Zeit des letzten Zitats, das bedeutet, dass es entweder ein freier Tag ist, oder er hängt. GMTOffset rettet uns nicht.

P.S. Die Frage bezieht sich nicht nur auf Devisensymbole.
 
Vitaly Muzichenko:

An Samstagen und Sonntagen kennen wir die Uhrzeit des Servers nicht, sondern nur die Ankunftszeit des letzten Angebots. Wir wissen auch nicht, in welcher Zeitzone der Server arbeitet.

Für Forex ist das Problem, wie ich oben sagte, gelöst.

 
Vitaly Muzichenko:

Wir kennen die Serverzeit am Samstag und Sonntag nicht

Dafür, dass Sie die Ortszeit kennen.

Wir kennen nur die Ankunftszeit des letzten Angebots. Wir wissen auch nicht, in welcher Zeitzone sich der Server befindet.

Wir brauchen wirklich eine Funktion, die die aktuelle Serverzeit anzeigt, so etwas wie TimeServer(); dann wüssten wir immer, ob die Serverzeit höher ist als die Zeit des letzten Zitats, was bedeutet, dass der Server entweder ausgeschaltet ist oder sich aufgehängt hat. GMTOffset rettet uns nicht.

Wenn wir die Ortszeit kennen, brauchen wir nicht einmal zu raten. Wir verwenden es, um zu entscheiden, ob es ein Wochenende ist oder nicht. Und wenn wir den GMTOffset des Servers kennen, haben wir die Möglichkeit, die Serverzeit zu berechnen. Ich behaupte nicht, dass die Funktion TimeServer() nützlich wäre. Aber auch ohne sie können wir jetzt mit ihr auskommen.

 
Ihor Herasko:

Die Ortszeit ist bekannt.

Wenn Sie die Ortszeit kennen, brauchen Sie nicht einmal zu raten. Er wird verwendet, um festzustellen, ob es sich um einen freien Tag handelt oder nicht. Und wenn man den GMTOffset des Servers kennt, kann man einfach die Serverzeit berechnen. Ich behaupte nicht, dass die Funktion TimeServer() nützlich wäre. Aber auch ohne sie können Sie jetzt damit durchkommen.

Es liegt nicht an der Serverzeit.

Документация по MQL5: Дата и время / TimeGMTOffset
Документация по MQL5: Дата и время / TimeGMTOffset
  • www.mql5.com
Возвращает текущую разницу между временем GMT и локальным временем компьютера в секундах с учетом перехода на зимнее или летнее время. Зависит от настроек времени на компьютере пользователя.
 
Vitaly Muzichenko:

Es ist keine Serverzeit.

Ich spreche von TimeLocal(). Natürlich brauchen wir auch TimeGMTOffset. Wenn es Ticks gibt, können wir den ServerGMTOffset leicht berechnen. Wenn der EA mindestens einen echten Tick empfangen hat, kann er TimeLocal() verwenden, um die aktuelle Serverzeit zu berechnen.

Das Problem tritt auf, wenn der EA gestartet wurde, ohne dass der Tick eingetroffen ist. In diesem Fall müssen wir feststellen, ob es das Wochenende ist. Wenn es sich um ein Wochenende handelt, müssen alle Berechnungen, die sich auf die reale Serverzeit beziehen, bis zum Ende des Wochenendes verschoben werden. Wenn es notwendig ist, Berechnungen während des Wochenendes durchzuführen, bitten wir den Benutzer, ServerGMTOffset anzugeben. Rufen Sie diese Daten ab und verwenden Sie TimeLocal() und TimeGMTOffset(), um die aktuelle Serverzeit zu ermitteln.

 
Ihor Herasko:

Ich spreche von TimeLocal(). Natürlich brauchen wir auch TimeGMTOffset. Wenn es Zecken gibt, haben wir kein Problem mit der Berechnung von ServerGMTOffset. Wenn der EA mindestens einen echten Tick empfangen hat, kann er TimeLocal() verwenden, um die aktuelle Serverzeit zu berechnen.

Das Problem tritt auf, wenn der EA gestartet wurde, ohne dass der Tick eingetroffen ist. In diesem Fall müssen wir feststellen, ob es das Wochenende ist. Wenn es sich um ein Wochenende handelt, müssen alle Berechnungen, die sich auf die reale Serverzeit beziehen, bis zum Ende des Wochenendes verschoben werden. Wenn es notwendig ist, Berechnungen während des Wochenendes durchzuführen, bitten Sie den Benutzer, ServerGMTOffset anzugeben. Wenn wir diese Daten erhalten und TimeLocal() und TimeGMTOffset() verwenden, erhalten wir die aktuelle Serverzeit.

Ganz genau. Hängen Sie den Expert Advisor zum Zeitpunkt des "No Ticks" an den Chart. Das kann alles Mögliche sein, sogar ein Wochenende.

Die Zeit des letzten Ticks liegt 15 Minuten zurück (der EA weiß das nicht, und wir auch nicht), aber zu welcher Zeit läuft der Server? Ist es wirklich 15 Minuten her, oder vielleicht 1h.15m, oder 3h.15m?

 
Vitaly Muzichenko:

Ganz genau. Hängen Sie den EA während der "no ticks"-Periode an den Chart. Das kann alles Mögliche sein, sogar ein Wochenende.

Die Zeit des letzten Ticks ist 15 Minuten her (der EA weiß das nicht, und wir auch nicht), aber welche Zeit verwendet der Server? Ist es wirklich 15 Minuten her, oder sind es vielleicht 1h.15m oder 3h.15m?

Vitaly, die Zeitzonen unterscheiden sich um mindestens 1 Stunde voneinander. Genauer gesagt, ist es ein Vielfaches von 1 Stunde. Wenn der Unterschied mehr als eine Stunde beträgt, bedeutet dies, dass etwas passiert ist.

Konkret ist es möglich, die Differenz zwischen lokaler Zeit und Serverzeit in OnInit zu empfangen und sie mit der aktuellen Differenz zu vergleichen. Im Allgemeinen sind die Optionen für Fans gedacht.

 
Alexey Viktorov:

Vitaly, die Zeitzonen unterscheiden sich um mindestens 1 Stunde. Genauer gesagt, ist es ein Vielfaches von 1 Stunde. Wenn also die Differenz mehr als 1 Stunde beträgt, bedeutet dies, dass etwas passiert ist.

Konkret ist es möglich, die Differenz zwischen lokaler Zeit und Serverzeit in OnInit zu empfangen und sie mit der aktuellen Differenz zu vergleichen. Im Allgemeinen sind die Optionen für den Amateur.

Ich habe den EA am Samstag auf den Chart gesetzt, aber der EA kann die Zeit des letzten Ticks erhalten, zum Beispiel ist es 23:58 in Market Watch und meine Ortszeit ist 04:45. Die Serverzeit ist mir nicht bekannt.

Meine Frage ist: Wie viel Zeit ist zwischen dem letzten Tick und der Serverzeit (Terminalzeit) vergangen?