Precisa de ajuda! Não consigo resolver o problema, estou atingindo limitações de hardware - página 20

 

komposter, você pode usar uma DLL em sua EA?

Se for o caso, você pode fazer o seguinte:

Empacotar os dados em um arquivo de tabela de cabeçalho, usando ZLIB

(http://www.zlib.net/)

Funcionará muito rápido (você ficará surpreso com a rapidez.

A DLL estará pronta para funcionar em 3 msec. Tudo vai funcionar em "tempo real").

Os dados serão reduzidos 5-8 vezes e no final do mesmo arquivo (embalados)

conterá tabela com identificação, offsets e comprimento de dados.

Se você tem uma quantidade muito grande de registros no arquivo fonte, então você tem que compilar

em uma sub-mesa (várias sub-mesas), indicando os offsets na tabela principal, para que você não precise

para que você não tenha que olhar através da mesa inteira, mas apenas uma pequena parte dela.

Por exemplo: Os dados em USD são armazenados de 0 offset a 1023,

Dados da UE de 1024 a 2047 etc.

Se os dados não forem empacotados em um único arquivo (ele será enorme), haverá

mais uma (minúscula) sub-mesa, na qual o embalador indicará o número do arquivo.

E quando a DLL carrega os arquivos, criará uma sub-mesa comum a partir das sub-mesas de

de todos os arquivos. Melhor ainda, todos os offsets são armazenados no primeiro arquivo, e se

nós "saímos" de 1 arquivo, os dados são retirados do segundo arquivo, etc.


Eu esqueci...

Se você seguir meu conselho, recomendo que você embale seu

dados de texto com função de embalagem de string Zlib (não dados binários, ele funciona mais rápido).

Acho que a função é chamada ZCompressString.

zlib Home Site
  • www.zlib.net
Web page copyright © 1996-2014 Greg Roelofs, Jean-loup Gailly and Mark Adler. zlib software copyright © 1995-2012 Jean-loup Gailly and Mark Adler.
 

O zipping, assim como a criptografia, já pode ser padrão:


Métodos de criptografia de dados


Para especificar o método de conversão de dados (criptografia e cálculo hash), a enumeração ENUM_CRYPT_METHOD é usada nas funções CryptEncode() e CryptDecode().

ENUM_CRYPT_METHOD

Constante

Descrição

CRYPT_BASE64

Criptografia BASE64 (transcodificação)

CRYPT_AES128

Criptografia AES com chave de 128 bits (16 bytes)

CRYPT_AES256

Criptografia AES de 256 bits (32 bytes)

CRYPT_DES

criptografia DES com chave 56 bits (7 bytes)

CRYPT_HASH_SHA1

Calcular HASH SHA1

CRYPT_HASH_SHA256

Calcular HASH SHA256

CRYPT_HASH_MD5

Cálculo de HASH MD5

CRYPT_ARCH_ZIP

Arquivamento ZIP

Документация по MQL5: Общие функции / CryptDecode
Документация по MQL5: Общие функции / CryptDecode
  • www.mql5.com
Общие функции / CryptDecode - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Renat:

O zipping, assim como a criptografia, já pode ser padrão:


Métodos de criptografia de dados


Para especificar o método de conversão de dados (criptografia e cálculo hash), a enumeração ENUM_CRYPT_METHOD é usada nas funções CryptEncode() e CryptDecode().

ENUM_CRYPT_METHOD

Constante

Descrição

CRYPT_BASE64

Criptografia BASE64 (transcodificação)

CRYPT_AES128

Criptografia AES com chave de 128 bits (16 bytes)

CRYPT_AES256

Criptografia AES de 256 bits (32 bytes)

CRYPT_DES

criptografia DES com chave 56 bits (7 bytes)

CRYPT_HASH_SHA1

Calcular HASH SHA1

CRYPT_HASH_SHA256

Calcular HASH SHA256

CRYPT_HASH_MD5

Cálculo de HASH MD5

CRYPT_ARCH_ZIP

Arquivamento ZIP

A questão não é sobre criptografia, é sobre como acessar os dados rapidamente.

O objetivo do arquivamento é reduzir o tamanho dos dados e permitir a rápida transferência dos offsets

não o arquivo principal (20GB), mas um 5-8 vezes menor.

Mas não basta embalar, você também precisa ter um mecanismo para acesso rápido aos dados.

P/S Zlib tem funções para compressão e descompressão rápida de cordas.

 

Eu salientei que não é mais necessário ter dlls de terceiros para embalar ou criptografar os dados. Em oposição ao seu método DLL.

Eu não falei em resolver o problema do iniciante de topo.

 
Renat:

Eu salientei que não é mais necessário ter dlls de terceiros para embalar ou criptografar os dados. Em oposição ao seu método DLL.

Eu não disse nada sobre a solução do problema do iniciador do tópico.

Uma DLL não é um descompactador de dados, mas um mecanismo para extração rápida de dados de

um arquivo embalado de acordo com um determinado esquema.

 
Tudo isso agora é feito facilmente com a linguagem. A compressão está disponível como padrão.
 
Renat:
Bem, tudo isso agora é feito facilmente usando as ferramentas de linguagem. A compressão está disponível a partir do padrão.

Ótimo, agora o iniciante do tópico provavelmente resolverá seu problema.

Eu nunca trabalhei com arquivos na MQL5, vou ver se é possível abrir

Eu nunca trabalhei com arquivos na MQL5.

Sim, é :)

