MQL4에서 MQL5로 이전

MQL5는 MQL4 프로그래밍 언어의 이전 버전인 MQL4 프로그래밍 언어의 발전으로 수많은 지표, 스크립트 및 Expert Advisor가 작성되었습니다. 새로운 프로그래밍 언어가 이전 세대의 언어와 최대한 호환된다는 사실에도 불구하고, 이 언어들 사이에는 여전히 약간의 차이가 있습니다. 그리고 프로그램을 전송할 때 이러한 차이점에 유의해야 합니다.

이 섹션에는 MQL4를 알고 있는 프로그래머를 위해 새로운 MQL5 언어에 대한 코드 적용을 용이하게 하기 위한 정보가 수록되어 있습니다.

먼저 다음 사항에 유의해야 합니다.

  • 새 언어에 start(), init() 및 deinit() 함수가 없습니다.
  • 지표 버퍼 수에 제한이 없습니다.
  • DLL은 Expert Advisor(또는 다른 mql5 프로그램)를 로드한 후 즉시 로드됩니다.
  • 논리적 조건의 점검이 단축됩니다.
  • 배열의 한계가 초과되면 현재 퍼포먼스가 종료됩니다(심각한 오류의 출력으로).
  • C + +와 같은 연산자의 우선 순위.
  • 언어는 암묵적 유형의 타입 캐스트를 제공합니다(심지어 문자열부터 숫자까지).
  • 로컬 변수는 문자열을 제외하고 자동으로 초기화되지 않습니다.
  • 공통 로컬 배열은 자동으로 삭제됩니다.

특수 함수 init, start, deinit

MQL4 언어는 지표, 스크립트 또는 Expert Advisor에서 사용할 수 있는 세 가지 미리 정의된 함수만 포함하고 있습니다(*.mqh 및 라이브러리 파일 포함 고려하지 않음). MQL5에는 그러한 함수는 없지만, 그 유사점은 있습니다. 표에는 함수의 근사치가 나와 있습니다.

MQL4

MQL5

init

OnInit

start

OnStart

deinit

OnDeinit

함수 OnInitOnDeinit는 MQL4에서 init 및 deinit과 동일한 역할을 수행합니다. 이 함수는 mql5 프로그램의 초기화 및 초기화 중에 수행되어야 하는 코드를 찾기 위해 설계되었습니다. 이러한 함수의 이름을 적절하게 바꾸거나 그대로 둘 수 있지만 해당 위치에 해당 함수의 호출을 추가할 수 있습니다.

예:

void OnInit()
  {
//--- 초기화 시 함수 호출
   init();
  }
void OnDeinit(const int reason)
  {
//--- 초기화 취소 시 함수 호출
   deinit();
//---
  }

시작 함수는 스크립트에서만 OnStart로 대체됩니다. Expert Advisor 및 지표에서 OnTickOnCalculate로 이름을 각각 변경해야 합니다. mql5 프로그램 작동 중에 실행할 코드는 다음 세 가지 함수에 있어야 합니다.

mql5-program

main function

스크립트

OnStart

지표

OnCalculate

Expert Advisor

OnTick

지표 또는 스크립트 코드가 주 함수을 포함하지 않거나 함수명이 필요한 기능과 다를 경우 이 함수의 호출이 수행되지 않습니다. 즉, 스크립트의 소스 코드에 OnStart가 포함되어 있지 않으면 해당 코드가 Expert Advisor로 컴파일됩니다.

지표 코드에 OnCalculate 함수가 없는 경우 이러한 지표를 컴파일할 수 없습니다.

미리 정의된 변수

MQL5에는 Ask, Bid, Bars와 같은 사전 정의된 변수가 없습니다. 변수 포인트 및 숫자 스펠링은 약간의 차이가 있습니다.

MQL4

MQL5

Digits

_Digits

Point

_Point

 

_LastError

 

_Period

 

_Symbol

 

_StopFlag

 

_UninitReason

시계열에 액세스

MQL5에는 Open[], High[], Low[], Close[], Volume[] 및 Time[]과 같은 사전 정의된 시계열은 없습니다. 이제 시계열의 필요한 깊이를 설정하여 시계열에 액세스할 수 있는 함수를 사용할 수 있습니다.

Expert Advisor

MQL5의 Expert Advisors는 MQL4에서와 같이 새로운 틱 수신 - OnTick의 이벤트를 처리하는 함수의 의무적인 존재는 요구하지 않습니다(새 눈금 수신 시 MQL4의 시작 함수가 실행됨). MQL5에서 Expert Advisor는 다음과 같은 여러 유형의 이벤트에 대해 미리 정의된 핸들러 함수를 포함할 수 있습니다.

  • OnTrade - 트레이드 이벤트;
  • OnChartEvent – 키보드와 마우스의 입력 이벤트, 그래픽 개체 이동 이벤트, LabelEdit 개체의 입력 필드에 있는 텍스트 편집 완료 이벤트;
  • OnBookEvent – 마켓 상태 변경의 깊이에 대한 이벤트.

커스텀 지표

MQL4에서는 지표 버퍼 수가 제한되고 8을 초과할 수 없습니다. MQL5에서는 그러한 제한이 없지만, 각 지표 버퍼는 터미널에서 그것의 위치를 위해 메모리의 특정 부분을 할당해야 하기 때문에 새로운 가능성을 남용하지 않아야 한다는 것을 기억해야 합니다.

MQL4는 6가지 유형의 커스텀 지표 플로팅만 제공했지만 MQL5는 이제 18가지 그리기 스타일을 제공합니다. 도면 형식의 이름은 바뀌지 않았지만 지표의 그래픽 표현 이념은 크게 바뀌었습니다.

지표 버퍼의 색인화 방향도 다릅니다. 기본적으로 MQL5에서 모든 지표 버퍼는 공통 배열의 동작을 가지고 있습니다. 즉, 0 인덱스 요소는 내역에서 가장 오래된 요소이며 인덱스가 증가함에 따라 가장 오래된 데이터에서 가장 최근의 것으로 이동합니다.

MQL4에서 보존된 커스텀 지표로 작동하는 유일한 기능은 SetIndexBuffer입니다. 그러나 호출이 변경되었습니다. 이제 지표 버퍼에 연결된 배열에저장할 데이터 유형을 지정해야 합니다.

커스텀 지표의 속성도 변경 및 확장되었습니다. 시계열 접근을 위한 새로운 기능이 추가되었으므로 총 계산 알고리즘을 다시 고려해야 합니다.

그래픽 오브젝트

MQL5의 그래픽 개체 수가 크게 증가했습니다. 또한 그래픽 객체는 모든 시간대의 차트에서 1초의 정확도로 시간 내에 배치될 수 있습니다. 이제 객체 앵커 포인트는 현재 가격 차트에서 막대 오프닝 시간으로 반올림되지 않습니다.

이제 화살표, 텍스트 및 레이블 개체의 경우 바인딩 방법을 지정하고, 레이블, 단추, 차트, 비트맵 레이블 및 편집 개체의 경우 개체가 연결된 차트 모서리를 설정할 수 있습니다.