¡Necesito ayuda! No puedo resolver el problema, me encuentro con limitaciones de hardware - página 20

 

komposter, ¿puede utilizar una DLL en su EA?

Si es así, puedes hacer lo siguiente:

Empaquetar los datos en un archivo de tabla de cabecera, utilizando ZLIB

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

Funcionará muy rápido (te sorprenderá lo rápido que es.

La DLL estará lista para funcionar en 3 mseg. Todo funcionará en "tiempo real").

Los datos se reducirán entre 5 y 8 veces y al final del mismo archivo (empaquetado)

contendrá la tabla con el ID, los desplazamientos y la longitud de los datos.

Si tiene una cantidad muy grande de registros en el archivo fuente, entonces tiene que compilar

en una subtabla (varias subtablas), indicando los desplazamientos en la tabla principal, para no tener que

para no tener que mirar toda la tabla, sino sólo una pequeña parte de ella.

Por ejemplo: Los datos del USD se almacenan desde el offset 0 hasta el 1023,

Datos de la UE de 1024 a 2047, etc.

Si los datos no están empaquetados en un solo archivo (serán enormes), habrá

una subtabla más (diminuta), en la que el empaquetador indicará el número de archivo.

Y cuando la DLL cargue los archivos, creará una subtabla común a partir de las subtablas de

de todos los archivos. Mejor aún, todas las compensaciones se almacenan en el primer archivo, y si

nos "salimos" de 1 archivo, los datos se toman del segundo archivo, etc.


Me olvidé...

Si sigue mi consejo, le recomiendo que empaque su

datos de texto con la función de empaquetado de cadenas Zlib (no datos binarios, funciona más rápido).

Creo que la función se llama 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.
 

La compresión, al igual que la codificación, puede ser ya estándar:


Métodos de encriptación de datos


Para especificar el método de conversión de datos (cifrado y cálculo de hash), se utiliza la enumeración ENUM_CRYPT_METHOD en las funciones CryptEncode() y CryptDecode().

ENUM_CRYPT_METHOD

Constante

Descripción

CRYPT_BASE64

Codificación BASE64 (transcodificación)

CRYPT_AES128

Encriptación AES con clave de 128 bits (16 bytes)

CRYPT_AES256

Cifrado AES de 256 bits (32 bytes)

CRYPT_DES

Cifrado DES con clave de 56 bits (7 bytes)

CRYPT_HASH_SHA1

Calcular HASH SHA1

CRYPT_HASH_SHA256

Calcular HASH SHA256

CRYPT_HASH_MD5

Cálculo HASH MD5

CRYPT_ARCH_ZIP

Archivo ZIP

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

La compresión, al igual que la codificación, puede ser ya estándar:


Métodos de encriptación de datos


Para especificar el método de conversión de datos (cifrado y cálculo de hash), se utiliza la enumeración ENUM_CRYPT_METHOD en las funciones CryptEncode() y CryptDecode().

ENUM_CRYPT_METHOD

Constante

Descripción

CRYPT_BASE64

Codificación BASE64 (transcodificación)

CRYPT_AES128

Encriptación AES con clave de 128 bits (16 bytes)

CRYPT_AES256

Cifrado AES de 256 bits (32 bytes)

CRYPT_DES

Cifrado DES con clave de 56 bits (7 bytes)

CRYPT_HASH_SHA1

Calcular HASH SHA1

CRYPT_HASH_SHA256

Calcular HASH SHA256

CRYPT_HASH_MD5

Cálculo HASH MD5

CRYPT_ARCH_ZIP

Archivo ZIP

La cuestión no es el cifrado, sino cómo acceder rápidamente a los datos.

El objetivo del archivado es reducir el tamaño de los datos y permitir la transferencia rápida de las compensaciones

no el archivo principal (20GB), sino uno 5-8 veces más pequeño.

Pero no basta con empaquetar, también hay que tener un mecanismo de acceso rápido a los datos.

P/S Zlib tiene funciones para la compresión y descompresión rápida de cadenas.

 

Señalé que ya no es necesario tener dlls de terceros para empaquetar o encriptar los datos. A diferencia de su método DLL.

No he hablado de resolver el problema de los topstarter.

 
Renat:

Señalé que ya no es necesario tener dlls de terceros para empaquetar o encriptar los datos. A diferencia de su método DLL.

No he dicho nada de resolver el problema del tópico.

Una DLL no es un desempaquetador de datos, sino un mecanismo para extraer rápidamente datos de

un archivo empaquetado según un determinado esquema.

 
Todo esto se hace ahora fácilmente con el lenguaje. La compresión está disponible de serie.
 
Renat:
Pues bien, todo esto se puede hacer ahora fácilmente con las herramientas lingüísticas. La compresión está disponible a partir de la norma.

Estupendo, ahora el tópico probablemente resolverá su problema.

Nunca he trabajado con archivos en MQL5, voy a ver si es posible abrir

Nunca he trabajado con archivos en MQL5.

Sí, lo es :)

bool  FileSeek(
   int                  file_handle,     // handle файла
   long                 offset,          // в байтах
   ENUM_FILE_POSITION   origin           // позиция для отсчета
   );
Будем надеятся, что терминал работает так же быстро, как и нативная DLL
 
Todo funciona y es rápido. He descrito los métodos anteriores para mejorar la eficiencia de las operaciones de archivo en nuestra implementación.
 
Renat:
Todo funciona y es rápido. He descrito los métodos anteriores para hacer más eficientes las operaciones con archivos en nuestra implementación.

No estoy subestimando las habilidades y capacidades del terminal, pero

cuando necesité extraer datos de un archivo de 1,21Gb, con 21.345.728(!) líneas, hace un par de años,

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

datos de la forma:

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

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

Entonces, por el método que indiqué, el tiempo de búsqueda fue de 35-45 MICROSECUNDOS,

Es cierto que el expediente se preparó durante más de 2 días :(

P / S No se trata de qué usar (terminal o DLL), sino de cómo preparar los datos.

Y el hecho de que haya nuevas funciones en el terminal es muy bienvenido.

 
Mikalas:

No estoy subestimando las capacidades del terminal, pero

cuando necesité extraer datos de un archivo de 1,21GB hace un par de años, con 21.345.728(!) líneas,

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

datos de la forma:

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

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

Entonces, por el método que indiqué, el tiempo de búsqueda fue de 35-45 MICROSECUNDOS,

Es cierto que el archivo se preparó durante más de 2 días :(

¿Tal vez milisegundos? En los sistemas operativos basados en Windows en microsegundos, las mediciones simplemente no se pueden hacer...