Precisa de ajuda! Não consigo resolver o problema, estou atingindo limitações de hardware - página 20
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
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.
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
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.
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.
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, é :)
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!
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 :(