Entwickler: Zeitformat im MT5-Terminal - Seite 5

 
avoitenko:


Dazu sollte der Datetime-Typ auf 10 Bytes erweitert und die MqlDateTime-Struktur verjüngt werden.

Wow, du hast dich hinreißen lassen :)

lang ist genug. Es sind 8 Bytes.


Niemand spricht von Strukturen, alles soll so bleiben, wie es jetzt ist.

 
avoitenko:

Ich habe den Thread gelesen und festgestellt, dass Millisekunden nur für ein sportliches Interesse erforderlich sind. Den Preis eines 100-m-Laufs mit ms-Genauigkeit messen zu können.

Um es Ihnen zu geben, sollte datetime Typ 10 Bytes werden, und MqlDateTime Struktur sollte fett werden.

Warten Sie auf MQL6, der Millisekunden-Timer, die Tick-Historie und andere Dinge werden dort erscheinen. Aber ich sehe keinen Grund, sie jetzt hinzuzufügen. IMHO.



Lesen und Verstehen sind zwei verschiedene Dinge.

Aber danke für die Berechnung, wie viele Bytes MqlDateTime belegen wird, wird es ernsthaft meine 12 Gig beeinflussen, ich habe bereits MT5 Swap gesehen.

Sereyev sagte, was ich denke, ist klar, von Anfang an, aber ich habe vergessen, welches Forum ich bin auf. Millisekunden dienen nicht der Synchronisation mit dem Server, sondern dem Verständnis der Abfolge von Ereignissen!

 

sergeev:

lang ist genug. 8 Bytes.

Weiter vorschlagen...

Konvertierung von long in time und Extraktion von Millisekunden.

Dies erfordert zusätzliche Strukturen, Datentypen und drei neue Funktionen für die Konvertierung dorthin und zurück.

Warum? Wenn es eine Datetime mit einem fertigen Wrapper gibt.

 
avoitenko:

Weiter vorschlagen...

Konvertierung von long in time und Extraktion von Millisekunden.

Dies würde zusätzliche Strukturen, Datentypen und drei neue Funktionen für die Konvertierung in die eine oder andere Richtung erfordern.

Warum, wenn es datetime mit einem vorgefertigten Wrapper gibt?

Andrew, bei allem Respekt, aber Sie haben nicht über Ihre Antwort nachgedacht.

Die Zeit in Millisekunden ist die Zeit in Sekunden multipliziert mit 1000 + die Anzahl dieser Millisekunden.

insgesamt

Ich nehme die Zeit in Millisekunden und teile sie durch 1000, um unseren alten Favoriten datetime mit all seinen Möglichkeiten zu erhalten. PLUS den Rest der Division - die Anzahl der Millisekunden.

Das war's.

 

sergeev:

Ich nehme die Zeit in Millisekunden, teile sie durch 1000 und erhalte unser altes Lieblingsdatum mit allen Möglichkeiten. PLUS der Rest der Division ist die Anzahl der Millisekunden.

Um die Zeit zu erfahren, muss ich also etwas durch etwas dividieren? Und ein Rundungsfehler? Gibt es eine Möglichkeit, dies zu umgehen, ohne zu teilen?

 
avoitenko:

Ich muss also etwas durch etwas dividieren, um die Zeit zu erfahren? Wie sieht es mit Rundungsfehlern aus? Gibt es eine Möglichkeit, dies zu umgehen, ohne zu teilen?

aber die Zahlen sind ganze Zahlen :)

Wenn Sie sie nicht teilen wollen, nehmen Sie einfach die letzten drei Ziffern, das sind Millisekunden.

 
sergeev:

Wenn Sie nicht dividieren wollen, nehmen Sie einfach die letzten drei Ziffern, die Millisekunden sind.

Wie kann ich sie nehmen, ohne sie zu teilen? In eine Zeichenkette konvertieren und die rechten drei Zeichen zurück in eine ganze Zahl konvertieren? Das inspiriert mich nicht.

Und zusätzliche Operationen, um den Rest von Division, Multiplikation und anderen Operationen zu erhalten, um Millisekunden zu erhalten, ist eine Art Wildheit. IMHO. Sie sollten im Übrigen von der Stange erhältlich sein.

