mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 153

 
Roffild :

ArrayReverse 도움말에서:

ArraySetAsSeries() 함수 배열 요소를 물리적으로 이동하지 않고 인덱싱 방향을 거꾸로 뒤집어 요소에 대한 액세스를 시계열 처럼 구성합니다 . ArrayReverse() 함수는 배열이 "반전"되는 방식으로 배열의 요소를 물리적으로 이동합니다.

그러나 이 코드는 그렇지 않음을 증명합니다.

왜요? 모든 것이 정확합니다.

번호 매기기가 시계열과 같은 배열을 다루는 경우 0 막대가 가장 최신이고 마지막 막대가 가장 이른 것이므로 새 요소가 추가되면 마지막 요소 옆에 위치합니다. 가장 이른.

그리고 시계열처럼 배열에 번호가 지정되지 않은 경우 0 요소가 가장 빠르고 마지막 요소가 가장 최신입니다. 따라서 새 요소를 추가할 때 최신 요소 옆에 있습니다.
시험에서 무슨 일이 일어나고 있습니까?

증거는 어디에 있습니까-이해하지 못합니다. 이것은 일반적으로 어떻게 증명할 수 있고 배열의 시작이 메모리에서 어디이고 증가 단계(양수 또는 음수)가 무엇인지 알아낼 수 있습니다.
이것은 배열을 전달하고 포인터를 사용하는 dll에서만 증명할 수 있습니다.
일반적으로 이 작업의 수행 시간을 측정하여 증명하는 것이 더 쉽습니다. 100,000,000개 요소의 배열이 즉시 "전환"되면 전송이 없고 단순히 시작에 대한 참조가 변경되고 증분 기호가 변경된다는 것이 분명합니다.
나는 항상 기능을 사용   ArraySetAsSeries() 및 나는 그것이 시간 면에서 절대적으로 무료라는 것을 알았습니다. 그래서 당신은 틀렸다.

솔직히 말하면 빠른 ArrayReverse 함수가 있는데 느린 ArrayReverse 함수가 왜 필요한지 이해가 되지 않습니다.   ArraySetAsSeries()  

 
Roffild :

ArrayReverse 도움말에서:

ArraySetAsSeries() 함수 배열 요소를 물리적으로 이동하지 않고 인덱싱 방향을 거꾸로 뒤집어 요소에 대한 액세스를 시계열 처럼 구성합니다 . ArrayReverse() 함수는 배열이 "반전"되는 방식으로 배열의 요소를 물리적으로 이동합니다.

그러나 이 코드는 그렇지 않음을 증명합니다.

asSeries 플래그가 있는 어레이에 대한 메모리 재할당이 있습니다. 물론 그들은 이것을 고려했습니다. 다음과 같은 내용이 있어야 합니다.

 template < typename T>
T* ReAllocArray(T* array, size_t size, size_t newSize, bool asSeries) {
    auto _array = (T*)realloc(array, newSize * sizeof (T));
     if (_array == NULL ) throw bad_alloc();
    auto _ptr = _array + size;
    auto ptr = _array + newSize;
     if (asSeries){
         while (_ptr != _array) *(--ptr) = *(--_ptr);
         while (ptr != _array) new (--ptr) T;
    }
     else {
         while (_ptr != ptr) new (_ptr++) T;
    }
     return _array;
}
 
Vladimir Simakov :

asSeries 플래그가 있는 어레이에 대한 메모리 재할당이 있습니다. 물론 그들은 이것을 고려했습니다. 다음과 같은 내용이 있어야 합니다.

예, 그들은 그것을 고려했습니다. 그러나 이 동작은 CopyRates() 와 일치하지 않습니다.

수신 어레이가 어떤 속성을 가지고 있는지(as_series=true 또는 as_series=false)는 중요하지 않습니다. 시간에서 가장 오래된 요소가 어레이에 할당된 물리적 메모리의 시작 부분에 있도록 데이터가 복사됩니다.

