В данной статье рассматриваются аспекты проектирования и разработки системы пользовательских событий графика в среде MQL5. Предлагается пример подхода для классификации событий. Приводится программный код событийного класса и класса-обработчика пользовательских событий.
상황은 다음과 같습니다. 차트에 OBJ_TEXT 개체 를 만듭니다. 그런 다음 차트에서 이 OBJ_TEXT를 수동으로 제거합니다. 그런 다음 차트에서 원격 개체를 찾으려고 합니다. 오류가 발생합니다(여기서는 모든 것이 논리적입니다. 개체가 삭제되었으므로 찾을 수 없음을 의미합니다). 다음으로 ObjectMove를 사용하여 원격 OBJ_TEXT 개체의 기준점을 이동하려고 하지만 오류가 발생하지 않습니다.
질문: 원격 OBJ_TEXT의 기준점을 이동하려고 할 때 ObjectMove에서 오류가 발생해야 합니까?
#define Error_Message_Exp Alert(__FILE__+": "+__FUNCTION__+": Error at line "+(string)__LINE__+". Last Error code: "+(string)GetLastError())
터미널에서 실행 시: 코드가 오류 없이 정상적으로 작동합니다. 지표가 차트에 표시되고 변수 " Indic_Handle[Indic_Total-1] "에 핸들 값이 할당됩니다.
그리고 테스터 및/또는 시각화 도우미에서 실행될 때. 로그에 오류가 출력됩니다.
2014.12.15 21:16:10 Core 1 2014.01.01 00:00:00 Alert: GA_Incl.mqh: F_Offspr_Init: Error at line 149. Last Error code: 4014
(줄 "149"는 줄 "148" 아래의 줄 " {Error_Message;return(false);} ": "if( ChartIndicatorAdd (0,0,Indic_Handle[Indic_Total-1])==false)"
당연히 테스터 환경과 단말 환경에서 다르게 실행되는 "ChartIndicatorAdd" 함수를 실행할 때 오류가 발생한다.
오류 코드를 디코딩해도 명확성이 추가되지 않습니다.
ERR_FUNCTION_NOT_ALLOWED
4014
시스템 기능을 호출할 수 없습니다.
포럼에서 다른 사용자와 동일한 상황에서 이러한 오류가 발생했다는 언급을 찾았지만 그의 질문에는 답변이 없었습니다. (https://www.mql5.com/en/forum/1111/page763#comment_208678)
오류에도 불구하고 테스터에서 프로그램을 계속 실행하면 필요한 지표가 여전히 차트에 표시된다는 것을 알았습니다. 그러나 동시에 나타난 인디케이터의 핸들은 Indic_Handle[Indic_Total-1] 변수의 핸들 값과 일치하지 않습니다. (나중에 프로그램 실행 시 핸들로 인디케이터에 접근) 그리고 ChartIndicatorAdd 명령을 호출한 후 몇 틱 후에 인디케이터 자체가 생성됩니다.
그건 그렇고, LMB를 눌렀다가 떼면 LMB가 눌려지면 버튼이 눌러지게 하는 방법을 누가 압니까?
그렇지 않으면 버튼을 누르려면 눌렀다가 떼야 하고 버튼을 놓으려면 눌렀다가 떼야 합니다, 넌센스)
추신: 물론 LMB를 시작한 직후 속성을 변경할 수 있지만 실제로 이렇게 합니까? )
그건 그렇고, LMB를 눌렀다가 떼면 LMB가 눌려지면 버튼이 눌러지게 하는 방법을 누가 압니까?
그렇지 않으면 버튼을 누르려면 눌렀다가 떼야 하고 버튼을 놓으려면 눌렀다가 떼야 합니다, 넌센스)
추신: 물론 LMB를 시작한 직후 속성을 변경할 수 있지만 실제로 이렇게 합니까? )
예 . 자신만의 방식으로 원하는 경우 개체의 상태를 직접 제어해야 합니다. )
아무리 그래도 LMB를 눌렀을 때 버튼이 눌려지지 않고, LMB를 놓을 때만 눌려지는 것, 넌센스)
추신: 버튼을 누르시겠습니까? 그녀를 놓아 줘 )
그러나 테스터에서 OnChartEvent 가 작동하지 않는다는 점을 고려하여 다르게 하면 테스터에서 버튼으로 작업을 전혀 할 수 없습니다.
아무리 그래도 LMB를 눌렀을 때 버튼이 눌려지지 않고, LMB를 놓을 때만 눌려지는 것, 넌센스)
추신: 버튼을 누르시겠습니까? 그녀를 놓아 줘 )
그러나 테스터에서 OnChartEvent 가 작동하지 않는다는 점을 고려하여 다르게 하면 테스터에서 버튼으로 작업을 전혀 할 수 없습니다.
지금까지 많은 것들이 테스터로 작동하지 않습니다. 서비스 데스크에 글을 쓰고 업데이트를 따르는 것이 남아 있습니다. )
테스터 외부에서 원하는 방식으로 작동하도록 컨트롤에 대한 자체 핸들러를 작성해야 합니다.
아무리 그래도 LMB를 눌렀을 때 버튼이 눌려지지 않고, LMB를 놓을 때만 눌려지는 것, 넌센스)
추신: 버튼을 누르시겠습니까? 그녀를 놓아 줘 )
그러나 테스터에서 OnChartEvent가 작동하지 않는다는 점을 고려하여 다르게 하면 테스터에서 버튼으로 작업을 전혀 할 수 없습니다.
OnChartEvent() 는 일반적인 차트 이벤트와 사용자 정의 이벤트를 처리합니다. 사용자 이벤트에 관한 한 이 핸들러는 테스터에서 작동합니다!!! 내 기사 MQL5 레시피 확인 - 사용자 지정 차트 이벤트 처리 , 로봇 CustomEventProcessor 가 있습니다. 그는 테스터에서 거래 합니다.
테스터의 문제는 그래픽입니다 ... 이전에 그래픽에 대해 Service Desk에 썼습니다. 지금까지는 약속 만 ...
OnChartEvent() 는 일반적인 차트 이벤트와 사용자 정의 이벤트를 처리합니다. 사용자 이벤트에 관한 한 이 핸들러는 테스터에서 작동합니다!!! 내 기사 MQL5 레시피 확인 - 사용자 지정 차트 이벤트 처리 , 로봇 CustomEventProcessor 가 있습니다. 그는 테스터에서 거래 합니다.
테스터의 문제는 그래픽입니다 ... 이전에 그래픽에 대해 Service Desk에 썼습니다. 지금까지는 약속 만 ...
상황은 다음과 같습니다. 차트에 OBJ_TEXT 개체 를 만듭니다. 그런 다음 차트에서 이 OBJ_TEXT를 수동으로 제거합니다. 그런 다음 차트에서 원격 개체를 찾으려고 합니다. 오류가 발생합니다(여기서는 모든 것이 논리적입니다. 개체가 삭제되었으므로 찾을 수 없음을 의미합니다). 다음으로 ObjectMove를 사용하여 원격 OBJ_TEXT 개체의 기준점을 이동하려고 하지만 오류가 발생하지 않습니다.
질문: 원격 OBJ_TEXT의 기준점을 이동하려고 할 때 ObjectMove에서 오류가 발생해야 합니까?
알려주십시오. 시각화 도우미(테스터)에 표시기를 표시하려고 하면 오류 4014가 표시되지만 터미널 창에서 동일한 코드가 실행 중일 때는 이러한 오류가 발생하지 않습니다.
코드는 다음과 같습니다.
Indic_Handle[Indic_Total-1]=iMA(NULL,0,MA_Period,MA_Shift,MODE_LWMA,PRICE_CLOSE);
if(Indic_Handle[Indic_Total-1]==INVALID_HANDLE)
{Error_Message;return(false);}
if(F_If_Indic_Exist(Indic_Handle[Indic_Total-1])==false) // Проверяем есть ли уже индикатор с таким хендлом. Если нет - добавлем новый индикатор
if(ChartIndicatorAdd(0,0,Indic_Handle[Indic_Total-1])==false)
{Error_Message;return(false);}
"Error_Message" 명령은 매크로로 정의됩니다.
#define Error_Message_Exp Alert(__FILE__+": "+__FUNCTION__+": Error at line "+(string)__LINE__+". Last Error code: "+(string)GetLastError())
터미널에서 실행 시: 코드가 오류 없이 정상적으로 작동합니다. 지표가 차트에 표시되고 변수 " Indic_Handle[Indic_Total-1] "에 핸들 값이 할당됩니다.
그리고 테스터 및/또는 시각화 도우미에서 실행될 때. 로그에 오류가 출력됩니다.
2014.12.15 21:16:10 Core 1 2014.01.01 00:00:00 Alert: GA_Incl.mqh: F_Offspr_Init: Error at line 149. Last Error code: 4014
(줄 "149"는 줄 "148" 아래의 줄 " {Error_Message;return(false);} ": "if( ChartIndicatorAdd (0,0,Indic_Handle[Indic_Total-1])==false)"
당연히 테스터 환경과 단말 환경에서 다르게 실행되는 "ChartIndicatorAdd" 함수를 실행할 때 오류가 발생한다.
오류 코드를 디코딩해도 명확성이 추가되지 않습니다.
ERR_FUNCTION_NOT_ALLOWED
4014
시스템 기능을 호출할 수 없습니다.
포럼에서 다른 사용자와 동일한 상황에서 이러한 오류가 발생했다는 언급을 찾았지만 그의 질문에는 답변이 없었습니다. (https://www.mql5.com/en/forum/1111/page763#comment_208678)
오류에도 불구하고 테스터에서 프로그램을 계속 실행하면 필요한 지표가 여전히 차트에 표시된다는 것을 알았습니다. 그러나 동시에 나타난 인디케이터의 핸들은 Indic_Handle[Indic_Total-1] 변수의 핸들 값과 일치하지 않습니다. (나중에 프로그램 실행 시 핸들로 인디케이터에 접근) 그리고 ChartIndicatorAdd 명령을 호출한 후 몇 틱 후에 인디케이터 자체가 생성됩니다.
도와주세요
고맙습니다.
정확히는 인쇄되지 않습니다. 하지만 작동합니다. 그래픽으로 이벤트를 추적하십시오.