MetaQuotes Language 4와 5는 각각 4세대와 5세대 MetaTrader 제품군 플랫폼을 기반으로 하는 MetaTrader 클라이언트 터미널용 애플리케이션을 개발하기 위한 도구입니다. 이러한 언어는 사용자에게 클라이언트 측 자동 거래 전략을 개발할 수 있는 도구를 제공합니다.

이 글은 다음 주제를 다룹니다.


MetaTrader 프로그래밍 MQL4 vs MQL5에 대한 자세한 자습서를 준비했습니다. 이 기사를 읽고 나면 MQL이 무엇인지, 두 가지 최신 버전의 언어 간의 차이점과 작업 방법을 이해할 수 있을 것입니다. 여기에서 전문 고문을 작성하는 방법을 그림과 함께 자세히 설명합니다. 시작하겠습니다!

MQL4와 MQL5란?

여러 면에서 MQL4와 MQL5 언어는 매우 유사합니다. 따라서 차이점에 대해 별도로 이야기하지만 지금은 버전을 지정하지 않고 단수로 MQL이라고 부르기로 동의합니다.

MQL은 MetaTrader 플랫폼에 내장된 프로그래밍 언어입니다. MetaQuotes Language Editor 개발 환경은 MQL에서 자신의 거래 로봇, 지표 또는 기타 애플리케이션을 작성하고 컴파일과 디버그하는 데 사용됩니다. 이 환경은 모든 참조 정보와 함께 MetaTrader 클라이언트 터미널과 함께 제공됩니다.

라이트파이낸스: MQL4와 MQL5란?

특정 자산에 한 번 이상 투자했다면 은행에 보관하기 위해 방금 달러를 샀을 수도 있습니다. 그러면 투자에는 끊임없는 통제가 필요하다는 것을 이해하게 될 것입니다. 다음과 같은 질문을 한 번 이상 스스로에게 하셨을 것입니다:

  • 가격이 최고점에 도달했을 때 거래를 종료해야 할 때입니까?
  • 자산 가격이 계속 오를 것인지 아니면 시장이 반전될 것인지를 어떻게 판단할 것인가요?
  • 이번에는 잘못된 신호가 수신되어 위험을 감수하고 서둘러 포지션을 열 필요가 없을까요?

시장을 따라잡고 시기 적절한 거래 결정을 내려야 합니다. 가장 활동적인 세션에서 이 작업을 밤낮으로 수행하는 것이 좋습니다. 동시에 여러 자산으로 작업을 수행하면 상황이 점점 더 악화되고 있습니다.

MQL을 사용하면 컴퓨터 프로그램의 형태로 모든 거래 전략이나 알고리즘을 구현할 수 있습니다. 그런 다음 이 프로그램이 시작되고 MetaTrader 클라이언트 터미널의 워크스테이션에서 지속적으로 실행됩니다. 또한, 전달 세트에는 플랫폼 개발자의 수많은 거래 로봇, 지표, 스크립트가 소스 코드 형태로 포함되어 있어 언어와 고유 기술의 개발을 크게 촉진합니다. 또한 MQL에는 자세한 온라인과 오프라인 참조 정보가 제공됩니다. 언어 주변에는 거대한 커뮤니티가 있습니다.

작업에 사용하고 싶거나 신경망을 사용하여 시장을 분석하려는 멋진 지표 또는 영리한 거래 알고리즘을 생각해 냈다고 가정해 보겠습니다. 제한 사항이 없습니다. MQL을 사용하면 지표, 전문가 또는 기타 애플리케이션의 형태로 모든 아이디어를 구현하고, 전략 테스터에서 과거 데이터를 컴파일, 디버그, 확인할 수 있습니다. 이 모든 작업은 재정적 위험을 수반하지 않고 거래에 적극적으로 사용할 수 있습니다.

라이트파이낸스: MQL4와 MQL5란?

요약하자면 MQL은 거래 계정의 상태를 모니터링하고, 지표, 수준을 계산하고, 거래 신호를 수신하고, 시장에서 진입, 퇴장 지점을 결정하기 위한 유틸리티 작성 문제를 해결합니다. 언어 도구를 사용하면 거래 로봇 또는 표시기가 TLS 암호화 또는 HTTP 프로토콜을 포함한 TCP 프로토콜을 사용하여 원격 서버와 정보 교환을 구성할 수 있습니다. FTP를 통해 데이터를 보낼 수 있을 뿐만 아니라 MetaTrader 모바일 클라이언트나 사용자의 이메일로 푸시 알림을 보낼 수도 있습니다. 잘 작성되고 디버깅된 프로그램은 변경하거나 완전히 다른 것으로 교체하기로 결정할 때까지 작동합니다. 신경 써야 할 모든 것은 일반적인 통제입니다.

MQL4, MQL5 언어 비하인드 스토리

MQL은 플랫폼의 진화적 개발의 결과로 등장했습니다. MetaTrader에서 거래 계정을 자동으로 관리하기 위한 도구입니다. 이 점에 대해서는 자세히 다루지 않고 표면적으로 다루겠습니다.

MetaQuotes는 이전에 FXCharts 애플리케이션이었던 MetaTrader 플랫폼과 함께 MetaQuotes 언어를 출시했습니다. MQL은 MetaTrader 3 업데이트와 함께 두 번째 버전으로 성장했습니다. 여기서 MetaQuotes는 MetaTrader Client와 MetaTrader Server 사이의 추가 계층으로 클라이언트에 제공되는 API를 출시했습니다.

4세대 플랫폼의 출시는 2005년 7월 1일에 이루어졌습니다. 이와 함께 MQL4가 출시되었습니다. 이전 버전의 언어와의 하위 호환성이 손실되었습니다. MetaQuotes는 또한 클라이언트 터미널 API 지원을 중단했지만 언어 자체의 기능을 확장하고 맞춤형 DLL 라이브러리를 MQL 애플리케이션에 통합하는 방법을 제공했습니다. API는 서버, 관리 수준의 브로커만 사용할 수 있었습니다.

2010년 6월, 수많은 릴리스 후에 MetaTrader 5가 출시되었습니다. MetaQuotes는 플랫폼의 내부 구조에 의해 부과된 대부분의 제한을 제거하기 위해 거래 로직을 재설계했습니다. 그러나 지금까지 MT5는 MT5는 4세대에 비해 인기를 끌지 못했다.

2014년 2월 MQL4는 MT4 클라이언트 터미널의 600 빌드와 함께 업데이트되었습니다. MetaQuotes는 언어를 개선하고 MQL5의 대부분의 기능을 도입함과 동시에 후속 수준으로 가속화했습니다.

MQL4, MQL5 프로그래밍 언어의 기능

MQL은 자동화된 거래 전략을 만드는 데 사용됩니다. MQL 코드는 미리 C++ 코드로 해석된 다음 터미널 내부에서 포함된 동적 라이브러리로 작동하는 실행 코드로 컴파일됩니다. 평행선을 그리면 메인 프로그램의 실행 코드에 DLL 라이브러리를 포함하는 것과 유사합니다. 이 접근 방식은 개발의 용이성과 자동화된 거래 분야의 진입을 위한 낮은 문턱에 기여합니다. 이 언어는 플랫폼에 대한 언어의 좁은 전문화와 의존성에도 불구하고 거래자들 사이에서 인기가 있습니다.

MetaQuotes는 사용자를 돌보고 모든 응용 프로그램에 자세한 도움말 정보를 제공했습니다. MQL4 프로그래밍, MQL5에 대한 참조는 HTM 파일 형식으로 여러 언어로 MetaEditor와 함께 제공됩니다. 따라서 필요한 동작을 구현하는 방법에 대한 코드 예제가 포함된 자세한 가이드가 항상 있습니다.

MQL을 중심으로 대규모 거래자와 프로그래머 커뮤니티가 형성되었습니다. 프로그래머와 거래자 간의 의사 소통을 용이하게 하는 도구가 있습니다. 거래 프로세스를 단순화하기 위해 기성 응용 프로그램 레이어가 이미 형성되었습니다. 

