Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 95

 
Slawa:

Sind Sie sicher, dass Sie die ganze Frage gelesen haben?

...zwischen zwei Aufrufen von GetMicrosecondsCount...

Der erste Aufruf erfolgt vor der Synchronisierung, der zweite nach der Synchronisierung. Der Unterschied ist derselbe: die tatsächliche Anzahl der Mikrosekunden + Synchronisierungskorrektur.

 
Alexey Navoykov:

Genau das meine ich: Der erste Aufruf erfolgt vor der Synchronisierung, der zweite nach der Synchronisierung. Die Differenz ist gleich: die tatsächliche Anzahl der Mikrosekunden + die Synchronisierungskorrektur.

Wie hoch ist nun die Wahrscheinlichkeit einer Zeitkorrektur zwischen zwei Aufrufen von GetMicrofsecondsCount?

Wenn man wirklich Mikrosekunden misst, liegt die Wahrscheinlichkeit nahe bei 0.

Und Sie messen Mikrosekunden in Abständen von Sekunden oder mehr? Und warum? Spherocon im Vakuum?

 
Alexey Navoykov:

Sie irren sich, ich habe den Code hier ausdrücklich mit WinApi zitiert. Führen Sie ihn aus, ändern Sie dabei die Uhr, und sehen Sie sich das Ergebnis an.

Es ist nicht ganz klar, wie man mit Ihnen einen Dialog führen kann, wenn Ihre Argumente auf Vermutungen beruhen, und Sie es nicht einmal für nötig halten, sich mit dem Verlauf der Diskussion vertraut zu machen.

Sie sind derjenige, der keine Ahnung von dem Problem hat, das Sie aufgeworfen haben.

Wie ich schon sagte, wird eine unerwartete Zeitänderung Ihren Code zerstören, der unabhängig von den verwendeten Funktionen auf einer präzisen Zeitsteuerung beruht.
 
Slawa:

Wie hoch ist nun die Wahrscheinlichkeit einer Zeitkorrektur zwischen zwei Aufrufen von GetMicrofsecondsCount?

Wenn man wirklich Mikrosekunden misst, dann ist die Wahrscheinlichkeit fast 0.

Und Sie messen Mikrosekunden in Sekunden oder mehr? Und warum? Spherocon in einem Vakuum?

Wie ich schon sagte, hängt diese Wahrscheinlichkeit von der Synchronisationsperiode ab. Je kürzer sie ist, desto häufiger kommt es zu einer Verschiebung, d.h. desto höher ist die Wahrscheinlichkeit. Und auch vom Abstand zwischen benachbarten Messungen. Je länger sie ist, desto häufiger werden wir den Offset treffen. Die Wahrscheinlichkeit wird also auf der Grundlage dieser beiden Parameter berechnet, und nicht nur mit dem Finger am Himmel.

Und warum schreiben Sie gleichzeitig in Sekunden- und Millisekunden-Intervallen? Alles unter 16 ms kann zum Beispiel nur mit dieser Funktion gemessen werden. Und selbst 16-30 Millisekunden müssen mit dieser Funktion gemessen werden, sonst ist der Fehler zu groß.

Wenn Sie der Meinung sind, dass es sich dabei um Kleinigkeiten handelt, die man ignorieren kann, dann ist das Ihre persönliche Meinung. Früher haben wir hier über die Standard-Systemfunktion QueryPerformanceCounter gesprochen, die ohne jegliche Verschiebungen funktioniert. Sie muss aus einem bestimmten Grund erfunden worden sein. Und übrigens hat Renat sie hier aus irgendeinem Grund erklärt:

So zählen wir die Mikrosekunden.

In Wirklichkeit geht es aber nicht um den QueryPerformanceCounter.

 
Renat Fatkhullin:
Sie sind derjenige, der keine Ahnung von dem Problem hat, das Sie aufgeworfen haben.

Wie ich bereits sagte, wird eine unerwartete Zeitänderung den Code, der für eine genaue Zeitsteuerung erforderlich ist, unabhängig von den verwendeten Funktionen zerstören.

Es gibt keine Zeitänderung in QueryPerformanceCounter. Was meinen Sie? Haben Sie den Code ausgeführt, zu dem ich Ihnen den Link gegeben habe?

 

Nach der Überprüfung der MQL5-Codeausführungsmaschine stellte sich heraus, dass wir in GetMicrosecondCount ein hybrides Messschema hatten:

  • für Windows 8 und höher wurde die etwas schnellere Funktion GetSystemTimePreciseAsFileTime verwendet, abhängig von der Systemzeit
  • für andere Fälle: QueryPerformanceFrequency + QueryPerformanceCounter
  • in beiden Fällen erfüllte GetMicrosecondCount seine Funktion, Mikrosekunden vom Programmstart abzurufen

Dieser Code ist entstanden, weil versucht wurde, den System-Overhead für den Aufruf der Zeitmessung zu reduzieren. Einer der Entwickler hat es übertrieben.

Wir persönlich und Slava waren sicher, dass ein reiner QueryPerformanceCounter funktionierte. Und es gab einen solchen Kodex. Aber wir haben uns geirrt, denn es handelt sich um ein Hybridmodell.

Jetzt funktionieren nur noch QueryPerformanceFrequency + QueryPerformanceCounter.

Fazit: Ja, wir haben sowohl die Implementierung der Funktion GetMicrosecondCount als auch den Schutz ihres Verhaltens vermasselt.

Slawa und ich entschuldigen uns dafür!
 
Kommentare, die für dieses Thema nicht relevant sind, wurden nach "Bugs, Bugs, Issues" verschoben.
 
Renat Fatkhullin:

Eine Erinnerung an die Verwendung von expliziten oder impliziten"sollte"-Sätzen. Die Verwendung von "metaquotes should" anstelle von "please consider" ist jetzt inakzeptabel.

Bitte bedenken Sie, dass das Lesen zwischen den Zeilen in den meisten Fällen nichts mit dem zu tun hat, was der Gesprächspartner schreibt.

Tatsächliche Fehlerberichte mit Hilfe des Forums und das Aufspringen auf MQs sind unvereinbare Dinge. Es ist schwer, sich eine Person vorzustellen, die sich ständig in einen Hasser verwandelt und wieder zurück.

 
MT5 selbst misst lange Zeitintervalle überGetMicrosecondCount
IS      0       13:32:55.239    Trades  '11391209': accepted exchange buy 1.00 AFKS at market
DM      0       13:33:07.896    Trades  '11391209': deal #265475900 buy 1.00 AFKS at 9.095 done (based on order #284425784)
OD      0       13:33:07.898    Trades  '11391209': order #284425784 buy 1.00 / 1.00 AFKS at 9.095 done in 12757.608 ms
 

Freunde, könnt ihr mir sagen, wen ich um Rat fragen kann - ich möchte verstehen, wie man mit Preisunterschieden für dasselbe Produkt an verschiedenen Börsen arbeitet - ich bin neu in diesem Geschäft, ich möchte es verstehen. Ich wäre für jeden Rat dankbar - vielleicht sollte ich in einem anderen Thread schreiben?

Ich habe Zugang zu mehreren ausländischen Börsen, aber ich verstehe nicht, wie das alles funktioniert