도움이 필요하다! 숙제가 풀리지 않아 철의 한계에 부딪혀 - 페이지 20

 

komposter, EA에서 DLL을 사용할 수 있습니까?

그렇다면 다음을 수행할 수 있습니다.

ZLIB를 사용하여 헤더 테이블이 있는 파일로 데이터 압축

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

매우 빠르게 작동합니다(얼마나 빨리 작동하는지 놀라게 될 것입니다.

DLL 작동 준비 - 3ms. 모든 것이 실시간으로 작동합니다 ).

데이터는 5-8배 감소되며 동일한 파일의 끝에서(포장)

ID, 오프셋 및 데이터 길이가 있는 테이블이 저장됩니다.

소스 파일에 매우 많은 수의 레코드가 있는 경우 다음을 수행해야 합니다.

하위 테이블(여러 하위 테이블), 기본 테이블에 오프셋을 지정하여

전체 테이블을 반복하지 말고 일부만 반복하십시오.

예: USD 데이터는 오프셋 0에서 1023까지 저장됩니다.

1024년부터 2047년까지의 EU 데이터 등

데이터가 하나의 파일로 압축되지 않은 경우(크기가 큼)

패커가 파일 번호를 나타내는 하나 이상의 (작은) 하위 테이블.

DLL이 파일을 로드할 때 하위 테이블에서 공통 하위 테이블을 생성합니다.

모든 파일. 더 나은 방법은 모든 오프셋을 첫 번째 파일 에 저장하는 것입니다.

우리는 1 파일의 한계를 넘어 "이동"한 다음 두 번째 파일에서 데이터를 가져옵니다.


잊어버렸다..

당신이 내 조언을 받아들이면, 나는 당신을 포장하는 것이 좋습니다

Zlib 문자열 패킹 기능을 사용하는 텍스트 데이터(바이너리 데이터가 아니라 이 방식으로 더 빠르게 작동함).

이 함수는 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.
 

평소와 같이 압축하고 암호화할 수 있습니다.


데이터 암호화 방법


ENUM_CRYPT_METHOD 열거형은 CryptEncode()CryptDecode() 함수에서 데이터 변환 방법(암호화 및 해시 계산)을 지정하는 데 사용됩니다.

ENUM_CRYPT_METHOD

끊임없는

설명

CRYPT_BASE64

BASE64 암호화(트랜스코딩)

CRYPT_AES128

128비트(16바이트) 키로 AES 암호화

CRYPT_AES256

256비트(32바이트) 키로 AES 암호화

CRYPT_DES

56비트(7바이트) 키로 DES 암호화

CRYPT_HASH_SHA1

HASH SHA1 계산

CRYPT_HASH_SHA256

해시 SHA256 계산

CRYPT_HASH_MD5

HASH MD5 계산

CRYPT_ARCH_ZIP

ZIP 아카이브

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

평소와 같이 압축하고 암호화할 수 있습니다.


데이터 암호화 방법


ENUM_CRYPT_METHOD 열거형은 CryptEncode()CryptDecode() 함수에서 데이터 변환 방법(암호화 및 해시 계산)을 지정하는 데 사용됩니다.

ENUM_CRYPT_METHOD

끊임없는

설명

CRYPT_BASE64

BASE64 암호화(트랜스코딩)

CRYPT_AES128

128비트(16바이트) 키로 AES 암호화

CRYPT_AES256

256비트(32바이트) 키로 AES 암호화

CRYPT_DES

56비트(7바이트) 키로 DES 암호화

CRYPT_HASH_SHA1

HASH SHA1 계산

CRYPT_HASH_SHA256

해시 SHA256 계산

CRYPT_HASH_MD5

HASH MD5 계산

CRYPT_ARCH_ZIP

ZIP 아카이브

Topikstarter의 질문은 암호화가 아니라 데이터에 빠르게 액세스하는 방법에 대한 것입니다.

패킹은 데이터 양을 줄이고 오프셋을 빠르게 이동하는 데 사용됩니다.

기본(20GB) 파일이 아니라 5~8배 축소됩니다.

패킹만으로는 충분하지 않으며 데이터에 빠르게 액세스할 수 있는 메커니즘이 필요합니다 .

P/S Zlib에는 빠른 문자열 압축 및 압축 해제 기능이 있습니다.

 

데이터를 압축하거나 암호화 하기 위해 더 이상 타사 dll이 필요하지 않다고 지적했습니다. DLL을 사용하는 방식과 반대입니다.

그는 토픽 스타터의 문제를 해결하는 것에 대해 이야기하지 않았습니다.

 
Renat :

데이터를 압축하거나 암호화하기 위해 더 이상 타사 dll이 필요하지 않다고 지적했습니다. DLL을 사용하는 방식과 반대입니다.

그는 토픽 스타터의 문제를 해결하는 것에 대해 이야기하지 않았습니다.

DLL은 패커가 아닙니다. - 데이터 언패커가 아니라 데이터를 신속하게 추출하는 메커니즘입니다.

특정 체계에 따라 압축된 파일.

 
이제 이 모든 것이 언어를 통해 쉽게 수행됩니다. 압축은 표준 사용 가능합니다.
 
Renat :
이제 이 모든 것이 언어를 통해 쉽게 수행됩니다. 압축은 표준 사용 가능합니다.

좋습니다. 이제 topicstarter가 문제를 해결할 것입니다.

나는 MQL5의 파일로 작업한 적이 없습니다. 이제 열 수 있는지 읽을 것입니다.

오프셋을 사용할 수 있도록 파일을 스트림으로 저장합니다.

예, 작동합니다 :)

 bool    FileSeek (
   int                   file_handle,     // handle файла
   long                  offset,           // в байтах
   ENUM_FILE_POSITION    origin           // позиция для отсчета
   );
Будем надеятся, что терминал работает так же быстро, как и нативная DLL
 
모든 것이 작동하고 빠릅니다. 위의 구현에서 파일 작업의 효율성을 향상시키는 방법을 설명했습니다.
 
Renat :
모든 것이 작동하고 빠릅니다. 위의 구현에서 파일 작업의 효율성을 향상시키는 방법을 설명했습니다.

나는 단말기의 능력과 능력을 과소평가하지 않지만,

몇 년 전 21,345,728(!) 줄의 1.21GB 파일에서 데이터를 추출해야 했을 때

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

데이터 보기:

NO,SECCODE,BUYSELL,TIME,ORDERNO,액션,가격,볼륨,TRADENO,TRADEPRICE

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

그런 다음 내가 지시 한 방법에 따라 검색 시간은 35-45 MICROSECOND,

파일을 2일 이상 준비하고 있었다는 말이 사실입니다 :(

P/S 무엇을 사용하느냐(터미널이나 DLL)가 아니라 데이터를 어떻게 준비하느냐가 관건이다.

그리고 터미널에 새로운 기능이 추가되었다는 사실은 매우 환영합니다!

 
Mikalas :

터미널의 기능을 얕보는 것은 아니지만

몇 년 전 21,345,728(!) 줄의 1.21GB 파일에서 데이터를 추출해야 했을 때

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

데이터 보기:

NO,SECCODE,BUYSELL,TIME,ORDERNO,액션,가격,볼륨,TRADENO,TRADEPRICE

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

그런 다음 내가 지시 한 방법에 따라 검색 시간은 35-45 MICROSECOND,

파일을 2일 이상 준비하고 있었다는 말이 사실입니다 :(

아마도 밀리초? Windows 기반 OS에서는 마이크로초 단위의 측정이 불가능합니다...