스스로 MQL을 마스터하고 자신만의 애플리케이션을 만드는 세계로 뛰어들기로 굳게 결심했다면 이 기사를 사용하여 초보자가 이 방향의 첫 단계를 밟을 때 직면하는 문제에 대해 알아볼 수 있습니다. 고급 독자는 아래 텍스트에서 새로운 것을 배우지 않을 것입니다.

개발자는 거래 세계의 다양한 주제에 대한 기사 형식으로 튜토리얼을 정기적으로 게시하여 MQL 커뮤니티에 정보 지원을 제공합니다. 이 글의 저자는 신경망 생성, 언어의 문제와 한계 분석과 해결, 거래 전략 분석과 테스트, 새로운 알고리즘의 검색과 구현을 포함한 새로운 프로그래밍 기술을 고려합니다.

MQL Wizard는 MQL4에 대해 8가지 옵션과 MQL5에 대해 10가지 옵션을 제공합니다. 다음은 두 언어 버전에 대한 파일 마법사의 스크린샷입니다.

라이트파이낸스: MQL4, MQL5 프로그래밍 언어의 기능

라이트파이낸스: MQL4, MQL5 프로그래밍 언어의 기능

가장 인기있는 것을 것을 살펴 보겠습니다.

  • 전문가 자문/거래 로봇;
  • 지표;
  • 스크립트;
  • 파일(.mqh) 라이브러리를 포함합니다.

컴파일 후 실행 코드 형태의 이러한 응용 프로그램은 MetaTrader 클라이언트 터미널(파일 -> 데이터 폴더 열기): Experts, Indicators, Scripts 등의 해당 디렉터리에 배치됩니다. 그런 다음 차트에서 초기화한 후 작동 중 MetaTrader 클라이언트 터미널에서 생성된 이벤트에 대한 응답으로 실행됩니다. 이벤트는 사용자 지정 프로그램을 시작하기 위한 트리거이며 초기화와 초기화 해제, 새 견적 수신, 차트의 사용자 지정 이벤트 등을 추적할 수 있습니다.

또한 이제 Python에서 응용 프로그램을 만들 수 있습니다. 이에 따라 거래 터미널에서 Python 도구를 사용할 수 있게 되었습니다.

다음 이벤트 핸들러는 MQL4 참조에 설명되어 있습니다.

라이트파이낸스: MQL4, MQL5 프로그래밍 언어의 기능

MQL5에서는 이전 세대에 비해 핸들러 수가 증가했습니다. 이제 목록은 다음과 같습니다.

라이트파이낸스: MQL4, MQL5 프로그래밍 언어의 기능

그런 다음 이벤트 목록이 확장됩니다. 이제 다음과 같이 보입니다.

라이트파이낸스: MQL4, MQL5 프로그래밍 언어의 기능

거래 로봇 또는 전문가 고문

상인 커뮤니티에서는 전문가라고도 합니다. Expert Advisor는 MetaTrader 클라이언트 터미널의 차트에 첨부되며 거래 터미널이 실행되고 거래 서버에 연결이 가능한 한 지속적으로 작동합니다. Expert Advisors는 절대적으로 모든 거래 전략을 구현하고, 계정 상태를 제어하고, 특정 조건에서 거래 작업을 수행하고, 그래픽 개체를 관리하는 데 사용됩니다. 거래 로봇은 상품에 대한 새 틱을 받을 때마다 실행을 위해 시작됩니다. Expert Advisor는 OnTimer, OnChartEvent, OnTesterTimer 등의 기타 여러 이벤트에 대한 응답으로 실행할 수도 있습니다.

Expert Advisor는 사용자 인터페이스를 만드는 데 사용됩니다. 표시기와 같은 로봇은 그래픽 개체에 액세스할 수 있습니다.

다음은 간단한 거래 로봇의 코드입니다. EA가 작동하는 차트의 심볼에 새로운 틱이 표시될 때마다 시장 거래가 확인됩니다. 심볼에 대한 거래가 이미 있는 경우 EA는 거래가 종료될 때까지 기다립니다. 거래가 없으면 이전 거래와 반대 방향으로 거래가 열립니다. EA 매개변수: 거래량, 손절매, 이익실현 수준은 사용자가 설정합니다. 최초 출시 시점에 통화 매수가 이루어집니다. 문을 닫은 후 다음 제품은 매도를 위해 열리고 다시 매수를 위해 열릴 것입니다. 거래 성사 시도가 실패할 경우 EA는 오류 메시지를 로그에 기록하고 60초 동안 잠자기 상태가 된 다음 시도를 반복합니다. EA는 사용자가 입력한 매개변수의 정확성을 확인하지 않으므로 이 부분을 주의 깊게 모니터링하십시오. 즉시 볼 수 있는 잠재적인 문제는 다움과 같습니다:

  • 전반적인 거래 능력은 확인되지 않습니다. 터미널에서 사용자가 비활성화하거나 특히 이 어드바이저에 대해 비활성화할 수 있습니다. 거래 서버는 또한 자동 거래에 대한 제한이 있을 수 있습니다.
  • 볼륨은 큰 것보다 작거나 클 수 있으며, 서버의 볼륨 단계에 제한이 있는 경우에는 적합하지 않을 수 있습니다. 예를 들어 사용자가 0.23로트를 입력하고 서버에서 최소 변경이 0.05로트라고 가정합니다. 결과적으로 거래가 열리지 않고 OrderSend 함수가 오류를 반환합니다.
  • 거래에 대한 중지 수준도 정확성을 확인하지 않습니다. 최소/최대 허용 값에 맞지 않거나 동결 수준에서 설정한 한계에 맞지 않을 수 있습니다.

대규모 솔루션을 구현하기 위한 템플릿으로 사용할 수 있는 가장 간단한 코드입니다.

이 코드는 2020년 3월 31일 MetaQuotes Language Editor 5 빌드 2375에서 컴파일과 실행됩니다.

라이트파이낸스: 거래 로봇 또는 전문가 고문

지표

표시기는 어떤 방식으로든 변환된 가격 데이터에 대한 정보를 표시하는 데 사용됩니다. 모든 종류의 오실레이터, 추세선, 도형이 모두 지표입니다. 표시기는 그래픽 도구에 액세스할 수 있습니다. MQL4에는 6개가 있지만 MQL5에는 18개가 있습니다. 예를 들어, 이동 평균은 과거 가격 기간에 대한 평균 및/또는 평활 가격 값을 표시하고 상품 가격의 미래 방향을 간접적으로 나타냅니다. 차트에서 항상 작동합니다. 지표는 지표가 작동하는 차트의 계측기에 대한 눈금이 수신될 때마다 또는 사용자로부터 이벤트가 수신될 때마다 업데이트되고 다시 계산됩니다.

하나 또는 여러 개의 버퍼는 숫자 데이터가 배치되는 MetaTrader 클라이언트 터미널 내부의 표시기와 연관됩니다. MQL4는 하나의 표시기에 대해 32개의 버퍼를 제공하는 반면 MQL5에서는 512개의 버퍼를 작동할 수 있습니다.

아래는 플랫폼 개발자들이 MetaTrader4와 함께 제공하는 Bears 지표의 소스 코드 예시입니다.

라이트파이낸스: 지표

스크립트

개발자는 스크립트를 사용하여 실시간 데이터 처리가 필요하지 않은 알고리즘을 만듭니다. 예를 들어, 통계 데이터를 다운로드하거나 디버그 정보를 출력합니다. 스크립트는 OnStart 이벤트에 의해 차트에 첨부될 때 한 번 실행됩니다. 스크립트가 처리할 수 있는 유일한 것입니다.

아래 그림은 계정의 모든 시장 주문을 마감하기 위한 스크립트 코드를 보여줍니다. 스크립트는 실행되는 기호 차트에 관계없이 모든 주문을 처리합니다. 이 경우 보류 중인 주문은 무시됩니다.