Ich frage mich nicht das, sondern warum die Entwickler ursprünglich das UNIX-Format für die Speicherung der Zeit gewählt haben und nicht das, von dem wir jetzt sprechen, d.h. Millisekunden?

Sie müssen etwas wissen.

 

Typ Datetime:

Тип datetime предназначен для хранения даты и времени в виде количества секунд, прошедших с 01 января 1970 года. Занимает в памяти 8 байт.

Du musstest es nur so machen:

Der Datentyp datetime dient dazu, das Datum und die Uhrzeit als die Anzahl der seit dem 01. Januar 1970 verstrichenen Millisekunden zu speichern. Er benötigt 8 Bytes Speicherplatz.

Was hat diese ganze Spaltung und der andere Unsinn damit zu tun? Die Zeit kann in jeder beliebigen Einheit (auch in Tausendstel) gespeichert werden. Sie kann in jede beliebige Einheit (auch irdische Stunden/Sekunden) umgerechnet werden, sogar in die des Mars. Dadurch wird die Menge der für die Umwandlung aufgewendeten Rechenressourcen nicht kleiner oder größer. Eine Umwandlung ist nur für das einfache Verständnis durch den Menschen erforderlich, nicht durch eine Maschine.

Vielleicht haben sie beschlossen, Geld zu sparen und die Kompression der historischen Datenbanken zu verstärken. Liebe Entwickler, beantworten Sie der Geschichte zuliebe, warum sie sich für Sekunden entschieden haben. Ich glaube, sie hielten eine höhere Genauigkeit einfach für unnötig, denn sie verstehen bis heute nicht, warum sie diese Millisekunden brauchen.

 
papaklass:

Ich werde die Sache von der anderen Seite her angehen.

1 Gebot = 1,30245 Volumen von 50 Losen. Diese Stufe dauert 30 ms.

2) Gebot = 1,30244 Volumen 75 Lose. Diese Stufe dauert 25 ms.

3 Gebot = 1,30243 Volumen 300 Lose. Er existierte für 2 Sekunden.

Diese Informationen werden Ihnen beim Handel helfen.

vielleicht für pipsizers ja ... aber wo ist so ein Makler, der mit Null-Verzögerung wird in den Markt Ihre 50 Lose geben?

 
avoitenko:

Wie kann ich sie nehmen, ohne sie zu teilen? In eine Zeichenkette konvertieren und die rechten drei Zeichen zurück in eine ganze Zahl konvertieren? Das inspiriert mich nicht.

Haben Sie sich jemals gefragt, wie datetime in eine Struktur umgewandelt wird? Nicht durch Division und Rest?

oder denken Sie, dass es anders funktioniert? http://msdn.microsoft.com/ru-RU/library/windows/desktop/ms724284%28v=vs.85%29.aspx

Sie sollten im Übrigen leicht verfügbar sein.

bliiiiiin :) was für ein Fertigprodukt? Sie haben 8 Bytes bekommen - was brauchen Sie noch von den Entwicklern?

Das Interessante ist nicht das, sondern warum die Entwickler ursprünglich das UNIX-Format für die Speicherung der Zeit gewählt haben und nicht das, von dem wir jetzt sprechen, nämlich Millisekunden.

Sie scheinen ständig von irgendwelchen Zeitformaten zu sprechen. OK. Welche kennen Sie?

Ich kenne persönlich 3.

- 4 Bytes - die Anzahl der Sekunden von der Unix-Ära von 1970 bis 2038 (INT)

- 8 Byte - Anzahl der 100 Nanosekunden von 1601 bis 30828 (FILETIME)

- 8 Byte - Anzahl der Millisekunden von der Unix-Epoche 1970 bis 2038 (INT64)

Es gibt auch eine 8-Byte-Zeitspeicherstruktur SYSTEMTIME, die jedoch abgeleitet ist. usw.


Ich schlage vor, dass wir das verwenden, was wir bereits im MT-Server haben - 8 Bytes aus der Unix-Ära.

was zu verstecken? :)

FILETIME structure (Windows)
  • msdn.microsoft.com
Contains a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (UTC). Syntax Members dwLowDateTime The low-order part of the file time. dwHighDateTime The high-order part of the file time. Remarks To convert a FILETIME structure into a time that is easy to display to a user, use the FileTimeToSystemTime...