Sviluppatori.Formato orario nel terminale MT5 - pagina 5

 
avoitenko:


Per darlo, il tipo datetime dovrebbe diventare 10 byte, e la struttura MqlDateTime dovrebbe essere ringiovanita.

Wow, ti sei lasciato trasportare :)

lungo è sufficiente. È di 8 byte.


Nessuno sta parlando di strutture, tutto dovrebbe rimanere com'è ora.

 
avoitenko:

Ho letto il thread e ho capito che i millisecondi sono necessari solo per un interesse sportivo. Essere in grado di misurare il prezzo di una corsa di 100 metri con precisione ms.

Per dartelo, il tipo datetime dovrebbe diventare 10 byte, e la struttura MqlDateTime dovrebbe diventare grassa.

Aspetta MQL6, il timer dei millisecondi, la cronologia dei tick e altre cose appariranno lì. Ma non vedo il senso di aggiungerlo ora. IMHO.



Leggere e capire sono cose diverse.

Ma grazie per aver calcolato quanti byte MqlDateTime occuperà, influenzerà seriamente i miei 12 giga, ho già visto MT5 swap.

Sereyev ha detto quello che penso sia chiaro fin dall'inizio, ma ho dimenticato su quale forum mi trovo. I millisecondi non servono per la sincronizzazione con il server, ma per capire la sequenza degli eventi!

 

sergeev:

lungo è sufficiente. 8 byte.

Suggerisci ulteriori...

Come convertire il tuo lungo in tempo ed estrarre i millisecondi.

Questo richiederà strutture aggiuntive, tipi di dati e un paio di tre nuove funzioni per convertire lì e indietro.

Perché? quando c'è un datetime con un wrapper già pronto.

 
avoitenko:

Suggerisci ulteriori...

Come convertire il tuo lungo in tempo ed estrarre i millisecondi.

Questo richiederebbe strutture aggiuntive, tipi di dati e un paio di tre nuove funzioni per convertire avanti e indietro.

Perché? Quando c'è datetime con un wrapper già pronto.

Andrew, con tutto il rispetto, ma non hai pensato alla tua risposta.

Il tempo in millisecondi è il tempo in secondi moltiplicato per 1000 + il numero di quelli molto ms.

totale

Prendo il tempo in millisecondi e lo divido per 1000 per ottenere il nostro vecchio datetime preferito con tutte le sue capacità. PIÙ il resto della divisione - il numero di millisecondi.

Questo è tutto.

 

sergeev:

Prendo il tempo in millisecondi, lo divido per 1000 e ottengo il nostro vecchio datetime preferito con tutte le possibilità. PIÙ il resto della divisione è il numero di millisecondi.

Quindi, per conoscere il tempo, dovrò dividere qualcosa per qualcosa? E un errore di arrotondamento? C'è un modo per aggirare il problema senza dividere?

 
avoitenko:

Quindi devo dividere qualcosa per qualcosa per sapere l'ora? E l'errore di arrotondamento? C'è un modo per aggirare il problema senza dividere?

ma i numeri sono interi :)

Se non vuoi dividerlo, prendi solo le ultime tre cifre, sono i millisecondi.

 
sergeev:

Se non volete dividere, prendete solo le ultime tre cifre, che sono millisecondi.

Come posso prenderli senza dividerli? Convertire in una stringa e riconvertire i tre caratteri giusti in un intero? Questo non mi ispira.

E le operazioni supplementari per ottenere il resto della divisione, la moltiplicazione e altre operazioni per ottenere i millisecondi sono una specie di barbarie. IMHO. Dovrebbero, del resto, essere disponibili off-the-shelf.

Non mi chiedo questo, ma perché originariamente gli sviluppatori hanno scelto il formato UNIX per memorizzare il tempo, e non quello di cui stiamo parlando ora, cioè i millisecondi?

Devono sapere qualcosa.

 

Tipo di data:

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

Tutto quello che dovevi fare era renderlo così:

Il tipo datetime è progettato per memorizzare la data e l'ora come il numero di millisecondi trascorsi dal 01 gennaio 1970. Occupa 8 byte di memoria.

Cosa c'entra tutta questa divisione e altre sciocchezze? Il tempo può essere memorizzato in qualsiasi unità (anche in terzine). Può essere convertito in qualsiasi unità (anche ore/secondi terrestri), anche marziani. Questo non farà diminuire o aumentare la quantità di risorse computazionali spese per la conversione. La conversione è necessaria solo per la semplice comprensione da parte dell'uomo, non per una macchina.

Forse hanno deciso di risparmiare denaro e rendere più forte la compressione dei database storici. Cari sviluppatori, rispondete per amore della storia, perché hanno scelto i secondi? Penso che abbiano semplicemente considerato superflua una maggiore precisione, dato che ancora oggi non capiscono perché hanno bisogno di questi millisecondi.

 
papaklass:

Ci arriverò dall'altra parte.

1. Offerta = 1,30245 volume di 50 lotti. Questo livello dura 30 ms.

2. Offerta = 1,30244 volume 75 lotti. Questo livello dura 25 ms.

3. Offerta = 1,30243 volume 300 lotti. È esistito per 2 secondi.

Queste informazioni vi aiuteranno nel trading.

forse per i pipsizers sì ... ma dove è un tale broker che con zero ritardo entrerà nel mercato i vostri 50 lotti?

 
avoitenko:

Come posso prenderli senza dividerli? Convertire in una stringa e riconvertire i tre caratteri giusti in un numero intero? Questo non mi ispira.

Vi siete mai chiesti come il datetime viene convertito in una struttura? Non per divisione e resto?

o pensi che funzioni diversamente? http://msdn.microsoft.com/ru-RU/library/windows/desktop/ms724284%28v=vs.85%29.aspx

Dovrebbero essere facilmente disponibili, se è per questo.

bliiiiiin :) beh che tipo di ready-made? ti sono stati dati 8 byte - cos'altro hai bisogno dagli sviluppatori?

La cosa interessante non è questa, ma perché gli sviluppatori hanno scelto originariamente il formato UNIX per memorizzare il tempo e non quello di cui parliamo ora, cioè i millisecondi?

Sembra che continui a parlare di qualche tipo di formato temporale, ok, quali conosci?

Ne conosco personalmente 3.

- 4 byte - il numero di secondi dall'era unix 1970 al 2038 (INT)

- 8 byte - numero di 100 nanosecondi da 1601 a 30828 (FILETIME)

- 8 byte - numero di millisecondi da 1970 unix epoch a 2038 (INT64)

c'è anche una struttura di memorizzazione del tempo a 8 byte SYSTEMTIME, ma è derivata. ecc.


Quello che suggerisco è di dare quello che abbiamo già nel server MT - 8 byte dell'era unix.

cosa nascondere? :)

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