라이트파이낸스: 스크립트

이 스크립트를 실행한 결과는 MetaTrader 로그에 다음과 같이 출력됩니다

라이트파이낸스: 스크립트

MQL4에서 별도로 보류 주문을 처리하도록 이 스크립트를 가르치는 데 더 많은 노력이 필요합니다. 먼저 스크립트가 입력 데이터가 있는 창을 표시할 수 있도록 속성을 생성해 보겠습니다. 다음으로, 스크립트를 사용하여 거래를 마감하는 시장 주문, 보류 중인 주문만 또는 현재 계정에 있는 모든 거래 3가지 옵션이 포함된 Enum을 추가합니다. 그런 다음 보류 중인 주문 티켓을 저장하기 위한 배열을 추가하고 이에 따라 첫 번째 For 루프에서 채웁니다. 이제 사용자가 선택한 거래를 마감하는 옵션을 처리하는 일만 남았습니다.

결과적으로 모든 트랜잭션을 닫을 뿐만 아니라 사용자의 선택을 고려하는 이와 같은 스크립트를 얻었습니다.

라이트파이낸스: 스크립트

파일(.mqh) 라이브러리 포함

이름에서 알 수 있듯이 MetaTrader 클라이언트 터미널의 다른 유형의 프로그램에 포함하기 위해 사용됩니다. 숙련된 개발자는 다양한 애플리케이션에서 여러 번 재사용할 수 있는 고유한 도구 세트를 보유하고 있습니다.

MetaQuotes Language Editor에서는 포함이 발생하는 파일의 위치를 기준으로 포함된 헤더 파일의 경로만 지정하면 됩니다. 프로그램을 컴파일할 때 MetaEditor는 이 파일을 찾아 #include 지시어 대신 이 파일의 코드를 포함합니다. 이제 모든 라이브러리 코드를 애플리케이션에서 사용할 수 있습니다.

마찬가지로 C, C++ 프로그래머는 프로젝트에 헤더 파일을 포함하고 바이너리와 연결하여 코드를 재사용합니다.

아래 예제는 표준 C ++ 라이브러리에서 std::vector라고도 하는 동적 배열에 대한 가장 단순화된 해석을 보여줍니다. 이 코드는 MetaEditor 버전 5.00 빌드 2375 2020년 3월 31일 컴파일과 작동합니다.

라이트파이낸스: 파일(.mqh) 라이브러리 포함

MQL4, MQL5 언어의 데이터 유형 및 구문

언어의 데이터 유형과 구문은 C++에서 상속됩니다. 컴파일하기 전에 MQL 코드는 사전 처리되고 해당 C++ 코드로 해석되므로 상위 항목에서 유효한 언어 구성이 컴파일되고 MQL에서 작동할 가능성이 큽니다. C, C++ 또는 C#에 익숙한 프로그래머는 MQL 코드를 작성하는 방법을 쉽게 파악할 수 있습니다.

데이터 유형

MQL에는 다음과 같은 기본 데이터 유형이 있습니다.

  • 부울 값;
  • 단정밀도, 배정밀도 부동 소수점 숫자;
  • 정수, 단정밀도, 배정밀도, 부호 여부;
  • 문자 데이터를 저장하기 위한 Char;
  • 열거형(열거형 클래스 지원은 아님)
  • 구조, 클래스, 클래스 템플릿.

동시에 기본 제공 유형으로 색상, 문자열, 날짜 시간에 대한 추가 지원이 있으며, 이는 물론 개발자의 삶을 다소 단순화합니다. 이러한 유형에 대한 작업은 전역 함수를 사용하여 C 스타일로 구성됩니다. MQL 문자열의 동작은 C++03용 템플릿의 std::string 제품군과 근본적으로 다릅니다. 혼동하지 마십시오.

라이트파이낸스: 데이터 유형

MetaQuotes 언어의 구문

MQL에는 C++와 유사한 구문이 있습니다. C++03 표준의 조상의 의미 체계는 약간의 변경을 통해 MQL로 이전되었습니다. 현재 MQL은 기능 면에서 C++03 표준을 준수합니다.

MQL과 C++의 주요 차이점은 포인터의 다른 의미입니다. C++에서 데이터가 위치한 가상 주소인 경우 MQL에서는 설명자, POSIX 표준 설명자의 유사체, 숫자 식별자, 원시 포인터에 대한 일종의 래퍼로 동적 메모리에서 생성된 객체와 이 식별자와 연결된 존재합니다. 화살표 연산자 "->"는 MQL 포인터에 대해 지원되지 않으며 역참조는 점 연산자 "."를 사용하여 수행됩니다. 포인터와 마찬가지로 디스크립터는 프로그램이 끝난 후에 삭제되어야 합니다. 그러나 이 핸들이 참조하는 개체를 삭제하는 것을 잊은 경우 프로그램이 초기화 해제될 때 런타임에서 자동으로 삭제합니다.

MQL 언어에는 임시 변수와 데이터 이동의 개념이 없습니다. 참조와 값으로 변수를 전달하는 것은 C++와 다르며 자체 방식으로 MQL에서 구현됩니다. 앰퍼샌드 연산자를 사용하는지 여부에 관계없이 모든 복잡한 개체 또는 사용자 정의 클래스는 참조에 의해 함수에 전달됩니다.

원형에는 여러 가지 제한이 있습니다. 가변 개수의 인수를 사용하여 함수와 템플릿을 작성할 수 없습니다. 그러나 주목할 만한 점은 iCustom(이 기사의 뒷부분에서 분석할 예정임), printf, StringFormat, PrintFormat과 같은 여러 내장 함수가 다양한 수의 인수를 취한다는 것입니다. 역설적입니다!

MQL4와 MQL5 코드의 차이점

4세대와 5세대 MQL 언어의 차이점은 MetaTrader4와 MetaTrader5 플랫폼 자체의 차이점 때문입니다. 600 MT4 빌드 릴리스 이후로 MQL4, MQL5에서 프로그램을 작성하고 컴파일하는 데 MetaQuotes Language Editor의 다섯 번째 버전만 사용된다는 점에 유의해야 합니다. 특히 다섯 번째 플랫폼에는 더 많은 거래 모드가 있고 주문, 거래, 위치의 개념이 분리되어 있기 때문에 언어는 거래 작업과 함께 다른 방식으로 작동합니다.

이제 주문을 수정하거나 삭제하는 데 별도의 기능이 사용되는 네 번째 버전과 달리 OrderSend 기능만 사용하여 요청을 보냅니다.

 MQL4MQL5
기간9 (M1, M5, M15, M30, H1, H4, D, W, MN)21 (M1, M2, M3, M4, M5, M6, M10, M12, M15, M20, M30, H1, H2, H3, H4, H6, H8, H12, D1, W1, MN1)
드로잉 스타일

6

DRAW_NONE

DRAW_LINE

DRAW_SECTION

DRAW_HISTOGRAM

DRAW_ARROW

DRAW_ZIGZAG

빌드 600에서는 숫자가 다섯 번째 버전과 일치하게 되었습니다.

18

DRAW_NONE

DRAW_LINE

DRAW_SECTION

DRAW_HISTOGRAM

DRAW_HISTOGRAM2

DRAW_ARROW

DRAW_ZIGZAG

DRAW_FILLING

DRAW_BARS

DRAW_CANDLES

DRAW_COLOR_LINE

DRAW_COLOR_SECTION

DRAW_COLOR_HISTOGRAM

DRAW_COLOR_HISTOGRAM2

DRAW_COLOR_ARROW

DRAW_COLOR_ZIGZAG

DRAW_COLOR_BARS

DRAW_COLOR_CANDLES

이벤트 기반 출시 모델

OnInit

OnStart

OnDeinit

OnTick

OnCalculate

OnTimer

OnChartEvent

