기고글 토론 "MetaTrader 5의 병렬 계산"

 

새로운 기고글 MetaTrader 5의 병렬 계산 가 게재되었습니다:

시간은 인류 내역을 통틀어 큰 가치로 여겨져 왔으며, 불필요하게 낭비하지 않도록 노력하고 있습니다. 이 글에서는 컴퓨터에 멀티 코어 프로세서가 있는 경우 Expert Advisor의 작업을 가속화하는 방법에 대해 설명합니다. 또한 제안된 방법의 구현에는 MQL5 외에 다른 언어에 대한 지식이 필요하지 않습니다.

모든 컴퓨터 사용자 (초보 프로그래머도 아님)가 작동 방식을 이해하는 것은 아닙니다. 따라서 누군가는 분명히 질문 할 것입니다. 이전에도 (단일 코어를 사용하는) 컴퓨터가 여러 프로그램을 동시에 실행할 수 있었고 모두 작동 했는데도 왜 그렇게 많은 코어가 있는 프로세서가 필요합니까? 신뢰는 그렇지 않다는 것입니다. 다음 다이어그램을 보겠습니다.

그림 1. 응용 프로그램의 병렬 실행


작성자: ds2

 

관련 기사를 작성해주신 분께 감사드립니다. 저도 이 주제에 대해 고민해 왔지만 관련 기사를 찾지 못했습니다.

저자는 어떤 상품이 무엇을 실행하는지 주의 깊게 모니터링해야 한다고 경고합니다. 모든 쌍에서 실행할 수 있는 전문가 조언을 작성하는 것에 비추어 볼 때 이것은 약간 어렵습니다. EA가 실행 중인 쌍을 추적하고 병렬 스트림 쌍을 조정해야 합니다.

이와 관련하여 (저자가 아니라 MQ 개발자에게 더 많은 질문이 있습니다) 사용자 지정 도구를 도입 할 수 있습니까?

이렇게 하면 병렬화된 계산을 위한 빈 차트를 만드는 것부터 시작하여 자체적으로 만든 틱 차트를 만드는 것까지 많은 작업을 해결할 수 있습니다.

데이터 전송 버퍼에 관해서는 글로벌 구조를 만들고 그 구조에 따라 다양한 유형의 데이터를 전송하는 것이 좋다고 조언할 수 있습니다. 경험을 통해 계산 결과를 배열 형태로 반환하는 것이 항상 편리한 것은 아니며 종종 일부 카운터를 추적해야하며 이름을 혼동하지 않으려면 모든 것을 구조로 전달하고 이미 구조의 멤버로 변수를 참조하는 것이 더 쉽다는 것을 알고 있습니다. 그런데 동일한 구조에 배열이 포함될 수 있습니다.
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 
Urain:

이와 관련하여 (저자가 아니라 MQ 개발자에게 더 많은 질문이 있습니다.) 사용자 지정 도구를 도입할 수 있을 까요?

흠, 아이디어가 마음에 듭니다.
 

사용자 지정 도구에 대해 이미 여기에서 설명한 아이디어를 반복 할 수 있지만 추가하고 싶습니다....

이제 전문가 어드바이저(인디케이터, 스크립트)는 특정 심볼에서만 실행됩니다. 다른 심볼의 현재 데이터에 액세스 할 수 있지만 OnTick 이벤트는 전문가 조언자가 시작된 차트에서 호스트 심볼에 대해서만 생성됩니다.

애드온과 같은 자신만의"사용자 지정 도구" 를 만들 수 있는 가능성을 도입하는 것이 합리적일 수 있습니다. 이는 전문가 자문 위에 상부 구조와 같으며 여러 심볼에서 틱을 수신하고처리하여 결과를 자체 스레드에서 특정 심볼로 작업하는 프로그램(프로그램의 일부 또는 전문가 자문, 보조지표)에 전달할 수 있는 기능을 가지고 있습니다. 이는 '다중 통화'의 탄생을 촉진하고 촉진하는 데 크게 기여했습니다. 그리고 객체 프로그래밍의 개념 자체가 이를 밀어붙였습니다. 여러 심볼로 작업하는 경우 전문가 어드바이저를 특정 심볼에 바인딩하는 이유는 무엇인가요?

