좋아요, 한 번 웃어 봅시다. 이 기사는 "아무도 당신의 혀를 잡아당기지 않았다"고 당신이 쓴 글입니다.
따라서 설명할 수 없는 것을 인용문 형식으로 설명하는 것은 적어도 독자에게는 무례한 행동입니다. 질문은 예시와 주요 출처 에 대한 링크를 통해 답변해야 합니다.
불필요한 기능으로 혼란스럽고 과부하된 코드는 '초보자'를 오도할 뿐입니다.
그리고 "버튼 함수가 OnInit 함수에 배치되어 있다"는 사실은 매우 우스꽝스럽습니다!
아무도 당신의 혀를 잡아 당기지 않았습니다. 증거를 제시해 주시겠습니까? 아니면 제 진술에 대한 반박을 하시겠습니까? 참고로 아직 핸드북에 모든 것이 설명되어 있지는 않습니다. 핸드북 작업이 진행 중이며 추가 및 수정이 이루어지고 있습니다. 항상 모든 것을 직접 확인해야 합니다.
저를 믿으십시오. 귀하의 기사의 코드는 초보자에게 훨씬 더 "혼란 스럽습니다"뿐만 아니라 귀하의 기사에 대한 토론에서 볼 수 있습니다.
그러나 우리가 무슨 말을하는지 이해하지 못할 수도 있습니까? 버튼을 클릭하면 일부 사용자 기능이 트리거되어 일부 마이크로 작업을 수행해야합니다.
네, 문자 그대로 이해했습니다. 더 정확하게 질문하세요. 하지만 오늘 그런 기능이있는 것 같아서 제 대답이 여러분에게 조롱을받을 것으로 예상합니다.
이 경우 "마이크로 태스크"는 버튼의 색상을 변경하는 것이 었습니다. 불필요한 기능을 추가하지 않기 위해 의도적으로 추가 기능을 추가하지 않았습니다. 코드 과부하를 피하기 위해서였습니다.
사실 이 글의 주제는 버튼에만 국한되지 않습니다. 대부분은 차트 이벤트에 관한 것입니다. 그런 예제가 거의 없어서 하나 작성하기로 결정했습니다.
친애하는 기사 작성자 여러분, 당신은 저를 위해 쓴 것이 아니라 초보자를 위해 썼습니다. 실제로 저는 귀하의 솔루션에 관심이 없지만 이제 막 언어를 알아가는 사람들에 대해 이야기하고 있습니다. 어떤 "다른 프로그램"에 대해 이야기하고 있습니까? 그리고 한 프로그램의 OnDeinit 기능이 다른 프로그램의 기능에 어떻게 영향을 미칠 수 있습니까?
이제 표시기 중 하나를 삭제하고 코드 작성자에 따르면 "마우스 추적"을 잃어 버렸지 만 이것은 발생하지 않습니다:
이제 표시기에서 OnDeinit() 이벤트가 트리거되는지 확인합니다. 이것이 제가 앞서 언급한 흥미로운 점입니다. :) 즉, 기사의 예제에서 OnDeinit()에서 모션 추적 이벤트가 비활성화되어 있습니다. 일부 빌드에서는 OnDeinit()이 인디케이터에서 전혀 작동하지 않는 것으로 보입니다. 이는 버그이므로 개발자에게 알려야 합니다.
또한 제 진술이 올바른지 확인하려면 빈 Expert Advisor를 만들어야 하는데, 이 코드 줄(강조 표시됨)을 추가하는 것으로 충분합니다( OnDeinit() 함수는 Expert Advisor에서 작동함):
//+------------------------------------------------------------------+//|TEST.mq5 |//| Copyright 2013, MetaQuotes Software Corp.//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2013, MetaQuotes Software Corp."#property link"http://www.mql5.com"#property version"1.00"//+------------------------------------------------------------------+//| 사용자 지정 표시기 초기화 기능 |//+------------------------------------------------------------------+intOnInit()
{
return(0);
}
//+------------------------------------------------------------------+//| 전문가의 초기화 기능 ||//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- 마우스 이벤트 추적 비활성화ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,false);
}
//+------------------------------------------------------------------+//| OnTick|//+------------------------------------------------------------------+voidOnTick()
{
}
//+------------------------------------------------------------------+
//---
이제 기사의 지표가 차트에 있을 때 전문가 조언자를 제거하면 지표에서 이동 이벤트 추적도 비활성화됩니다.
이거 말이죠:
뭔가 잘못되었을까요? 아니면 이런 식으로 설계된 것일까요?
알고 있습니다. 그런 식으로 설계된 것이 아니라이 기사에서 고려되지 않았을뿐입니다. 이 문서는 항상 그렇듯이 모든 경우에 대한 기성품 솔루션이 아닌 간단한 예제입니다. )
세르게이, 소란 피우지 마세요. 예를 들어 타이머를 사용해야하는 이유가 명확하지 않았습니다. 그러나 잠시 후 기사에서 설명을 발견하고 즉시 모든 것을 이해했습니다. 나는이 진술을 실제로 확인하지 않았지만 이것에서 나는 저자를 신뢰하고 그가 이유 때문에 그것을 썼다는 것을 깨닫고 타이머가 도입 된 경우 이유가 있다는 것을 깨달았습니다.
일반적으로 이 코드는 상당히 문제가 있는 것 같습니다. 전문가 어드바이저/표시기를 비활성화할 때 마우스 움직임 추적을 꺼야 할 이유가 없습니다.
아니요, 틀렸습니다. 마우스 트래킹을 비활성화해야 하는 진짜 이유가 있습니다. 그리고 지금 증명해 보이겠습니다. )
예를 들어 차트에서 두 개의 프로그램이 실행 중이라고 가정해 보겠습니다. 마우스 이동 이벤트를 추적해야하는 전문가 조언자. 그리고 마우스 이동 이벤트를 추적할 필요는 없지만 다른 차트 이벤트를 추적해야 하는 인디케이터가 있습니다.
이제 Expert Advisor의 이 코드를 실행합니다:
#property copyright"Copyright 2013, MetaQuotes Software Corp."#property link"http://www.mql5.com"#property version"1.00"//+------------------------------------------------------------------+//| 사용자 지정 표시기 초기화 기능 |//+------------------------------------------------------------------+intOnInit()
{
//--- 마우스 이벤트 추적 사용ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);
//---return(0);
}
//+------------------------------------------------------------------+//| 전문가의 초기화 기능 ||//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- 마우스 이벤트 추적 비활성화//ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,false);
}
//+------------------------------------------------------------------+//| OnTick|//+------------------------------------------------------------------+voidOnTick()
{
}
//+------------------------------------------------------------------+//| 차트 이벤트 함수|//+------------------------------------------------------------------+voidOnChartEvent(constint id,
constlong &lparam,
constdouble &dparam,
conststring &sparam)
{
//--- 마우스 움직임 및 마우스 왼쪽 버튼 누름 추적if(id==CHARTEVENT_MOUSE_MOVE)
{
staticint count=1;
Print("CHARTEVENT_MOUSE_MOVE; EXPERT; ",count);
count++;
}
}
//+------------------------------------------------------------------+
초기화 중 OnInit() 함수에서 마우스 움직임 이벤트 추적이 활성화됩니다. 그러나 이 추적을 비활성화해야 하는 OnDeinit() 함수의 줄은 의도적으로 주석 처리되어 있습니다.
차트에 인디케이터도 로드합니다. 다음은 그 코드입니다:
#property copyright"Copyright 2010, MetaQuotes Software Corp."#property link"http://www.mql5.com"#property version"1.00"#property indicator_chart_window//+------------------------------------------------------------------+//| 사용자 지정 표시기 초기화 기능 |//+------------------------------------------------------------------+intOnInit()
{
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| 전문가의 초기화 기능 ||//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
}
//+------------------------------------------------------------------+//| 사용자 지정 표시기 반복 함수 |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---//--- 다음 호출을 위한 prev_calculated의 반환 값return(rates_total);
}
//+------------------------------------------------------------------+//| 차트 이벤트 함수|//+------------------------------------------------------------------+voidOnChartEvent(constint id,
constlong &lparam,
constdouble &dparam,
conststring &sparam)
{
//--- 마우스 움직임 및 마우스 왼쪽 버튼 누름 추적if(id==CHARTEVENT_MOUSE_MOVE)
{
staticlong count=1;
Print("CHARTEVENT_MOUSE_MOVE; INDICATOR; ",count);
count++;
}
}
//+------------------------------------------------------------------+
첫 번째 프로그램과 두 번째 프로그램 모두 이벤트가 수신되었다는 메시지를 로그에 출력합니다. 이제 차트에서 전문가 조언자를 제거합니다. 이 프로그램의 도움으로 몇 가지 계산을 했으므로 더 이상 필요하지 않다고 가정해 보겠습니다. 제거 후 마우스 움직임 추적 이벤트가 비활성화되지 않았으므로 인디케이터는 이 이벤트를 계속 수신합니다. 그리고 당신은 그것을 필요로하지 않습니다.
그리고 "버튼 기능이 OnInit 함수에 배치되어 있다"는 사실은 매우 재밌습니다!
그러나 우리가 무슨 말을 하는지 이해하지 못하시나요? 버튼을 누르면 일부 사용자 기능이 트리거되어 일부 마이크로 작업을 수행해야 합니다.
좋아요, 한 번 웃어 봅시다. 이 기사는 "아무도 당신의 혀를 잡아당기지 않았다"고 당신이 쓴 글입니다.
따라서 설명할 수 없는 것을 인용문 형식으로 설명하는 것은 적어도 독자에게는 무례한 행동입니다. 질문은 예시와 주요 출처 에 대한 링크를 통해 답변해야 합니다.
불필요한 기능으로 혼란스럽고 과부하된 코드는 '초보자'를 오도할 뿐입니다.
그리고 "버튼 함수가 OnInit 함수에 배치되어 있다"는 사실은 매우 우스꽝스럽습니다!
아무도 당신의 혀를 잡아 당기지 않았습니다. 증거를 제시해 주시겠습니까? 아니면 제 진술에 대한 반박을 하시겠습니까? 참고로 아직 핸드북에 모든 것이 설명되어 있지는 않습니다. 핸드북 작업이 진행 중이며 추가 및 수정이 이루어지고 있습니다. 항상 모든 것을 직접 확인해야 합니다.
저를 믿으십시오. 귀하의 기사의 코드는 초보자에게 훨씬 더 "혼란 스럽습니다"뿐만 아니라 귀하의 기사에 대한 토론에서 볼 수 있습니다.
그러나 우리가 무슨 말을하는지 이해하지 못할 수도 있습니까? 버튼을 클릭하면 일부 사용자 기능이 트리거되어 일부 마이크로 작업을 수행해야합니다.
네, 문자 그대로 이해했습니다. 더 정확하게 질문하세요. 하지만 오늘 그런 기능이있는 것 같아서 제 대답이 여러분에게 조롱을받을 것으로 예상합니다.
이 경우 "마이크로 태스크"는 버튼의 색상을 변경하는 것이 었습니다. 불필요한 기능을 추가하지 않기 위해 의도적으로 추가 기능을 추가하지 않았습니다. 코드 과부하를 피하기 위해서였습니다.
사실 이 글의 주제는 버튼에만 국한되지 않습니다. 대부분은 차트 이벤트에 관한 것입니다. 그런 예제가 거의 없어서 하나 작성하기로 결정했습니다.
친애하는 기사 작성자 여러분, 당신은 저를 위해 쓴 것이 아니라 초보자를 위해 썼습니다. 실제로 저는 귀하의 솔루션에 관심이 없지만 이제 막 언어를 알아가는 사람들에 대해 이야기하고 있습니다. 어떤 "다른 프로그램"에 대해 이야기하고 있습니까? 그리고 한 프로그램의 OnDeinit 기능이 다른 프로그램의 기능에 어떻게 영향을 미칠 수 있습니까?
우리는 기사에 대해 논의하고 있는데 무엇에 대해 그렇게 분개하고 있습니까?
내가 아니라 초보자를위한 질문에 답하여 이유와 방법을 이해하도록 노력하십시오.
친애하는 기사 작성자 여러분, 당신은 저를 위해 글을 쓴 것이 아니라 초보자를 위해 글을 썼습니다.
바로 그렇습니다.
실제로 저는 귀하의 솔루션에 관심이 없지만 이제 막 언어를 알아가는 사람들에 대해 이야기하고 있습니다.
그러나 당신은 질문합니다.
어떤 "다른 프로그램"에 대해 이야기하고 있습니까?
이전에 링크를 제공한 바로 그 프로그램 말입니다. 그리고 당신은 증거를 제시하지 않고 힌트로 내 진술을 반박하려고합니다.
그리고 한 프로그램의 OnDeinit 기능이 다른 프로그램의 기능에 어떻게 영향을 미칠 수 있나요?
그렇습니다. 저는 그것에 대해 썼습니다. 기사를 게시한 편집자가 확인했습니다. 직접 확인하여 확인할 수도 있습니다.
우리는 기사에 대해 논의하고 있는데 무엇이 그렇게 분개합니까?
아무것도요. 제 주장에 대한 반박을 기다리고 있습니다. )
저를 위한 질문이 아니라 신규 가입자를 위한 질문에 답해 주시면 그 이유와 방법을 이해할 수 있을 것입니다.
지금까지 신규 사용자의 질문은 없었습니다. 그리고 질문은 있을 수 없습니다. 모든 것이 매우 명확하고 모든 코드 줄에 상세하게 주석이 달려 있습니다.
먼저 이걸 막습니다:
즉, 이제 마우스 이벤트를 추적하지 않죠?
차트에서 코드를 실행해 보세요:
이제 "다른 프로그램"을 실행하고 다시 코드가 되게 합니다:
뭔가 잘못됐나요? 아니면 원래 이렇게 해야 하는 건가요?
이제 표시기 중 하나를 삭제하고 코드 작성자에 따르면 "마우스 추적"이 손실되었지만 아무 일도 일어나지 않습니다:
당신이 자격이 없다면 누가 자격이 있는지 모르겠네요? 대널드 누스? 빌 게이츠?
그냥 칭찬을 받고 싶었어요. 성공했습니다.)
알겠습니다. 하지만 분명하지 않은 것은 당신이 만든 시장의 주요 제품이 당신 소유가 아니라는 것입니다. 안타깝지 않나요?
1. 아직 저녁이 아닙니다)
2. 내 수공예품도 패널과 비교하지는 않지만 지속적으로 상위에 있습니다.
3. 패널의 성공은 주로 아이디어 작성자의 노력 덕분이므로 내 제품이라고 말하는 것은 잘못된 것입니다.
4. 나는 무료로 일하지 않았다)
...
이제 표시기 중 하나를 삭제하고 코드 작성자에 따르면 "마우스 추적"을 잃어 버렸지 만 이것은 발생하지 않습니다:
이제 표시기에서 OnDeinit() 이벤트가 트리거되는지 확인합니다. 이것이 제가 앞서 언급한 흥미로운 점입니다. :) 즉, 기사의 예제에서 OnDeinit()에서 모션 추적 이벤트가 비활성화되어 있습니다. 일부 빌드에서는 OnDeinit()이 인디케이터에서 전혀 작동하지 않는 것으로 보입니다. 이는 버그이므로 개발자에게 알려야 합니다.
또한 제 진술이 올바른지 확인하려면 빈 Expert Advisor를 만들어야 하는데, 이 코드 줄(강조 표시됨)을 추가하는 것으로 충분합니다( OnDeinit() 함수는 Expert Advisor에서 작동함):
//---
이제 기사의 지표가 차트에 있을 때 전문가 조언자를 제거하면 지표에서 이동 이벤트 추적도 비활성화됩니다.
이거 말이죠:
뭔가 잘못되었을까요? 아니면 이런 식으로 설계된 것일까요?
알고 있습니다. 그런 식으로 설계된 것이 아니라이 기사에서 고려되지 않았을뿐입니다. 이 문서는 항상 그렇듯이 모든 경우에 대한 기성품 솔루션이 아닌 간단한 예제입니다. )
일반적으로 이 코드는 매우 문제가 있는 것 같습니다. 전문가 관리자/표시기를 비활성화할 때 마우스 움직임 추적을 끌 이유가 없습니다. 그렇게 귀찮게 하고 싶다면 전문가 관리자가 시작되기 전의 상태로 복원해야 합니다:
일반적으로 이 코드는 상당히 문제가 있는 것 같습니다. 전문가 어드바이저/표시기를 비활성화할 때 마우스 움직임 추적을 꺼야 할 이유가 없습니다.
아니요, 틀렸습니다. 마우스 트래킹을 비활성화해야 하는 진짜 이유가 있습니다. 그리고 지금 증명해 보이겠습니다. )
예를 들어 차트에서 두 개의 프로그램이 실행 중이라고 가정해 보겠습니다. 마우스 이동 이벤트를 추적해야하는 전문가 조언자. 그리고 마우스 이동 이벤트를 추적할 필요는 없지만 다른 차트 이벤트를 추적해야 하는 인디케이터가 있습니다.
이제 Expert Advisor의 이 코드를 실행합니다:
초기화 중 OnInit() 함수에서 마우스 움직임 이벤트 추적이 활성화됩니다. 그러나 이 추적을 비활성화해야 하는 OnDeinit() 함수의 줄은 의도적으로 주석 처리되어 있습니다.
차트에 인디케이터도 로드합니다. 다음은 그 코드입니다:
첫 번째 프로그램과 두 번째 프로그램 모두 이벤트가 수신되었다는 메시지를 로그에 출력합니다. 이제 차트에서 전문가 조언자를 제거합니다. 이 프로그램의 도움으로 몇 가지 계산을 했으므로 더 이상 필요하지 않다고 가정해 보겠습니다. 제거 후 마우스 움직임 추적 이벤트가 비활성화되지 않았으므로 인디케이터는 이 이벤트를 계속 수신합니다. 그리고 당신은 그것을 필요로하지 않습니다.
이제 동의하시나요? )