MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 251

 

안녕하세요. 두 가지 버전 mql4 및 mql5의 고문을 위한 거래 패널을 작성하고 싶습니다. 나는 아직 그래픽 개체에 익숙하지 않으므로 이동 가능한 메뉴를 만들기 위해 표준 라이브러리 의 CLabel 클래스에서 예제를 사용했습니다. mql5에서는 메뉴가 훌륭하게 작동하지만 mql4에서는 작동하지 않습니다. 차트 기간을 변경하면 메뉴 개체가 복제되고 서로에 대한 상대적 위치가 변경됩니다. 아마도 CLabel 클래스의 mql4에는 mql5에 있는 일부 메서드가 부족합니까? 이러한 문제가 발생하지 않도록 이 수업에 추가로 등록해야 할 사항이 무엇인지 알려주실 수 있나요?

또한 CLabel 클래스의 예제 코드에서 다음 행의 기능이 명확하지 않습니다.

EVENT_MAP_BEGIN(CControlsDialog) 
  
EVENT_MAP_END(CAppDialog)
 
Aleksandr Teleguz :

안녕하세요. 두 가지 버전 mql4 및 mql5의 고문을 위한 거래 패널을 작성하고 싶습니다. 나는 아직 그래픽 개체에 익숙하지 않으므로 이동 가능한 메뉴를 만들기 위해 표준 라이브러리 의 CLabel 클래스에서 예제를 사용했습니다. mql5에서는 메뉴가 훌륭하게 작동하지만 mql4에서는 작동하지 않습니다. 차트 기간을 변경하면 메뉴 개체가 복제되고 서로에 대한 상대적 위치가 변경됩니다. 아마도 CLabel 클래스의 mql4에는 mql5에 있는 일부 메서드가 부족합니까? 이러한 문제가 발생하지 않도록 이 수업에 추가로 등록해야 할 사항이 무엇인지 알려주실 수 있나요?

또한 CLabel 클래스의 예제 코드에서 다음 행의 기능이 명확하지 않습니다.


지정된 행은 Defines.mqh 파일에 작성된 매크로입니다. 그대로라면 매크로의 첫 번째 줄은 CControlsDialog 클래스의 이벤트 처리 함수로 제어를 전달한 다음 이 매크로 사이에 작성된 함수가 실행되고 마지막 매크로는 CAppDialog 클래스로 제어를 전달합니다.

 
Алексей Барбашин :

지정된 행은 Defines.mqh 파일에 작성된 매크로입니다. 그대로라면 매크로의 첫 번째 줄은 CControlsDialog 클래스의 이벤트 처리 함수로 제어를 전달한 다음 이 매크로 사이에 작성된 함수가 실행되고 마지막 매크로는 CAppDialog 클래스로 제어를 전달합니다.


감사합니다. 뭔가 명확해지기 시작했습니다) 매크로 주제에 대한 문서 링크를 줄 수 있습니까?

 
Aleksandr Teleguz :

감사합니다. 뭔가 명확해지기 시작했습니다) 매크로 주제에 대한 문서 링크를 줄 수 있습니까?


https://www.mql5.com/ru/docs/basis/preprossor/constant

Документация по MQL5: Основы языка / Препроцессор / Макроподстановка (#define)
Документация по MQL5: Основы языка / Препроцессор / Макроподстановка (#define)
  • www.mql5.com
Основы языка / Препроцессор / Макроподстановка (#define) - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

int OnDeinit()

{

경고 ("OnDeinit() 요청");

// err=StringToInteger(err);

//------------------------

반환(0);

Alert("OnDeinit() 종료");

}

//OnDeinit();-----------

변수 err은 정수로 선언됩니다.


문제가 무엇인지 명확하지 않습니다

메시지를 받았습니다

 
buyanov :

int OnDeinit()

{

Alert("OnDeinit() 요청");

// err=StringToInteger(err);

//------------------------

반환(0);

Alert("OnDeinit() 종료");

}

//OnDeinit();-----------

변수 err은 정수로 선언됩니다.


문제가 무엇인지 명확하지 않습니다

메시지를 받았습니다


질문이 무엇이며 어디에서 오류가 발생하는지 명확하지 않습니다. int 유형의 변수 err 이 있는 경우 주석 처리된 줄에서 왜 string 유형에서 int 로 변환하려고 합니까? 정확히 어디에서 오류가 발생합니까?

 
Алексей Барбашин :

질문이 무엇이며 어디에서 오류가 발생하는지 명확하지 않습니다. int 유형의 변수 err 이 있는 경우 주석 처리된 줄에서 왜 string 유형에서 int 로 변환하려고 합니까? 정확히 어디에서 오류가 발생합니까?

문제의 사실은 오류가 표시되지 않지만 경고는 암시적 변환 정수를 문자열로 제공한다는 것입니다. 믿기 어렵긴 하지만 오류가 컴파일러에 있는 것으로 의심됩니다. 어쨌든, 당신은 그것을 알아낼 필요가 있습니다.
 
buyanov : 변수 err이 정수로 선언되었습니다. 문제가 무엇인지 명확하지 않습니다. 메시지를 받았습니다.

컴파일러 메시지는 오류의 행과 위치를 지정합니다. 설명 줄(그림의 아래쪽 줄)을 클릭하면 커서가 프로그램 텍스트의 오류를 나타냅니다. DeInit 기능은 지표 또는 Expert Advisor가 차트에서 제거되기 직전에 실행됩니다. 예를 들어 여기에서 생성된 그래픽 요소를 삭제할 수 있습니다. 수행할 작업이 없으면(함수가 비어 있음) 함수를 삭제할 수 있습니다. 문자열 x=125와 같은 것이 있으면 문자열 x = (문자열)125로 수정합니다.

대신 err=StringToInteger(err); err=StringToInteger((문자열)err); 누군가는 재미있다고 해도

 
STARIJ :

컴파일러 메시지는 오류의 행과 위치를 지정합니다. 설명 줄(그림의 아래쪽 줄)을 클릭하면 커서가 프로그램 텍스트의 오류를 나타냅니다. DeInit 기능은 지표 또는 Expert Advisor가 차트에서 제거되기 직전에 실행됩니다. 예를 들어 여기에서 생성된 그래픽 요소를 삭제할 수 있습니다. 수행할 작업이 없으면(함수가 비어 있음) 함수를 삭제할 수 있습니다. 문자열 x=125와 같은 것이 있으면 문자열 x = (문자열)125로 수정합니다.

대신 err=StringToInteger(err); err=StringToInteger((문자열)err); 누군가는 재미있다고 해도


흠...

당신이 제안한대로 했다

err=StringToInteger((string)err); 줄을 Ondeinit 함수에 넣으면 오류가 발생하지 않습니다.

그러나 문자열에서 숫자로의 암시적 변환 경고는 여전히 남아 있으며 분명히 터미널을 다시 설치해야 합니다.

 
buyanov : 당신이 추천한 대로 err=StringToInteger((string)err); 라인을 Ondeinit 함수에 넣어도 오류가 발생하지 않습니다.

그러나 문자열에서 숫자로의 암시적 변환 경고는 여전히 남아 있으며 분명히 터미널을 다시 설치해야 합니다.

OnDeinit 기능 을 게시하면 살펴보겠습니다. 그리고 그녀에게 원하는 것이 무엇인지 알려주세요. 오류는 MetaEditor에 의해 발생합니다. 터미널 폴더 의 복사본이 있습니다. Alexey Viktorov 는 빠르게 다시 설치하는 방법을 말했습니다 .