Desenvolvedores.Formato do tempo no terminal MT5 - página 5

 
avoitenko:


Para o dar, o tipo de data/hora deve tornar-se 10 bytes, e a estrutura MqlDateTime deve ser rejuvenescida.

Uau, deixou-se levar :)

longo é suficiente. São 8 bytes.


Ninguém está a falar de estruturas. Tudo deve ficar como está agora.

 
avoitenko:

Li o fio e percebi que só são necessários milissegundos para um interesse desportivo. Para poder medir o preço de uma corrida de 100m com ms de precisão.

Para lho dar, o tipo de data/hora deve tornar-se 10 bytes, e a estrutura MqlDateTime deve tornar-se gorda.

Esperar pelo MQL6, o temporizador de milissegundos, o histórico de carraças e outras coisas aparecerão lá. Mas não vejo a utilidade de o acrescentar agora. IMHO.



A leitura e a compreensão são coisas diferentes.

Mas obrigado por calcular quantos bytes MqlDateTime irão ocupar, isso irá afectar seriamente os meus 12 gig, já vi o MT5 trocar.

Sereyev disse o que eu penso ser claro desde o início, mas esqueci-me em que fórum estou. Millisegundos não são para sincronizar com o servidor, mas para compreender a sequência de eventos !

 

sergeev:

longo é suficiente. 8 bytes.

Sugerir mais...

Como converter o seu longo ao tempo e extrair milissegundos.

Isto exigirá estruturas adicionais, tipos de dados e um par de três novas funções para converter ali e para trás.

Porquê? quando há uma data com um invólucro já pronto.

 
avoitenko:

Sugerir mais...

Como converter o seu longo tempo em tempo e extrair milissegundos.

Isto exigiria estruturas adicionais, tipos de dados e um par de três novas funções para converter para a frente e para trás.

Porquê? Quando há uma data com um invólucro já pronto.

Andrew, com todo o respeito, mas ainda não pensou na sua resposta.

Tempo em milissegundos é tempo em segundos multiplicado por 1000 + o número desses mesmos ms.

total

Levo o tempo em milissegundos e divido-o por 1000 para conseguir a nossa antiga data favorita com todas as suas capacidades. MAIS o resto da divisão - o número de milissegundos.

É isso mesmo.

 

sergeev:

Demoro o tempo em milissegundos, divido por 1000. Recebo a nossa antiga data favorita com todas as possibilidades. MAIS o resto da divisão é o número de milissegundos.

Então, para saber o tempo, terei de dividir algo por algo? E um erro de arredondamento? Haverá alguma forma de contornar a situação sem divisão?

 
avoitenko:

Então tenho de dividir algo por algo para saber o tempo? E quanto ao erro de arredondamento? Haverá alguma forma de contornar a situação sem divisão?

mas os números são números inteiros :)

Se não o quiser dividir, basta tirar os últimos três dígitos, ou seja, milissegundos.

 
sergeev:

Se não quiser dividir, basta pegar nos últimos três dígitos, que são milissegundos.

Como é que os tomo sem os dividir? Converter para uma corda e converter os três caracteres certos de volta para um inteiro? Isso não me inspira.

E operações adicionais de obter o resto da divisão, multiplicação e outras operações para obter milissegundos é algum tipo de selvajaria. IMHO. Deveriam, por isso, estar disponíveis fora da prateleira.

Não me pergunto isso, mas porque é que originalmente os criadores escolheram o formato UNIX para armazenar o tempo, e não aquele de que estamos a falar agora, ou seja, milissegundos?

Eles devem saber alguma coisa.

 

Tipo de data e hora:

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

Tudo o que tinha de fazer era torná-lo assim:

O tipo de data e hora é concebido para armazenar a data e a hora à medida que o número de milissegundos decorreu desde 01 de Janeiro de 1970. Ocupa 8 bytes de memória.

O que é que toda esta divisão e outros disparates têm a ver com isto? O tempo pode ser armazenado em qualquer unidade (mesmo em tertes). Pode ser convertido em qualquer unidade (mesmo horas/segundos terrestres), mesmo marcianos. Isto não fará com que a quantidade de recursos computacionais gastos na conversão seja menor ou maior. A conversão só é necessária para uma simples compreensão pelo Homem, não por uma máquina.

Talvez tenham decidido poupar dinheiro e tornar mais forte a compressão das bases de dados históricos. Caros programadores, respondam pelo bem da história, porque escolheram eles os segundos? Penso que simplesmente consideraram desnecessária uma maior precisão, pois mesmo agora não compreendem porque precisam destes milissegundos.

 
papaklass:

Vou a isso do outro lado.

1. licitação = 1,30245 volume de 50 lotes. Este nível tem a duração de 30 ms.

2. licitação = 1,30244 volume 75 lotes. Este nível tem uma duração de 25 ms.

3. licitação = 1,30243 volume 300 lotes. Existiu durante 2 segundos.

Estas informações ajudá-lo-ão no comércio.

talvez para os pipsizers sim ... mas onde está tal corretor que com zero atraso entrará no mercado os seus 50 lotes?

 
avoitenko:

Como é que os tomo sem os dividir? Converter para uma corda e converter os três caracteres certos de volta para um inteiro? Isso não me inspira.

Já alguma vez se perguntou como é que a data é convertida numa estrutura? Não por divisão e restante?

ou acha que funciona de forma diferente? http://msdn.microsoft.com/ru-RU/library/windows/desktop/ms724284%28v=vs.85%29.aspx

Devem estar prontamente disponíveis, aliás.

bliiiiiiin :) que tipo de ready-made? foram-lhe dados 8 bytes - que mais precisa dos criadores?

O interessante não é isso, mas porque é que os criadores escolheram originalmente o formato UNIX para armazenar o tempo e não aquele de que estamos a falar agora, ou seja, milissegundos?

Parece continuar a falar de algum tipo de formato de tempo. OK. Quais conhece?

Eu pessoalmente conheço 3.

- 4 bytes - o número de segundos desde a era unix de 1970 até 2038 (INT)

- 8 byte - número de 100 nanossegundos de 1601 a 30828 (FILETIME)

- 8 byte - número de milissegundos de 1970 a 2038 (INT64)

há também um SISTEMA de 8 bytes de estrutura de armazenamento de tempo, mas é derivado, etc.


O que estou a sugerir é que demos o que já temos no servidor MT - 8 bytes da era unix.

o que esconder? :)

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