Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 106

 
Alain Verleyen:
Es funktioniert nicht, weil die globale Variable mit MT5 Tester emuliert wird. Sie verwenden auch TimeCurrent ().

Entschuldigung, verwechselt mit MT4. Funktioniert in MT4, aber nicht in MT5.

 
fxsaber:


Anmeldung


HH Gibt es eine einfachere Möglichkeit, die Ortszeit des PCs im Tester zu ermitteln?

Auf diese Weise ist es nicht rationell, Sie müssen nur einmal die Echtzeit ermitteln und dann die Differenz über GetTickCount oder GetMicrosecondCount berechnen

 
Alexey Navoykov:

Sie müssen die Echtzeit nur einmal abrufen und dann GetTickCount oder GetMicrosecondCount verwenden, um die Differenz zu berechnen.

Ja, ich stimme zu.

 
Und der Code?
 
Alexej Tarabanow:
Und der Code?
 
Alexey Navoykov:

Sie müssen die Echtzeit nur einmal abrufen und dann GetTickCount oder GetMicrosecondCount verwenden, um die Differenz zu berechnen.

Die Zeitdichte im Prüfgerät ist ganz anders. Es wird nicht funktionieren.

 
Alexej Tarabanow:
Und der Code?

Aktualisiert.

 
fxsaber:

Aktualisiert.

GetTickCount sollte Überlauf berücksichtigen
 
TheXpert:
GetTickCount sollte in der Lage sein, den Überlauf zu berücksichtigen

Wenn ein UINT von einem anderen UINT subtrahiert wird, ist das Ergebnis immer korrekt, auch wenn es einen Überlauf gibt.

Abbildung

void OnStart()
  {
//---
   uint first=UINT_MAX-5;
   uint second=first+100;
   PrintFormat("%u - %u = %u",second,first,second-first);
  }

Protokoll

2018.10.18 10:48:12.775 TestUint (EURUSD,M1)    94 - 4294967290 = 100
 
Slava:
Wenn Sie einen anderen UINT von UINT subtrahieren, wird das Ergebnis immer korrekt sein, auch im Falle eines Überlaufs.

Wahrscheinlich war es so gemeint, dass ein Durchlauf länger als ~50 Tage dauern kann (dann durchläuft GetTickCount einen vollen Zyklus). Aber das ist außerhalb des Bereichs der Praxis.