OnTester

 

OnInit

OnStart

OnDeinit

OnTick

OnCalculate

OnTimer

OnTrade

OnTradeTransaction

OnBookEvent

OnChartEvent

OnTester

OnTesterInit

OnTesterDeinit

OnTesterPass

거래

OrderSend

OrderModify

OrderDelete

동작은 각 기능에 대한 별도의 매개변수 세트로 지정됩니다. 프로그램 작성과 디버깅을 복잡하게 만듭니다.

OrderSend

모든 작업을 위한 하나의 기능입니다. 필요한 동작은 MqlTradeRequest 구조에 지정됩니다. 응답은 MqlTradeResult 구조로 반환됩니다. 동작을 설계하고, 결과를 테스트하고, 프로그램을 디버그하는 것이 더 쉽습니다.

지표 데이터 버퍼32512
내장 지표수량: 30

수량: 38

표시기는 핸들을 사용하여 생성됩니다. 복사본 수와 메모리 사용량이 감소했습니다.

거래 모드헤징

네팅

헤징

재고

OpenCL, DirectX 그래픽 도구없음있음
거래 로봇의 생성 세대없음있습니다. 동시에 사용자 정의 신호 모듈을 지정할 수 있습니다.

따라서 차이점은 거의 없지만 존재합니다. 빌드 600 업데이트 후 MQL4는 플랫폼이 다른 부분에서만 MQL5와 다릅니다. LiteFinance 블로그에는 이미 MetaTrader 4와 MetaTrader 5를 비교하는 데 전념하는 글이 있습니다.

MQL4 표시기 프로그래밍: MQL4 또는 MQL5에서 Expert Advisor를 작성하는 방법

Expert Advisor 작성을 시작하기 전에 이미 거래 전략이 있어야 한다는 것을 이해해야 합니다. 그래야만 공식 알고리즘의 형태로 아이디어를 실현할 수 있습니다. 코드 자체는 특정 아이디어의 구현을 위한 언어 도구만 제공합니다.

따라서 가장 먼저 필요한 것은 효과적인 거래 전략입니다. 이것을 개발하는 문제는 이 글의 범위를 벗어나므로 간단한 예를 들어 보겠습니다. 다음을 가정해 봅시다. "플랫에" 상품의 활동이 적은 기간 동안 작은 수준의 한도로 반대 방향으로 거래를 시작하는 것이 가능합니다. 이를 통해 작은 횡보 시장 움직임을 활용하고 이익을 얻을 수 있습니다.

저희는 수동으로 거래를 열고 한도를 제어하고 일정 기간 동안 거래 계정에서 시작하는 Expert Advisor를 작성할 것입니다.

초기에는 언어 버전에 관계없이 절차가 동일합니다. MQL로 프로그램을 작성하려면 MetaEditor가 포함된 전달 패키지인 MetaTrader 클라이언트 터미널을 설치해야 합니다. 이제 터미널의 작업 디렉토리에서 직접 MetaEditor를 시작하거나 거래 터미널의 기본 메뉴를 통해 실행할 수 있습니다. 도구와 MetaQuotes 언어 편집기(F4) 메인 메뉴의 MetaEditor 창에서 파일 -> 새로 만들기를 클릭합니다. 그래픽 메뉴에서 새로 만들기를 클릭한 후에도 동일하게 수행됩니다.

MQL4 거래 로봇을 작성하는 방법

MQL4 ea Builder 애플리케이션 마법사에서 Expert Advisor(템플릿)를 선택하고 다음을 클릭하십시오.

라이트파이낸스: MQL4 거래 로봇을 작성하는 방법

그런 다음 사용자에게 프로그램과 상호 작용하기 위한 인터페이스를 제공하는 매개변수를 입력하고 확인을 클릭하여 확인합니다. 여기에 다음을 추가합니다.

  1. 거래 도구
  2. 로봇이 열릴 첫 번째 거래의 방향 선택합니다. 지금은 정수 유형이지만 나중에 매수 또는 매도만 선택할 수 있도록 코드를 수정합니다.

라이트파이낸스: MQL4 거래 로봇을 작성하는 방법

MetaEditor는 코드에 OnTick 이벤트 핸들러를 자동으로 포함합니다. 나머지는 스스로 선택해야 합니다. 보시다시피 타이머에 대해 설정된 빈도로 매번 호출되는 OnTimer와 차트에 대한 사용자 작업에 대한 응답으로 호출되는 OnChartEvent에 추가로 액세스할 수 있습니다. 여기에서 MQL5에 더 많은 핸들러를 사용할 수 있음을 알 수 있습니다.

라이트파이낸스: MQL4 거래 로봇을 작성하는 방법

더 나아가 테스트 모드에서 이벤트 핸들러를 선택하십시오. MQL5에서는 테스터 모드에서 더 많은 이벤트를 선택할 수 있으며 그에 따라 더 많은 핸들러를 사용할 수 있습니다.

라이트파이낸스: MQL4 거래 로봇을 작성하는 방법

이전 두 단계에서는 모든 옵션을 비워 두었습니다. 모든 로직은 OnTick 기능으로 실행됩니다. 심볼에 대한 새 틱이 도착할 때마다 호출됩니다.

완료 버튼을 클릭하면 MetaEditor는 지정된 이름과 매개변수를 사용하여 미래의 Expert Advisor를 위한 템플릿을 생성합니다. 선택한 이벤트 핸들러도 코드에 포함됩니다. 나는 그들 각각에 대해 자세히 설명하지 않을 것입니다. 이에 대한 모든 필요한 정보는 참조 가이드에 있습니다.

라이트파이낸스: MQL4 거래 로봇을 작성하는 방법

이 코드는 이미 컴파일되어 거래 터미널에서 실행될 수 있습니다. 그러나 아무 일도 일어나지 않을 것입니다. 입력 변수가 있지만 아직 사용하지 않습니다. OnInit 함수는 항상 성공적인 초기화에 대해 터미널에 알리지만 OnTick, OnDeinit에는 명령이 포함되어 있지 않습니다.

코드 작성을 시작해 보겠습니다.

먼저 정리합시다. 여분의 공백을 제거하고 코멘트를 한 줄로 줄이십시오. 그런 다음 숫자가 아닌 자연스러운 방식으로 첫 번째 거래의 방향을 나타내기 위해 열거형 TradeCmd(11-14행)를 정의합니다. 그런 다음 FirstTradeDirection 변수의 입력 유형을 int에서 TradeCmd(20)로 변경합니다. 다음 단계는 TradeCmd 유형을 사용하여 정적 전역 변수 Direction을 만들어 이전 거래의 방향을 고려하고 다음 거래에 대해 반대 방향으로 변경하는 것입니다.

처음에는 마법사에서 거래량, 손절매, 이익실현 수준에 대한 변수를 추가하는 것을 잊었습니다. 이제 입력 키워드로 추가하고 나머지 외부 설정과 함께 추가합니다.

라이트파이낸스: MQL4 거래 로봇을 작성하는 방법

OnTick 기능으로 넘어 갑시다. 우리는 열린 거래의 가용성을 분석합니다. 이를 위해 [0, TotalTrades) 범위의 간단한 주기를 사용하여 모든 공개 거래를 반복합니다. 선택한 거래의 기호가 InputSymbol에 지정된 기호와 일치하는지 하나씩 확인합니다. 그러한 거래가 적어도 한 번 있으면 아무 것도 할 필요가 없습니다. 그리고 Return(29-35행)을 사용하여 예정보다 빨리 OnTick 기능을 종료합니다. 다음 출시 때까지 기다리고 있습니다.

라이트파이낸스: MQL4 거래 로봇을 작성하는 방법

그렇지 않으면 거래를 시작해야 합니다. OrderSend 기능을 올바르게 사용하기 위해 MQL4 문서를 참조하십시오. 이를 통해 거래 서버에 요청을 보내겠습니다. 선언은 다음과 같습니다.