또한 ArrayCopy() :

count<0 또는 count>src_size-src_start이면 나머지 배열이 복사됩니다. 배열은 왼쪽에서 오른쪽으로 복사됩니다. 직렬 배열의 경우 왼쪽에서 오른쪽으로 복사를 고려하여 시작 위치가 올바르게 재정의됩니다.

마지막 문장이 좀 애매합니다.
 

가벼운 충격을 받고 있습니다. Java로 테스트를 작성했습니다. Java는 거의 C만큼 빠르므로 MQL5보다 약간 빠릅니다.

나는 그들이 어떻게하는지 이해하지 못합니다. 본질적으로 통역사 언어입니다.

파이썬도 마찬가지인지 궁금합니다.

물론 이것이 MQL5가 나쁘다는 의미는 아닙니다. 자바는 너무 멋집니다.

뭔가 놓친 것 같습니다. 언제부터 인터프리터가 컴파일러의 속도를 따라잡았습니까?...

이것은 부분 컴파일의 도움으로만 가능하다는 것을 알 수 있습니다. 통역사는 깨끗하지 않습니다.

 
Nikolai Semko :

경미한 충격을 받고 있습니다. Java로 테스트를 작성했습니다. Java는 거의 C만큼 빠르므로 MQL5보다 약간 빠릅니다.

나는 그들이 어떻게하는지 이해하지 못합니다. 본질적으로 통역사 언어입니다.

파이썬도 마찬가지인지 궁금합니다.

물론 이것이 MQL5가 나쁘다는 의미는 아닙니다. 자바는 너무 멋집니다.

뭔가 놓친 것 같습니다. 언제부터 인터프리터가 컴파일러의 속도를 따라잡았습니까?...

이것은 부분 컴파일의 도움으로만 가능하다는 것을 알 수 있습니다. 통역사는 깨끗하지 않습니다.

MQL은 또한 인터프리터입니다.

 
Nikolai Semko :

경미한 충격을 받고 있습니다. Java로 테스트를 작성했습니다. Java는 거의 C만큼 빠르므로 MQL5보다 약간 빠릅니다.

나는 그들이 어떻게하는지 이해하지 못합니다. 본질적으로 통역사 언어입니다.

파이썬도 마찬가지인지 궁금합니다.

물론 이것이 MQL5가 나쁘다는 의미는 아닙니다. 자바는 너무 멋집니다.

뭔가 놓친 것 같습니다. 언제부터 인터프리터가 컴파일러의 속도를 따라잡았습니까?...

이것은 부분 컴파일의 도움으로 만 가능하다는 것을 알 수 있습니다. 통역사는 깨끗하지 않습니다.

Java는 바이트 코드로 변환되지만 자체 실행 가상 머신 (JVM)이 있습니다.
인터프리터가 있는 다른 언어들과 달리 언어도 타이핑이 강하다.
대부분 강력한 타이핑과 JVM, 장비에 대한 명령의 신속한 실행 및 전송에 대한 이유입니다.
미국 무역 터미널이 자바로 작성된 것은 헛된 것이 아닙니다. 시카고에 기반을 둔 CME Group은 공식적으로 Java로 작성된 터미널을 제공합니다.
한 프로그래머는 Java 언어가 통신 산업에 뿌리를 두고 있다고 말했습니다.
그리고 통신의 영역은 초기에 처리 및 데이터 전송 속도가 필요합니다.
예, Oracle에는 이 언어 개발을 위한 자체 커뮤니티가 있습니다.
즉, 언어가 살아 있고 Oracle 커뮤니티에서 마무리되고 있습니다.

