보조지표 게시글

비동기 멀티스레드 계산을 활용한 메타트레이더 5의 의사 지표 데모

첨부파일
27644.zip (17.25 KB, 다운로드 0회)

안녕하세요, 트레이더 여러분! 오늘은 메타트레이더 5에서 사용할 수 있는 의사 지표에 대해 이야기해보려고 합니다. 이 지표는 버퍼 없이 작동하며, 멀티스레드 계산 기술을 시연하는 데 목적이 있습니다. 이 지표는 긴 계산 작업을 수행하기 위해 별도의 스레드에서 실행되는 명령을 발행할 수 있습니다. 각 차트 객체에 대해 워커 전문가 고문을 생성하여 계산을 진행합니다.

이 예제는 프로그래밍 배경이 있는 사용자에게 적합합니다.

이 아이디어는 멀티스레드 비동기 웹 요청에 대한 기사에서 영감을 받았습니다. 메시지(이벤트)가 어떻게 전달되고, 차트 간에 데이터를 전달하기 위해 자원을 어떻게 사용하는지에 대한 기술적인 세부 사항은 해당 기사에서 확인할 수 있습니다.

이 지표는 전체 차트 창 대신 차트 객체를 사용하여 더 "간결한" 방식으로 기술을 구현합니다. 관련 세부 정보는 포럼에서 확인할 수 있습니다.

워커 전문가 고문인 MultiThreadedObjectWorker를 컴파일한 후에 이 지표인 MultiThreadedIndicator를 컴파일하고 실행해야 합니다.

입력 매개변수

  • sinput int _Cores = 1; - 사용 가능한 스레드 수 (물리적 코어 수를 초과하지 마세요)
  • sinput int _Tasks = 1; - 병렬로 실행할 의사 작업 수 (코어 수보다 큰 숫자를 사용하여 병렬 성능을 확인하세요)
  • input string MultiThreadedScriptPath = "Experts\MultiThreadedObjectWorker.ex5"; - 워커 전문가 고문의 경로를 지정해야 합니다

각 의사 작업은 여러 개의 제곱근 함수(sqrt)를 계산합니다(데모 목적). 이 부분은 MQL 프로젝트에서 다른 시간이 많이 소요되는 알고리즘으로 변경할 수 있습니다.

지표가 차트에 부착된 후 병렬 계산을 시작하려면 차트를 클릭하세요. 프로세스의 모든 중요한 단계는 클라이언트와 워커 MQL5 프로그램 모두에서 로그로 기록됩니다.

병렬 계산 요청을 발행하는 클라이언트 MQL 프로그램은 지표뿐만 아니라 전문가 고문도 포함될 수 있습니다. 스크립트 및 서비스는 플랫폼에서 지원되지 않습니다.

헤더 파일 MultiThreadedObjectWorker.mqh를 사용하여 MQL5 클라이언트와 워커 전문가 고문 간의 데이터 마샬링을 구현해야 합니다.

다음은 로그의 두 가지 예시입니다.

2개의 코어에서 4개 작업 실행 (병렬 2 스레드)

2개의 코어에서 4개 작업 실행 (병렬 2 스레드)

2개의 코어에서 4개의 작업을 실행할 때, 2개의 병렬 스레드가 작동하여 1개의 코어에서 실행하는 것보다 두 배 빠른 실행 속도를 제공합니다(위의 3354ms와 아래의 6240ms 비교).

1개의 코어에서 4개 작업 실행 (단일 스레드 - 표준 MQL 프로그램)

1개의 코어에서 4개 작업 실행 (단일 스레드 - 표준 MQL 프로그램)

코어 수가 많을수록 속도가 빨라집니다.

연관 포스트

댓글 (0)