라이트파이낸스: MQL4 거래 로봇을 작성하는 방법

매개변수를 순서대로 고려해 보겠습니다.

  1. 심볼: 이미 그것을 가지고 있지만 어떤 식 으로든 정확성을 확인하지 않고 사용자의 올바른 입력에만 의존합니다.
  2. CMD: 이를 위해 Direction 전역 정적 변수를 사용합니다.
  3. 볼륨: 사용자가 지정합니다. 다시 한 번 최소, 최대, 최소 볼륨 변경 단계 등 입력된 값을 확인해야 합니다. 
  4. 가격: 매수하면 "Buy", 매도하면 "Sell"입니다.
  5. 슬리피지: 우리의 경우에는 별로 중요하지 않습니다. 2핍으로 설정합니다.
  6. 손절매: 다시 말하지만, 그것은 거래의 방향에 달려 있습니다. 매수하는 경우 시가보다 낮아야 하고 매도하는 경우 시가보다 높아야 합니다.
  7. 이익실현: 손절매와 마찬가지로 거래 방향에 따라 다릅니다.

기본값이 있는 다른 4개의 매개변수는 아직 관심이 없습니다. 결과적으로 거래를 열려면 InputVolume(거래량), Direction(거래 방향), InputSymbol(기호)이 있고 슬리피지를 1포인트로 설정합니다. 방향에 따라 가격(시가), sl(손절매), tp(이익 실현)을 계산해야 합니다. 매수하면 Ask(매도 호가)이며 손절매는 현재 가격보다 낮고, 이익실현은 현재 가격보다 더 높습니다. 반면에 매도하면 Buy(매수 호가)이며 손절매는 현재 가격보다 높고, 이익실현은 현재 가격보다 더 낮습니다 . 또한 2개의 추가 변수가 필요합니다. 첫 번째는 한계 수준을 포인트에서 기호에 대한 견적이 변경될 수 있는 최소값인 명목 가치 포인트로 변환하는 것입니다. 두 번째는 따옴표의 소수 부분에 있는 유효 자릿수인 숫자 부동 소수점으로 값을 정규화하기 위한 것입니다.

이것을 MQL로 변환합니다.

라이트파이낸스: MQL4 거래 로봇을 작성하는 방법

직접 거래를 진행합니다. ResetLastError 내장 함수로 _LastError 시스템 변수를 재설정합니다. OrderSend를 사용하여 요청을 보내고 결과를 결과 변수에 씁니다. 이벤트 개발에는 두 가지 옵션이 있습니다.

  1. 결과에 거래 시세 표시기인 0보다 큰 값이 포함되어 있으면 거래가 성공적으로 열린 것입니다. 따라서 다음에 반대 방향으로 거래를 열려면 방향 값을 변경해야 합니다.
  2. 결과에 음수 값이 포함되어 있으면 거래가 열리지 않은 것입니다. GetLastError를 사용하여 마지막 오류를 확인하고 분석하고 조치를 취해야 합니다. 다시 시도하고, 잠시 잠들고, 디버그 정보를 로그에 출력하는 등의 작업을 수행합니다. 편의상 마지막 오류 값을 로그에 출력합니다.

살펴보겠습니다.

라이트파이낸스: MQL4 거래 로봇을 작성하는 방법

그래서 우리는 수십 줄의 코드를 작성했고 거래 로봇이 준비되었습니다. 아직 기능이 많지는 않지만 코드를 작성하는 데 많은 지식과 노력이 필요하지 않다는 사실을 보여주는 훌륭한 예가 될 수 있습니다.

필요한 경우에 대비하여 전체 목록이 있습니다.

라이트파이낸스: MQL4 거래 로봇을 작성하는 방법

코드를 컴파일하고 거래 터미널에서 Expert Advisor를 시작합니다.

MQL5에서 전문가 고문을 작성하는 방법

여기서 MQL5는 MQL4에 비해 부인할 수 없는 이점이 있습니다. 실제로 코드를 한 줄도 작성하지 않고 몇 번의 클릭만으로 다섯 번째 버전의 거래 로봇을 만들 수 있습니다.

MetaEditor에서 새로 만들기를 클릭하고 응용 프로그램 마법사에서 Expert Advisor(생성)를 선택합니다.

라이트파이낸스: MQL5에서 전문가 고문을 작성하는 방법

Expert Advisor의 이름을 MQL5_Generated_Robot으로 지정하겠습니다. 선택적으로 저자와 그의 웹사이트 또는 프로필을 표시합니다. 필요한 경우 기호, 거래 기간 어드바이저의 매개변수를 추가합니다. 두 번 클릭하면 매개변수가 활성화되고 변수의 이름이나 값을 클릭하면 제안된 기본값을 변경할 수 있습니다. 원하는 기호를 설정할 수 있습니다. 나는 그것을 EA가 작동할 차트에서 현재 것으로 정의했습니다. 거래 신호의 가능성을 높이기 위해 시간 프레임을 M15로 설정했습니다.

라이트파이낸스: MQL5에서 전문가 고문을 작성하는 방법

계속 진행합시다. 이제 신호와 설정을 선택해야 합니다. 여기서 개발자가 제안한 신호의 다양한 조합을 즉석에서 시도할 수 있습니다. 이러한 신호는 전문가가 거래를 할 수 있는 이벤트를 생성합니다.

라이트파이낸스: MQL5에서 전문가 고문을 작성하는 방법

mql5.com에서 모니터링하는 신호를 포함하여 이 섹션에 사용자 정의 신호를 추가할 수 있습니다. 플랫폼에는 기본적으로 다음 옵션이 제공됩니다.

라이트파이낸스: MQL5에서 전문가 고문을 작성하는 방법

나는 "두 평균의 교차점에서 거래"를 선택하고 기간을 21과 55로 설정했습니다. 오탐의 수를 줄여야 하는 경우 너무 짧은 기간을 선택하는 것은 바람직하지 않습니다. 현재 기호를 그대로 둡니다. 예를 들어  EURJPY를 거래하고 동일한 EURJPY의 가격 데이터에 적용된 이동 평균에서 신호를 수신합니다. 귀하의 전략이 다른 사람의 행동에 따라 상품을 거래하는 것과 관련된 경우 여기에서 다른 기호를 선택하십시오. 또한 시간 프레임을 M15로 설정했습니다.

라이트파이낸스: MQL5에서 전문가 고문을 작성하는 방법

확인합니다. EA에 대한 이벤트를 생성할 현재 기호, 시간 프레임에 대한 신호가 추가되었음을 알 수 있습니다.

라이트파이낸스: MQL5에서 전문가 고문을 작성하는 방법

추적 손절 모드로 이동합니다. 여기에서 고정 크기 제한을 선택했습니다. 나는 또한 150 포인트에 손절매를 설정하고 200 포인트에서 이익을 얻습니다.

라이트파이낸스: MQL5에서 전문가 고문을 작성하는 방법

다음으로 거래 계좌에 대한 5가지 자금 관리 모드 중 하나를 선택할 수 있습니다. 거래는 다음과 같이 가능합니다:

  • 고정 거래량;
  • 고정 마진;
  • 고정 위험;
  • 최소 허용 거래량;
  • 최적화된 거래량.

라이트파이낸스: MQL5에서 전문가 고문을 작성하는 방법

저는 계좌에 있는 자금의 1%의 고정 위험으로 거래를 결정했습니다.

라이트파이낸스: MQL5에서 전문가 고문을 작성하는 방법

완료를 클릭하고 수익을 얻으세요! 코드를 한 줄도 작성하지 않고 Expert Advisor를 만들었습니다.

소스를 좀 더 자세히 살펴보고 약간의 분석을 수행해 보겠습니다.

라이트파이낸스: MQL5에서 전문가 고문을 작성하는 방법