그건 그렇고 Quik 브랜드와 LUA 언어도 미국인에 의해 개발되었습니다.
그러나 모피 90 년대에 러시아 연방에서 성공적으로 병합 (판매)되었습니다.
그 당시에 amers는 LUA에 미래의 발전이 없다는 것을 이미 알고 있었습니다.
그리고 노동조합 붕괴 이후 거래소 시장이 막 형성되기 시작한 러시아 연방에 성공적으로 밀어붙였다.

 
Nikolai Semko :

가벼운 충격을 받고 있습니다. Java로 테스트를 작성했습니다. Java는 거의 C만큼 빠르므로 MQL5보다 약간 빠릅니다.

나는 그들이 어떻게하는지 이해하지 못합니다. 본질적으로 통역사 언어입니다.

거기에서 모델은 .Net과 같습니다. 소스가 바이트 코드로 컴파일되고 인터프리터이기도 하며 특정 PC에서 바이트 코드의 압축을 풀면 실행될 가상 환경에 대해 기본 코드가 이미 생성됩니다. , 즉. 이것은 이미 컴파일된 코드입니다.

https://habr.com/ru/post/107585/


Google "Java 컴파일러 또는 인터프리터"의 Java에 대해 - 유사한 기사가 있을 것입니다.

 
Алексей Тарабанов :

MQL은 또한 인터프리터입니다.

이론적 해석?

 
Nikolai Semko :

가벼운 충격을 받고 있습니다. Java로 테스트를 작성했습니다. Java는 거의 C만큼 빠르므로 MQL5보다 약간 빠릅니다.

나는 그들이 어떻게하는지 이해하지 못합니다. 본질적으로 통역사 언어입니다.

파이썬도 마찬가지인지 궁금합니다.

물론 이것이 MQL5가 나쁘다는 의미는 아닙니다. 자바는 너무 멋집니다.

뭔가 놓친 것 같습니다. 언제부터 인터프리터가 컴파일러의 속도를 따라잡았습니까?...

이것은 부분 컴파일의 도움으로만 가능하다는 것을 알 수 있습니다. 통역사는 깨끗하지 않습니다.

그러나 시작하는 데 얼마나 걸립니까? 얼마나 많은 메모리가 소모되었고 JVM이 코드 바이트를 컴파일하기 위해 실행한 스레드는 몇 개입니까? 나는 "즉석에서" Hello World를 컴파일한 괴물을 시작했고, 결과적으로 그곳과 그곳 모두에서 네이티브가 되었습니다. C에게 몬스터가 없다는 점만 빼면. 그리고 파이썬에 대해

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MetaTrader 5 Python 사용자 그룹 - Metatrader에서 Python을 사용하는 방법

빅트 , 2019.12.07 07:12

python 관련하여 나는 최근에 Ranger(파일 관리자)에 대해 이야기했는데, 거기에 작성되어 있습니다. 나는 그것을 며칠 동안 사용했고 흥미로운 기능을 가진 멋진 아이디어이지만 파이썬에서는 정말 어리석습니다(일부 복잡한 작업이 백그라운드에서 수행되는 경우). 철거, xs 이 파이썬이 그런 사람을 삽입하는 이유. 나는 sishka 에 비슷한 공예품을 넣었습니다.

글쎄요 - RAM의 carload가 있는 멀티 코어 넘버 크러셔를 구입하고 내 java/sharp/...가 이 테스트에서 매우 멋지다고 말하지만 총 부하에 대해서는 아무 말도 하지 않겠습니다. 그들은 Xi를 따라잡지 못할 것입니다. 진행, 80년대 테트리스를 가져와 Sharp에서 다시 작성하고 이전처럼 빠르게 하지만 60코어 CPU로 운전)).

추신: Elbrus에서 두 개의 스레드가 x86 명령의 변환에만 관여하는 방식과 유사합니다. Belaz의 소포 운송.

 
그건 그렇고, 샤프의 경우 작고 소프트한 것들은 네이티브 코드로 직접 컴파일하는 것을 가능하게 한 것 같습니다. 나는 아직 그것을 시도하지 않았지만 시원해야합니다.
사유: