Besoin d'aide ! Je ne peux pas résoudre le problème, je me heurte à des limitations matérielles. - page 20

 

komposter, pouvez-vous utiliser une DLL dans votre EA ?

Si c'est le cas, vous pouvez faire ce qui suit :

Emballer les données dans un fichier de table d'en-tête, en utilisant ZLIB.

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

Il fonctionnera très rapidement (vous serez surpris de la rapidité avec laquelle il fonctionne.

La DLL sera prête à travailler dans 3 msec. Tout fonctionnera en "temps réel").

Les données seront réduites 5-8 fois et à la fin du même fichier (packed)

contiendra un tableau avec l'ID, les offsets et la longueur des données.

Si vous avez une très grande quantité d'enregistrements dans le fichier source, alors vous devez compiler

dans une sous-table (plusieurs sous-tables), en indiquant les décalages dans la table principale, de sorte que vous n'avez pas besoin de

afin de ne pas avoir à consulter l'ensemble du tableau, mais seulement une petite partie de celui-ci.

Par exemple : Les données USD sont stockées de 0 offset à 1023,

Données de l'UE de 1024 à 2047, etc.

Si les données ne sont pas regroupées dans un seul fichier (il sera énorme), il y aura

un autre (minuscule) sous-tableau, dans lequel l'emballeur indiquera le numéro de fichier.

Et quand DLL charge les fichiers, il crée une sous-table commune à partir des sous-tables de

de tous les dossiers. Mieux encore, tous les décalages sont stockés dans le premier fichier, et si

on "sort" d'un fichier, les données sont prises dans le deuxième fichier, etc.


J'ai oublié...

Si vous suivez mon conseil, je vous recommande d'emballer votre

données textuelles avec la fonction d'empaquetage de chaînes de caractères de Zlib (pas de données binaires, cela fonctionne plus rapidement).

Je pense que la fonction s'appelle 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.
 

Le zippage, ainsi que le cryptage, peuvent déjà être des standards :


Méthodes de cryptage des données


Pour spécifier la méthode de conversion des données (cryptage et calcul de hachage), l'énumération ENUM_CRYPT_METHOD est utilisée dans les fonctions CryptEncode() et CryptDecode().

ENUM_CRYPT_METHOD

Constant

Description

CRYPT_BASE64

Cryptage BASE64 (transcodage)

CRYPT_AES128

Cryptage AES avec clé de 128 bits (16 octets)

CRYPT_AES256

Cryptage AES 256 bits (32 octets)

CRYPT_DES

Cryptage DES avec une clé de 56 bits (7 octets)

CRYPT_HASH_SHA1

Calculer HASH SHA1

CRYPT_HASH_SHA256

Calculer HASH SHA256

CRYPT_HASH_MD5

Calcul du HASH MD5

CRYPT_ARCH_ZIP

Archivage ZIP

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

La compression, ainsi que le cryptage, peuvent déjà être des standards :


Méthodes de cryptage des données


Pour spécifier la méthode de conversion des données (cryptage et calcul de hachage), l'énumération ENUM_CRYPT_METHOD est utilisée dans les fonctions CryptEncode() et CryptDecode().

ENUM_CRYPT_METHOD

Constant

Description

CRYPT_BASE64

Cryptage BASE64 (transcodage)

CRYPT_AES128

Cryptage AES avec clé de 128 bits (16 octets)

CRYPT_AES256

Cryptage AES 256 bits (32 octets)

CRYPT_DES

Cryptage DES avec une clé de 56 bits (7 octets)

CRYPT_HASH_SHA1

Calculer HASH SHA1

CRYPT_HASH_SHA256

Calculer HASH SHA256

CRYPT_HASH_MD5

Calcul du HASH MD5

CRYPT_ARCH_ZIP

Archivage ZIP

La question n'est pas celle du cryptage, mais celle de l'accès rapide aux données.

L'archivage a pour but de réduire la taille des données et de permettre le transfert rapide des offsets.

pas le fichier principal (20 Go), mais un fichier 5 à 8 fois plus petit.

Mais il ne suffit pas d'emballer, il faut aussi disposer d'un mécanisme d'accès rapide aux données.

P/S Zlib possède des fonctions de compression et de décompression rapide des chaînes de caractères.

 

J'ai souligné qu'il n'est plus nécessaire d'avoir des dlls de tiers pour emballer ou crypter les données. Contrairement à votre méthode DLL.

Je n'ai pas parlé de résoudre le problème du topstarter.

 
Renat:

J'ai souligné qu'il n'est plus nécessaire d'avoir des dlls de tiers pour emballer ou crypter les données. Contrairement à votre méthode DLL.

Je n'ai pas parlé d'une solution au problème de l'auteur du sujet.

Une DLL n'est pas un dépileur de données, mais un mécanisme permettant d'extraire rapidement des données de

fichier emballé selon un certain schéma.

 
Tout cela est maintenant facilement réalisable avec le langage. La compression est disponible en standard.
 
Renat:
Eh bien, tout cela est maintenant facile à faire en utilisant les outils linguistiques. La compression est disponible à partir de la norme.

Super, maintenant le topicstarter va probablement résoudre son problème.

Je n'ai jamais travaillé avec des fichiers dans MQL5, je vais voir s'il est possible d'ouvrir

Je n'ai jamais travaillé avec des fichiers dans MQL5.

Oui, c'est vrai :)

bool  FileSeek(
   int                  file_handle,     // handle файла
   long                 offset,          // в байтах
   ENUM_FILE_POSITION   origin           // позиция для отсчета
   );
Будем надеятся, что терминал работает так же быстро, как и нативная DLL
 
Tout fonctionne, et c'est rapide. J'ai décrit les méthodes ci-dessus pour améliorer l'efficacité des opérations de fichiers dans notre implémentation.
 
Renat:
Tout fonctionne, et c'est rapide. J'ai décrit les méthodes ci-dessus pour rendre les opérations de fichiers plus efficaces dans notre implémentation.

Je ne sous-estime pas les capacités et les possibilités du terminal, mais...

quand j'ai eu besoin d'extraire des données d'un fichier de 1,21 Go, avec 21 345 728( !) lignes, il y a quelques années,

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

des données de la forme :

NO,SECCODE,BUYSELL,TIME,ORDERNO,ACTION,PRICE,VOLUME,TRADENO,TRADEPRICE

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

Ensuite, par la méthode que j'ai indiquée, le temps de recherche était de 35-45 MICROSECUNDS,

Il est vrai que le dossier a été préparé pendant plus de 2 jours :(

P / S Il ne s'agit pas de savoir ce qu'il faut utiliser (terminal ou DLL), mais comment préparer les données.

Et le fait qu'il y ait de nouvelles fonctionnalités dans le terminal est très appréciable !

 
Mikalas:

Je ne sous-estime pas les capacités du terminal, mais...

lorsque j'ai eu besoin d'extraire des données d'un fichier de 1,21 Go il y a quelques années, avec 21 345 728 ( !) lignes,

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

des données de la forme :

NO,SECCODE,BUYSELL,TIME,ORDERNO,ACTION,PRICE,VOLUME,TRADENO,TRADEPRICE

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

Ensuite, par la méthode que j'ai indiquée, le temps de recherche était de 35-45 MICROSECUNDS,

Il est vrai que le dossier a été préparé pendant plus de 2 jours :(

Peut-être des millisecondes ? Sur les OS basés sur Windows, en microsecondes, les mesures ne peuvent tout simplement pas être effectuées...