테이블의 머리와 속성 - 모든 것이 익숙합니다. 그런 다음 라이브러리 모듈이 포함됩니다. 전문가는 우리의 로봇입니다. MACross는 이동 평균 교차를 위한 신호 생성기, TrailingFixedPips는 제한 수준 제어 모듈, MoneyFixedRisk는 위험 관리 모듈입니다. 그런 다음 응용 프로그램과 상호 작용하기 위한 인터페이스를 정의하는 입력 변수를 포함하는 설정입니다. 낯익지 않나요? 당연한 것입니다! Expert Advisor 생성 마법사에서 설정합니다. 앞으로 여기에서 기본값이 변경될 수 있습니다.

다음으로 CExpert 형식의 자동 전역 변수를 선언하고 기본값으로 초기화합니다. 객체의 경우 이는 기본 생성자가 호출되었음을 의미합니다. OnInit 본체에서 EA가 초기화되고 신호, 필터가 생성되고 설정에 지정된 값으로 초기화됩니다. 다음은 코드의 양을 시각적으로 줄이기 위해 초기화 결과의 성공 여부와 디스크립터 유효성 검사를 모두 제거한 코드입니다.

라이트파이낸스: MQL5에서 전문가 고문을 작성하는 방법

아래에서 OnDeinit, OnTick, OnTimer, OnTrade 기능을 볼 수 있습니다. 각각은 단순히 CExpert 클래스의 해당 메서드를 호출합니다.

라이트파이낸스: MQL5에서 전문가 고문을 작성하는 방법

자세히 보면 Include -> Experts 폴더의 왼쪽 네비게이터에서 생성기에서 사용할 수 있는 신호와 모듈을 볼 수 있습니다. 따라서 몇 가지 특수 솔루션을 생성기에 추가하고 몇 번의 클릭으로 필요에 따라 생성할 수 있습니다.

코드를 컴파일해 봅시다. 0 오류와 0 경고는 성공입니다. 전략 테스트 모드를 시작하려면 Ctrl과 F5를 동시에 누르거나 상단의 그래픽 메뉴에서 버튼을 클릭합니다.

라이트파이낸스: MQL5에서 전문가 고문을 작성하는 방법

전략 테스터의 설정에서 제어권이 MetaTrader 클라이언트 터미널로 이전됩니다. 그런 다음 테스트할 파일을 선택하고 나머지 매개변수(심볼, 기간, 내역 깊이, 거래 계정의 잔액, 레버리지 등)를 구성합니다. 많은 설정이 있으며 각각에 대한 설명이 참조 파일에 있습니다 . 설정, 테스트 모드에 대한 자세한 정보는 테스터에 초점을 맞추고 F1을 누르십시오.

라이트파이낸스: MQL5에서 전문가 고문을 작성하는 방법

시작하려면 테스터의 오른쪽 하단 모서리에 있는 시작을 누르고 최적화 없이 테스트가 발생하면 전략에 대한 시각화 모드를 선택할 수 있습니다.

 개발자는 https://www.mql5.com/ko/docs/standardlibrary/expertclasses에서 각 내장 모듈과 신호에 대한 설명을 친절하게 제공했습니다. 질문에 대한 지식을 넓히기 위해 주저하지 말고 문서를 참조하십시오.

MQL4, MQL5 언어의 장단점

주요 단점은 이러한 언어의 목적에 있습니다. MetaQuotes Querying Language는 MetaTrader 전용 애플리케이션 작성을 위한 언어입니다. MetaEditor 환경에서만 MQL 코드를 컴파일과 디버그할 수 있습니다. MetaTrader 클라이언트 터미널만이 프로그램을 실행할 수 있습니다. 수동 메모리 관리가 없습니다. 여전히 스택 또는 동적 범위에서 변수를 생성하도록 선택하지만 두 경우 모두 가상 주소에 액세스할 수 없습니다.

그는 훨씬 더 많은 장점을 가지고 있습니다. 특히 정적으로 유형이 지정된 언어로 이미 개발한 경험이 있는 경우 진입 임계값이 낮습니다. C, C++ 수준에서 고성능. 캡슐화, 확장성, 상속, 다형성, 클래스의 가상 메서드의 객체 지향 프로그래밍 스타일 지원합니다. 클래스와 함수에 대한 템플릿, 즉 파라메트릭 다형성을 생성하는 것이 가능합니다. 이 모든 것을 통해 코드를 여러 번 재사용할 수 있습니다. 무료 인프라에는 거래 터미널, 개발 환경, 전략 테스터, 포함된 라이브러리가 포함됩니다.

MQL4에서 MQL5로의 변환

이 기사의 언어 기능에 대한 섹션에서 이전에 제시된 로봇의 예를 사용하여 한 버전에서 다른 버전으로 프로그램을 업데이트하는 변환을 고려해 보겠습니다. 이렇게 하려면 MetaEditor 5에서 빈 Expert Advisor를 만들고 MQL4_Example_EA Expert Advisor의 소스 코드를 복사합니다. 변경 없이는 이 코드를 컴파일할 수 없으며 시도할 때 많은 오류가 발생합니다.

처음에는 몇 가지 점을 제외하고는 거의 아무것도 변경되지 않습니다.

  1. 전처리기 지시문에서 #property strict를 제거하여 MQL4 코드를 컴파일할 때 의미가 있습니다.
  2. 사용 가능한 위치에 따라 특별한 방식으로 OnInit에서 초기화하기 위해 EA 초기화 함수 위에 Direction 정적 변수 생성을 전송합니다. 앞으로는 거래 과정 중에 EA 설정을 변경할 수 있습니다.

모든 미결 거래를 검색할 필요 없이 내장된 PositionSelect 기능을 사용하여 MQL5의 모든 기호에 대한 거래를 더 쉽게 선택할 수 있습니다.

라이트파이낸스: MQL4에서 MQL5로의 변환

OnTick 기능을 충분히 고려해봅시다. PositionSelect를 사용하여 심볼의 열린 위치를 확인합니다. 그런 사람이 없으면 if 본문으로 들어가서 거래를 열기 위한 요청을 보낼 준비를 합니다. MQL5는 MQL4의 많은 매개변수와 달리 요청을 생성하기 위한 MqlTradeRequest 구조를 친절하게 제공합니다. 이제 각 분야를 개별적으로 고려하지 않을 것입니다. MQL4와 마찬가지로 7가지 필수 매개변수 중 거래 기호, 거래량, 방향, 요청 가격과의 편차 4가지가 있습니다. 거래의 방향에 따라 나머지 3개(시가, 손절매, 차익)를 계산합니다. 우리는 순서대로 구조를 채 웁니다. 이제 부동 소수점 숫자를 정규화할 필요가 없으므로 숫자 변수가 필요하지 않습니다.

최신 버전의 언어로 요청을 보내는 것이 훨씬 더 간결해 보입니다. OrderSend 함수 실행 결과에 대한 모든 정보는 이제 MqlTradeResult에서 반환됩니다.

라이트파이낸스: MQL4에서 MQL5로의 변환

디버깅과 일련의 테스트 후에 다음 코드로 끝났습니다. 크기는 변경되지 않았지만 OnInit의 초기화 단계에서 추가 작업이 필요한 논리를 변경했습니다.

라이트파이낸스: MQL4에서 MQL5로의 변환

요약해봅시다. MQL4에서 MQL5로 애플리케이션을 업그레이드하는 것은 쉽습니다. MQL에 대한 기본적인 지식이 있다면 직접 해보는 것도 어렵지 않을 것입니다.

또한 가장 일반적인 MQL 질문 중 몇 가지를 특별히 선택하여 간략하고 철저하게 답변하려고 노력했습니다.

MQL4, MQL5 자주 묻는 질문

