Développeurs. format de l'heure dans le terminal MT5 - page 5

 
avoitenko:


Pour le donner, le type datetime devrait devenir 10 octets, et la structure MqlDateTime devrait être rajeunie.

Wow, tu t'es laissé emporter :)

longtemps est suffisant. Il s'agit de 8 octets.


Personne ne parle de structures du tout. Tout doit rester comme c'est maintenant.

 
avoitenko:

J'ai lu le fil de discussion et j'ai réalisé que les millisecondes ne sont nécessaires que pour un intérêt sportif. Être capable de mesurer le prix d'une course de 100 m avec une précision de ms.

Pour vous le donner, le type datetime devrait devenir 10 octets, et la structure MqlDateTime devrait devenir grosse.

Attendez MQL6, la minuterie en millisecondes, l'historique des tics et d'autres choses y apparaîtront. Mais je ne vois pas l'intérêt de l'ajouter maintenant. IMHO.



Lire et comprendre sont des choses différentes.

Mais merci de calculer combien d'octets MqlDateTime occupera, cela affectera sérieusement mes 12 gigas, j'ai déjà vu MT5 swap.

Sereyev a dit ce que je pense être clair depuis le début mais j'ai oublié sur quel forum je suis. Les millisecondes ne servent pas à la synchronisation avec le serveur, mais à la compréhension de la séquence des événements !

 

sergeev:

longtemps est suffisant. 8 octets.

Suggérer plus loin...

Comment convertir votre long en temps et extraire les millisecondes.

Cela nécessitera des structures et des types de données supplémentaires, ainsi que deux ou trois nouvelles fonctions pour effectuer la conversion aller-retour.

Pourquoi ? quand il y a une date avec une enveloppe prête à l'emploi.

 
avoitenko:

Suggérer plus loin...

Comment convertir votre long en temps et extraire les millisecondes.

Cela nécessiterait des structures et des types de données supplémentaires, ainsi que deux ou trois nouvelles fonctions à convertir dans les deux sens.

Pourquoi ? quand il y a datetime avec une enveloppe toute prête.

Andrew, avec tout le respect que je te dois, mais tu n'as pas réfléchi à ta réponse.

Le temps en millisecondes est le temps en secondes multiplié par 1000 + le nombre de ces très ms.

total

Je prends le temps en millisecondes et le divise par 1000 pour obtenir notre bonne vieille datetime préférée avec toutes ses possibilités. PLUS le reste de la division - le nombre de millisecondes.

C'est tout.

 

sergeev:

Je prends le temps en millisecondes, je divise par 1000 et j'obtiens notre bonne vieille date favorite avec toutes les possibilités. PLUS le reste de la division est le nombre de millisecondes.

Donc, pour connaître l'heure, je vais devoir diviser quelque chose par quelque chose ? Et une erreur d'arrondi ? Y a-t-il un moyen de contourner le problème sans recourir à la division ?

 
avoitenko:

Donc je dois diviser quelque chose par quelque chose pour connaître l'heure ? Qu'en est-il de l'erreur d'arrondi ? Y a-t-il un moyen de contourner le problème sans recourir à la division ?

mais les chiffres sont des entiers :)

Si vous ne voulez pas le diviser, prenez simplement les trois derniers chiffres, ce sont des millisecondes.

 
sergeev:

Si vous ne voulez pas diviser, prenez simplement les trois derniers chiffres, qui sont des millisecondes.

Comment les prendre sans les diviser ? Convertir en une chaîne de caractères et reconvertir les trois caractères de droite en un nombre entier ? Ça ne m'inspire pas.

Et les opérations supplémentaires consistant à obtenir le reste de la division, de la multiplication et d'autres opérations pour obtenir des millisecondes est une sorte de sauvagerie. IMHO. Ils devraient, d'ailleurs, être disponibles sur étagère.

Je ne me demande pas cela, mais pourquoi, à l'origine, les développeurs ont choisi le format UNIX pour stocker le temps, et non celui dont nous parlons maintenant, c'est-à-dire les millisecondes ?

Ils doivent savoir quelque chose.

 

Type de date:

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

Tout ce que tu avais à faire était de le rendre comme ça :

Le type datetime est conçu pour stocker la date et l'heure sous la forme du nombre de millisecondes écoulées depuis le 01 janvier 1970. Il occupe 8 octets de mémoire.

Qu'est-ce que toutes ces divisions et autres absurdités ont à voir avec ça ? Le temps peut être stocké dans n'importe quelle unité (même en tertes). Et il peut être converti au moins en heures/secondes terrestres, au moins en martiennes. La quantité de ressources informatiques consacrées à la conversion ne sera ni plus ni moins importante. La conversion n'est nécessaire que pour une compréhension simple par l'Homme, pas par une machine.

Peut-être ont-ils décidé d'économiser de l'argent et de renforcer la compression des bases de données historiques. Chers développeurs, répondez pour l'histoire, pourquoi ont-ils choisi les secondes ? Je pense qu'ils ont simplement considéré qu'une plus grande précision n'était pas nécessaire, car même aujourd'hui ils ne comprennent pas pourquoi ils ont besoin de ces millisecondes.

 
papaklass:

Je vais voir ça de l'autre côté.

1. offre = 1.30245 volume de 50 lots. Ce niveau dure 30 ms.

2. offre = 1.30244 volume 75 lots. Ce niveau dure 25 ms.

3. offre = 1.30243 volume 300 lots. Il a existé pendant 2 secondes.

Ces informations vous aideront dans vos transactions.

peut-être pour les pipsizers oui ... mais où est un tel courtier qui avec un délai zéro va entrer dans le marché vos 50 lots ?

 
avoitenko:

Comment les prendre sans les diviser ? Convertir en une chaîne de caractères et reconvertir les trois caractères de droite en un nombre entier ? Ça ne m'inspire pas.

Vous êtes-vous déjà demandé comment une date est convertie en structure ? Pas par division et reste ?

ou pensez-vous que cela fonctionne différemment ? http://msdn.microsoft.com/ru-RU/library/windows/desktop/ms724284%28v=vs.85%29.aspx

Ils devraient être facilement disponibles, d'ailleurs.

bliiiiiin :) quel genre de prêt-à-porter ? on vous a donné 8 octets - qu'avez-vous besoin d'autre de la part des développeurs ?

Ce qui est intéressant, ce n'est pas cela, mais pourquoi les développeurs ont-ils choisi à l'origine le format UNIX pour stocker le temps et non celui dont nous parlons maintenant, c'est-à-dire les millisecondes ?

Vous semblez toujours parler d'une sorte de format temporel. OK. Lesquels connaissez-vous ?

J'en connais personnellement 3.

- 4 octets - le nombre de secondes de l'ère unix 1970 à 2038 (INT)

- 8 octets - nombre de 100 nanosecondes de 1601 à 30828 (FILETIME)

- 8 byte - nombre de millisecondes de l'époque unix 1970 à 2038 (INT64)

il existe également une structure de stockage du temps de 8 octets SYSTEMTIME, mais elle est dérivée. etc.


Ce que je suggère, c'est de donner ce que nous avons déjà dans le serveur MT - 8 octets de l'ère unix.

que cacher ? :)

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...