bool  FileSeek(
   int                  file_handle,     // handle файла
   long                 offset,          // в байтах
   ENUM_FILE_POSITION   origin           // позиция для отсчета
   );
Будем надеятся, что терминал работает так же быстро, как и нативная DLL
 
Tudo funciona, e é rápido. Descrevi acima métodos para melhorar a eficiência das operações de arquivo em nossa implementação.
 
Renat:
Tudo funciona, e é rápido. Descrevi acima métodos para tornar as operações de arquivo mais eficientes em nossa implementação.

Eu não estou subestimando as habilidades e capacidades do terminal, mas

quando precisei extrair dados de um arquivo de 1.21Gb, com 21.345.728(!) linhas, alguns anos atrás,

http://ftp.micex.com/pub/info/historical_data/Securities_market/OrderBook20130206.rar

dados do formulário:

NÃO, CÓDIGO DE SEGURANÇA, COMPRA, VENDA, TEMPO, PEDIDO NÃO, AÇÃO, PREÇO, VOLUME, TRADENO, PREÇO COMERCIAL

21345728,USD000UTSTOM,B,235000002,3568,0,29.6095,300000,,

Então, pelo método que indiquei, o tempo de busca foi de 35-45 MICROSECUNDS,

É verdade que o arquivo foi preparado por mais de 2 dias :(

P / S Não se trata do que usar (terminal ou DLL), mas de como preparar os dados.

E o fato de haver novas características no terminal é muito bem-vindo!

 
Mikalas:

Eu não estou subestimando as capacidades do terminal, mas

quando precisei extrair dados de um arquivo de 1,21GB há alguns anos, com 21.345.728(!) linhas,

http://ftp.micex.com/pub/info/historical_data/Securities_market/OrderBook20130206.rar

dados do formulário:

NÃO, CÓDIGO DE SEGURANÇA, COMPRA, VENDA, TEMPO, PEDIDO NÃO, AÇÃO, PREÇO, VOLUME, TRADENO, PREÇO COMERCIAL

21345728,USD000UTSTOM,B,235000002,3568,0,29.6095,300000,,

Então, pelo método que indiquei, o tempo de busca foi de 35-45 MICROSECUNDS,

É verdade que o arquivo foi preparado por mais de 2 dias :(

Talvez milissegundos? No SO baseado no Windows em microssegundos, as medições não podem ser feitas...