MetaQuotes Language는 C++ 원형과 매우 유사한 구문을 사용하여 정적 약한 유형을 사용하여 MetaTrader 거래 플랫폼에 응용 프로그램을 작성하는 데 사용되는 고급 프로그래밍 언어입니다. MetaQuotes Language는 다중 패러다임 개념을 구현합니다. 코드를 작성하는 동안 객체 지향, 기능, 절차 또는 혼합 접근 방식을 사용할 수 있습니다. OOP는 캡슐화, 상속, 다형성을 지원합니다. 함수, 클래스 템플릿을 사용할 수 있습니다. 불행히도 컴파일 타임 계산과 함께 메타프로그래밍을 사용하는 것은 불가능합니다.

MQL로 프로그램을 작성하려면 MetaTrader 클라이언트 터미널을 설치해야 합니다. 전달 패키지에는 MetaEditor라고 하는 MQL에서 애플리케이션을 개발하기 위한 환경이 포함되어 있습니다. 기본 메뉴 도구 -> MetaQuotes Language Editor(F4)를 사용하여 시작합니다. 이제 첫 번째 MQL 프로그램을 작성할 준비가 되었습니다.

라이트파이낸스: MQL4, MQL5 자주 묻는 질문



거래 터미널에서 이러한 프로그램을 실행한 결과는 다음과 같습니다.

라이트파이낸스: MQL4, MQL5 자주 묻는 질문

Mq4는 간단한 텍스트 파일입니다. 이 확장을 통해 운영 체제는 파일 자체를 MetaEditor 개발 환경과 자동으로 연결할 수 있습니다. ex4 파일은 텍스트로 읽을 수 없고 바이너리 코드로 데이터를 포함하는 실행 파일입니다.

컴파일하는 동안 mq4 프로그램 코드는 실행 가능한 ex4 코드로 변환됩니다. 이 변환은 간단하며 프로그램을 만들 때 매우 자주 발생합니다. 이것이 바로 컴파일러가 하는 일입니다.

역 프로세스는 실행 가능한 ex4 코드를 mq4 텍스트 코드로 디컴파일(디스어셈블리)하는 경우가 거의 없으며 법적 근거가 없는 경우가 많습니다. 오픈 소스 프로젝트는 일반적으로 배포, 변환, 사용에 대한 규칙에 동의하는 모든 사람에게 소스 코드를 제공합니다. 나머지 프로젝트는 저작권법에 따라 모든 개발을 보호합니다. 디컴파일을 수행하기 위한 표준 도구는 없습니다.

ex4 파일의 실행 코드를 프로그램 코드로 변환해야 한다면? 다음은 구현의 복잡성이 증가하는 순서대로 이 질문에 대한 몇 가지 답변입니다.

  1. 프로그램 작성자에게 연락하여 코드를 얻는 조건을 찾습니다.
  2. 당신의 ex4 프로그램에서 로직을 구현할 수 있는 프로그래머를 찾아 그와 협상합니다.
  3. MQL을 배우고 ex4와 같은 형태로 스스로 프로그램을 작성합니다. 이 길은 쉽지는 않지만 다른 어떤 것과도 비교할 수 없는 가능성을 확장할 것입니다.
  4. 스스로 또는 다른 사람의 도움을 받아 디컴파일을 수행합니다. 저작권법에 의한 책임을 인지하시기 바랍니다.

Mq4, mq5 파일은 MQL 코드를 텍스트 형식으로 포함하는 단순 텍스트 파일입니다. 자신의 소스 코드를 공유하고 싶지 않다면 이 상황에서 가장 쉬운 방법은 이 형식으로 파일을 배포하지 않는 것입니다.

코드를 보호하는 간단한 방법은 ex4(ex5) 형식으로 배포하는 것입니다. 이 형식의 파일은 mq4(mq5) 코드를 컴파일할 때 MetaEditor에 의해 생성됩니다. 언어 규칙에 따라 텍스트의 지침은 실행 가능한 바이너리 코드로 변환되며, 이는 차트에 조언자, 스크립트 또는 표시기를 추가할 때 터미널에서 실행됩니다.

실행 가능한 코드를 다시 원본으로 분해하는 것은 쉬운 일이 아니므로 소스 코드를 보호하는 데 도움이 됩니다. 어쨌든 소스 코드로 디컴파일하면 코드의 의미 있는 변수 이름이 손실되고 프로그램 논리를 이해하기가 훨씬 더 어려워집니다.

MetaQuotes Language는 C++에서 상속된 정적으로 타이핑이 약한 고급 OOP 프로그래밍 언어입니다. MQL5는 MetaTrader 5 플랫폼과 함께 출시된 MQL4 언어의 논리적 개발입니다. 나중에 MQL4의 개발에 상당한 영향을 미치고 업데이트에 기여했습니다.

MQL5에는 Expert Advisors를 생성하는 도구가 있어 손으로 코드를 작성할 필요를 완전히 포기할 수 있습니다. 몇 번의 클릭으로 소스 코드와 함께 거래 로봇을 받게 됩니다. 거래를 위한 설정은 신호를 사용하여 수행됩니다. 거래 계정 상태의 제어는 거래 터미널과 함께 제공되는 위험과 자금 관리 전략을 기반으로 합니다.

표시기를 다운로드하는 것은 컴퓨터에 다른 파일을 다운로드하는 것과 다르지 않습니다. MQL은 데스크톱 버전의 MetaTrader 클라이언트 터미널에서만 사용할 수 있으므로 컴퓨터에서 수행해야 합니다. 터미널의 작업 디렉토리를 엽니다(파일 -> 데이터 폴더 열기). 그런 다음 MQL/indicators 디렉토리로 이동하여 로드된 표시기를 여기에 붙여넣습니다. 터미널을 다시 시작하면 네비게이터에서 표시기를 사용할 수 있습니다. 차트로 이동하고 입력 매개변수를 조정하기만 하면 됩니다.

실제로 모든 MQL4 또는 MQL5 프로그램은 MetaQuotes Language Editor의 다섯 번째 버전을 사용하여 생성됩니다. 언어의 주 버전과 부 버전 간에는 이전 버전과의 호환성이 있습니다. 이 경우 유일한 제한 사항은 MetaQuotes Server 자체입니다. 플랫폼의 네 번째 버전에서는 일부 기능과 구조가 누락되었습니다. 서버 5차 버전에서 거래 처리 로직이 부분적으로 변경되었습니다. 지표의 내부 구조에도 차이가 있습니다. 네 번째 버전에서는 최대 8개의 표시기 버퍼를 사용할 수 있습니다. MetaTrader 5에서는 버퍼 수가 21개로 늘어났습니다.

내장된 iCustom 기능을 사용하면 지표의 신호를 사용하여 EA 내부의 거래 논리를 구현할 수 있습니다. 자신의 지표가 있고 어드바이저에서 거래 신호를 생성하여 거래 작업을 수행하려면 이를 위해 iCustom을 사용해야 합니다. 문서를 살펴보겠습니다. 여기에서 MQL4의 다음 정의를 볼 수 있습니다.

MQL5 정의:

라이트파이낸스: MQL4, MQL5 자주 묻는 질문



기본적으로 함수는 언어의 네 번째 버전과 다섯 번째 버전에서 서명이 다르더라도 동일한 작업을 수행합니다. 각 매개변수를 자세히 살펴보겠습니다.
  1. 문자열 기호 라인: 계산될 기호입니다.
  2. 시간 프레임: MQL4에서는 정수 유형 int이고 MQL5에서는 정수이지만 시간 프레임의 열거를 포함하는 열거형이기도 합니다.
  3. 문자열 매개변수 이름: 지표에 대한 경로(예: 다른 디렉토리에 있는 경우)와 지표 이름을 계산하려는 확장명과 함께 전달해야 합니다. 다음으로 사용하려는 지표에 필요한 매개변수가 전달됩니다.
  4. iCustom 기능에 의해 실행될 표시기의 매개변수 목록입니다. 그 수는 지표에서 필요한 값을 얻는 데 필요한 인수의 수에 따라 다릅니다. 함수가 다양한 수의 매개변수를 취한다는 것은 의미가 있습니다. 예를 들어, Alligator의 경우(MetaTrader 클라이언트 터미널 설치 패키지에 포함되어 있음):

    라이트파이낸스: MQL4, MQL5 자주 묻는 질문

    또는 예를 들어 Ichimoku의 경우 다른 변수 집합이 됩니다.

    라이트파이낸스: MQL4, MQL5 자주 묻는 질문

    따라서 첫 번째 경우에는 올바른 값을 얻기 위해 6개의 매개변수를 함수에 전달하고 두 번째 경우에는 3개의 매개변수를 전달해야 합니다.

  5. 네 번째 버전의 MQL4에는 두 개의 매개변수가 더 있습니다. 첫 번째는 표시줄 인덱스를 나타내는 정수 모드이며 데이터 버퍼의 내부 인덱싱을 위해 런타임에서 사용됩니다.
  6. 다음 정수 이동은 타임라인을 따라 표시기가 앞으로 또는 뒤로 이동함을 나타냅니다.

MQL은 MetaTrader 거래 서버와 클라이언트 터미널, 언어 편집기를 포함한 모든 관련 응용 프로그램이 작성된 C++ 언어의 상속자입니다. 불행히도 MQL을 원형과 비교하면 언어가 지연되어 개발되고 있음이 분명합니다. 현재 MQL 기능은 2003 C++ 표준의 기능에 해당합니다. MQL은 매우 강력한 언어이며 프로그래머와 개발자의 현재 요구 사항의 99%를 처리할 수 있습니다.

언뜻보기에 버전 4와 5의 프로그램 코드는 약간 다르지만 여전히 차이점이 있습니다. 다섯 번째 버전에서는 네 번째 버전의 모든 매크로가 열거형으로 대체되었습니다.

사용자 지정 응용 프로그램 실행을 위한 이벤트 모델이 확장되었습니다. OnTrade, OnTradeTransaction, OnTesterInit, OnTesterDeinit, OnTesterPass와 같은 이벤트 핸들러 라인이 나타났습니다. 전략 테스터 모드에서 OnTick, OnTimer의 잘못된 동작이 수정되었습니다. OnTimer 함수는 이제 MQL4보다 1000배 더 높은 타이머 샘플링 속도로 실행할 수 있습니다. 밀리초와 비교하여 마이크로초당 한 번입니다.

MQL5는 거래 주문을 보내는 논리와 이에 응답하는 메커니즘을 변경했습니다. MQL4의 여러 거래 기능이 OrderSend라는 서로 다른 작동 모드로 하나로 결합되었습니다. MetaTrader 5의 거래 프로세스 자체가 네 번째 플랫폼의 거래와 다르기 시작했습니다. 헤지 거래를 허용하는 기능과 함께 포지션 네팅 모드가 도입되었습니다. MT4 주문 외에도 포지션과 거래가 등장했습니다. 언어에는 이제 비동기 모드에서 거래 서버에 요청을 보내기 위한 OrderSendAsync 기능이 있습니다.

MQL5의 모든 MQL4 매크로는 열거로 대체되었으므로 컴파일러는 이제 개발자에게 암시적 유형 변환을 표시합니다.

MetaTrader 5를 사용하면 MetaTrader 4의 9개 시간 프레임에 비해 21개의 표준 시간 프레임으로 작업할 수 있습니다. MQL5의 지표는 차트에서 더 많은 수의 버퍼를 수신했습니다.

MQL4를 MQL5로 변환하는 것은 초보자 프로그래머에게는 사소한 작업이지만 주의와 인내가 필요합니다. 컴파일러는 자체적으로 MQL5와 호환되지 않는 대부분의 것을 보여줄 것입니다.

거래 주문을 처리하고 서버로 보내는 데 주의를 기울여야 합니다.

MQL4에서 거래 요청은 OrderSend 기능과 이에 대한 매개변수 세트를 사용하여 구현됩니다. 주문 수정, 보류 주문 삭제는 별도의 기능으로 구현됩니다. 쿼리 결과는 함수 끝에서 반환된 부울 값에 의해 결정됩니다. 결과 분석은 GetLastError 함수를 사용하여 서버 반환 코드를 결정하는 것으로 축소됩니다.

MQL5에는 거래 주문을 서버로 보내기 위한 특별한 MqlTradeRequest 구조가 있습니다. 적절한 작업 유형과 주문 유형으로 채워야 합니다. 결과를 얻으려면 서버로부터 응답을 받기 위해 OrderSend를 호출할 때 참조로 MqlTradeResult 구조의 인스턴스를 선언하고 전달하고, OrderSend를 호출할 때 이전에 전달된 이종 매개변수를 단일 MqlTradeRequest 구조로 결합하고 서버로 보내야 합니다. 응답으로 받은 MqlTradeResult 구조를 분석합니다. 필요한 모든 정보는 서버의 응답에서 사용할 수 있습니다.

코드의 이벤트 핸들러에 특히 주의하십시오. MQL5에는 OnTesterTick, OnTesterTimer, OnBookEvent가 추가로 있습니다. 거래 터미널의 이벤트에 따라 다양한 애플리케이션이 실행됩니다.

전문가용:

  • OnInit, OnDeinit, OnTimer, OnTick, OnChartEvent, OnTester


지표의 경우:
  • OnInit, OnDeinit, OnTimer, OnCalculate, OnChartEvent, OnTester


스크립트의 경우:
  • OnStart(이 핸들러는 표시기, 스크립트에서 사용할 수 없음).


포함된 라이브러리는 다른 대규모 프로젝트에서만 사용되기 때문에 실행 기능이 없습니다.

또 다른 차이점은 미리 정의된 변수 Ask, Bid와 시가 [], 고가 [], 저가 [], 종가 [], 볼륨 [], 시간 [] 배열이 MQL5에 없다는 것입니다. 따라서 시계열 CopyRates, CopyOpen, CopyHigh 등에 액세스하기 위한 내장 함수를 사용하여 이 데이터를 독립적으로 얻으려면 프로그램 코드를 수정해야 합니다. 동적 배열을 선언하고 데이터를 가져옵니다. 결과를 제공하는 함수는 자체적으로 배열의 크기 조정을 처리합니다.


추신. 저희의 게시물이 마음에 드셨나요? 소셜 네트워크에서 공유하세요. 최고의 "감사합니다"가 될 것입니다 :)

유용한 링크:

  • 여기 에서 신뢰할 수 있는 중개인과 거래하는 것이 좋습니다. 이 시스템을 사용하면 혼자서 거래하거나 전 세계의 성공적인 거래자를 복사할 수 있습니다.
  • 라이트파이낸스 플랫폼에서 입금 보너스 50% 을(를) 받으려면 저희의 프로모션 코드 BLOG 를 사용하세요. 거래 계정을 예금 하는 동안 해당 필드에 이 코드를 입력하기만 하면 됩니다.
  • 거래자를 위한 전보 채팅: https://t.me/litefinance. 저희는 신호와 거래 경험을 공유하고 있습니다
  • 고품질 분석, 외환 리뷰, 교육 기사 및 트레이더를 위한 기타 유용한 정보를 제공하는 텔레그램 채널 https://t.me/litefinance
MQL4,MQL5의 프로그래밍 언어인 MetaQuotes: 차이점 및 프로그래밍 튜토리얼

이 기사의 내용은 저자의 의견으로, 라이트파이낸스의 공식 입장을 반영하지는 않습니다. 이 페이지에 게시된 자료는 정보 제공 목적으로만 제공되며, 2014/65/EU 지침의 목적에 대한 투자 조언을 제공하는 것으로 간주되어서는 안 됩니다.
이 글은 저작권법에 따라 지적 재산으로 간주되며, 동의 없이 복사 및 배포하는 행위는 금지되어 있습니다.

이 기사 평가
{{value}} ( {{count}} {{title}} )
거래 시작
소셜 네트워크에서 저희를 팔로우하세요!
한국어 웹 가이드
라이브 채팅
피드백 남기기
Live Chat