추신 "이 심볼에 대한 새 틱이 도착했습니다"와 같은 이벤트를 SymbolInf... 함수에 추가하는 것도 좋을 것 같습니다.

 
lav888:

이제 전문가 조언자(인디케이터, 스크립트)는 특정 심볼에서만 실행됩니다. 다른 심볼의 현재 데이터에 액세스 할 수 있지만 OnTick 이벤트는 전문가 조언자가 시작된 차트에서 호스트 심볼에 대해서만 생성됩니다.

개발자가 왜 목발을 반복했는지 이해하기 어렵습니다. 결국 MQL5 아키텍처가 개발되고있을 때 이미 서명 된 심볼의 모든 틱에 대해 onTick이 트리거되는 매우 강력한 API가 존재했습니다.

일반적으로 나는 그들이 왜 그러한 아키텍처를 선택하고 아키텍처 측면에서 매우 유능한 기존 API에서 그렇게 적은 것을 가져 왔는지 이해하지 못합니다.

MQL5 개발자는 "이 기능에 대해 생각해 보겠습니다", "예, 맞습니다, 추가하겠습니다"등 마치 바퀴를 재발 명하는 것처럼 행동합니다.

아키텍처를 개발하는 데 1년 이상이 소요되었다고 여러 번 언급되었습니다. 그래서 왜 이런 식으로 하지 않고 다른 방식으로 하기로 결정했는지에 대한 몇 가지 주장이 있습니다.

추신 아마도 그 이유는 메타 트레이더 개발자가 중개 및 거래 경험이 거의 없지만 플랫폼 작성 경험이 많다는 사실에있을 것입니다. 반대로 다른 개발자는 실제 중개 및 시장 거래에 대한 경험이 풍부했습니다.

추신: 저는 추측이 아니라 제 생각을 썼습니다. 창조하는 것보다 비판하는 것이 항상 더 쉽습니다. 개발자는 명백한 실수에도 불구하고 존중받을 자격이 있습니다.

 
lav888:

아마도 전문가 자문 위에 추가 기능과 같고 여러 심볼에서 틱을 수신하고처리하여 결과를 프로그램 (프로그램의 일부 또는 전문가 자문, 특정 심볼로 작업하는 지표)에 전달하는 기능이있는 자체"사용자 지정 도구" 를 만들 수있는 가능성을 도입하는 것이 논리적 일 수 있습니다. EA의 상부 구조와 같으며 여러 심볼에서 틱을 수신하고처리하여 결과를 자체 스레드에서 특정 심볼로 작업하는 프로그램 (프로그램의 일부 또는 EA, 지표)에 전달할 수있는 기능이 있습니다. 이는 '다중 통화'의 탄생을 크게 촉진하고 촉진했습니다. 그리고 객체 프로그래밍의 개념 자체가 이를 밀어붙였습니다. 여러 심볼로 작업하는데 왜 특정 심볼에 전문가 어드바이저를 바인딩할까요?

추신 "이 심볼에 대한 새 틱이 도착했습니다"와 같은 이벤트를 SymbolInf... 함수에 추가하는 것이 좋을 것입니다.

이러한 "애드온"은 표준 MQL5 도구를 사용하여 구현할 수 있습니다: 다중 통화 틱 핸들러 OnTickMarketWatch
 
Lizar:
이 "애드온"은 MQL5 표준 도구인 멀티커런시 틱 핸들러 OnTickMarketWatch를 사용하여 구현할 수 있습니다.

감사합니다. 이 기사를 읽고 위의 결론에 도달했습니다. 그러나이 기사에서 직접 알아 차렸 듯이:

사용 팁:

1. 이 다중 통화 틱 핸들러의 변형은 리소스 집약적입니다. 지연 변수를 사용하여 스크립트에서 틱 수신 시간의 지연을 늘려 프로세서의 부하를 완화 할 수 있습니다. 그러나 동시에 일부 틱을 건너뛸 수도 있습니다.


지연 시간을 최대 1초까지 늘리면 OnTimer()를 사용하여 동일한 효과를 얻을 수 있습니다. 불행히도 같은 단점이 있습니다.

동시에 터미널은 "마켓 창"에서 기호별로 틱을 지속적으로 수신하고 처리합니다. 우리는 이러한 틱에 액세스 할 수 있지만 이러한 데이터가 업데이트되었다는 신호는 없습니다. 그렇기 때문에 인위적으로 확인해야 합니다. MQL5의 장점은 이 작업을 수행할 수 있다는 것입니다. 그러나 터미널 기능에 솔루션을 내장하는 것이 훨씬 더 우아할 것이라는 데 동의합니다. OnTrade()와 같은 별도의 이벤트로 남겨두면 개발자가 재량에 따라 사용할 수 있습니다(또는 사용하지 않을 수도 있습니다).

그리고 "사용자 지정 도구"또는 전문가보다 상부 구조에 대해.... 나는 이것이 일종의 "꿈"이며 디자인 단계에서 생각 했어야한다는 것을 알고 있습니다... 유감입니다!

 
lav888:

감사합니다. 위의 결론에 도달하게 된 것은 바로 이 기사였습니다. 하지만 이 기사에서 직접 지적했듯이:

사용 팁:

1. 이 다중 통화 틱 핸들러의 변형은 리소스 집약적입니다. 지연 변수를 사용하여 스크립트에서 틱 수신 시간의 지연을 늘려 프로세서의 부하를 완화 할 수 있습니다. 그러나 동시에 일부 틱을 건너뛸 수도 있습니다.


지연 시간을 최대 1초까지 늘리면 OnTimer()를 사용하여 동일한 효과를 얻을 수 있습니다. 불행히도 같은 단점이 있습니다.

동시에 터미널은 "마켓 창"에서 기호별로 틱을 지속적으로 수신하고 처리합니다. 우리는 이러한 틱에 액세스 할 수 있지만 이러한 데이터가 업데이트되었다는 신호는 없습니다. 그렇기 때문에 인위적으로 확인해야 합니다. MQL5의 장점은 이 작업을 수행할 수 있다는 것입니다. 그러나 터미널 기능에 솔루션을 내장하는 것이 훨씬 더 우아할 것이라는 데 동의합니다. OnTrade()와 같은 별도의 이벤트로 남겨두면 개발자가 재량에 따라 사용할 수 있습니다(또는 사용하지 않을 수도 있습니다).

그리고 "사용자 지정 도구"또는 전문가보다 상부 구조에 대해.... 나는 이것이 단지 "꿈"일 뿐이며 디자인 단계에서 생각 했어야한다는 것을 알고 있습니다... 유감입니다!

예, 일반적으로 동의합니다. 그리고 꿈에 관해서는 지금 우리가 가진 모든 것이 한때 누군가의 꿈이었습니다. 강력한 주장이 있으면"사용자 도구"가 나타납니다.
 

좋아요! 이제 개발자들의 의견만 남았습니다. 이 애드온에 스레드 관리 기능이 한 번에 포함될 수 있으면 좋을 것 같습니다.

각 처리를 자체 스레드에서 실행할 수 있을 것입니다. 현재 틱으로 작업하는 동안 새 틱을 처리할 수도 있을 것입니다.

 

유용한 기사입니다. 새로운 지평을 열었습니다.

질문이 있습니다: OnTick() 함수를 OnTick(EURUSD)와 같이 매개변수가 있는 함수로 바꾸면 여러 상품의 틱을 하나의 Expert Advisor에서 병렬로 처리할 수 있을까요? 물론 단일 매개변수 함수의 각 인스턴스를 별도의 스레드(별도의 커널에서)에서 처리해야 합니다.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
좋은 기사입니다. 공유해 주셔서 감사합니다.