EventChartCustom

함수는 지정된 차트에 대한 사용자 지정 이벤트를 생성.

bool  EventChartCustom(
   long    chart_id,            // 이벤트 수신 차트의 식별자
   ushort  custom_event_id,     // 이벤트 식별자
   long    lparam,              // long 유형의 매개변수
   double  dparam,              // double 유형의 매개변수
   string  sparam               // 이벤트의 string 매개변수
   );

매개변수

chart_id

[in] 차트 식별자. 0은 현재 차트를 의미합니다.

custom_event_id

[in] 사용자 이벤트의 ID. 이 식별자는 CHARTEVENT_CUSTOM에 자동으로 추가되고 정수 유형으로 변환됩니다.

lparam

[in] OnChartEvent 기능으로 전달된 long 유형의 이벤트 매개변수.

dparam

[in] OnChartEvent 기능으로 전달된 double 유형의 이벤트 매개변수.

sparam

[in] OnChartEvent 기능으로 전달된 string 유형의 이벤트 매개변수. 문자열이 63자를 초과하면 잘립니다.

값 반환

이벤트를 수신하는 차트의 이벤트 대기열에 사용자 지정 이벤트가 성공적으로 배치된 경우 true를 반환합니다. 실패한 경우 false를 반환합니다. 오류 코드를 가져오려면 GetLastError()를 사용.

주의

지정된 차트에 연결된 엑스퍼트 어드바이저 또는 지표는 OnChartEvent(int event_id, long& lparam, double& dparam, string& sparam) 기능을 사용하여 이벤트를 처리합니다.

각 이벤트 유형에 대해 OnChartEvent() 기능의 입력 매개변수는 이 이벤트를 처리하는 데 필요한 한정된 값을 가집니다. 이 매개변수를 통해 전달된 이벤트와 값이 아래 표에 나열되어 있습니다.

이벤트

id 매개변수의 값

lparam 매개변수의 값

dparam 매개변수의 값

sparam 매개변수의 값

키입력 이벤트

CHARTEVENT_KEYDOWN

눌려진 키의 코드

반복 횟수 (사용자가 키를 누를 상태로 인해 키 입력이 반복되는 횟수)

키보드 버튼의 상태를 설명하는 비트 마스크의 문자열 값

마우스 이벤트 (속성 CHART_EVENT_MOUSE_MOVE=true 이 차트에 설정된 경우)

CHARTEVENT_MOUSE_MOVE

X 좌표

Y 좌표

마우스 버튼의 상태를 설명하는 비트 마스크의 문자열 값

그래픽 개체 생성 이벤트 (CHART_EVENT_OBJECT_CREATE=true 가 차트에 설정된 경우)

CHARTEVENT_OBJECT_CREATE

생성된 그래픽 개체 이름

속성 대화 상자를 통한 개체 속성 변경 이벤트

CHARTEVENT_OBJECT_CHANGE

수정된 그래픽 개체의 이름

그래픽 개체 삭제 이벤트 (CHART_EVENT_OBJECT_DELETE=true 가 차트에 설정된 경우)

CHARTEVENT_OBJECT_DELETE

삭제된 그래픽 개체의 이름

차트를 마우스로 클릭하는 경우

CHARTEVENT_CLICK

X 좌표

Y 좌표

차트에 속한 그래픽 개체에서 마우스를 클릭하는 이벤트

CHARTEVENT_OBJECT_CLICK

X 좌표

Y 좌표

이벤트가 발생한 그래픽 개체 이름

마우스를 사용하여 그래픽 개체를 끄는 이벤트

CHARTEVENT_OBJECT_DRAG

이동된 그래픽 개체의 이름

LabelEdit 그래픽 개체의 입력 상자에서 완료된 텍스트 편집 이벤트

CHARTEVENT_OBJECT_ENDEDIT

텍스트 편집이 완료된 LabelEdit 그래픽 개체의 이름

차트 변경 이벤트

CHARTEVENT_CHART_CHANGE

N 번 아래의 사용자 이벤트 ID

CHARTEVENT_CUSTOM+N

EventChartCustom() 함수에 의해 설정된 값

EventChartCustom() 함수에 의해 설정된 값

EventChartCustom() 함수에 의해 설정된 값

예를 들어:

//+------------------------------------------------------------------+
//|                                            ButtonClickExpert.mq5 |
//|                         Copyright 2000-2024, MetaQuotes Ltd. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
string buttonID="Button";
string labelID="Info";
int broadcastEventID=5000;
//+------------------------------------------------------------------+
//| 엑스퍼트 초기화 함수                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 사용자 지정 이벤트를 전송하기 위한 버튼 생성
   ObjectCreate(0,buttonID,OBJ_BUTTON,0,100,100);
   ObjectSetInteger(0,buttonID,OBJPROP_COLOR,clrWhite);
   ObjectSetInteger(0,buttonID,OBJPROP_BGCOLOR,clrGray);
   ObjectSetInteger(0,buttonID,OBJPROP_XDISTANCE,100);
   ObjectSetInteger(0,buttonID,OBJPROP_YDISTANCE,100);
   ObjectSetInteger(0,buttonID,OBJPROP_XSIZE,200);
   ObjectSetInteger(0,buttonID,OBJPROP_YSIZE,50);
   ObjectSetString(0,buttonID,OBJPROP_FONT,"Arial");
   ObjectSetString(0,buttonID,OBJPROP_TEXT,"Button");
   ObjectSetInteger(0,buttonID,OBJPROP_FONTSIZE,10);
   ObjectSetInteger(0,buttonID,OBJPROP_SELECTABLE,0);
 
//--- 정보 표시를 위한 레이블 생성
   ObjectCreate(0,labelID,OBJ_LABEL,0,100,100);
   ObjectSetInteger(0,labelID,OBJPROP_COLOR,clrRed);
   ObjectSetInteger(0,labelID,OBJPROP_XDISTANCE,100);
   ObjectSetInteger(0,labelID,OBJPROP_YDISTANCE,50);
   ObjectSetString(0,labelID,OBJPROP_FONT,"Trebuchet MS");
   ObjectSetString(0,labelID,OBJPROP_TEXT,"No information");
   ObjectSetInteger(0,labelID,OBJPROP_FONTSIZE,20);
   ObjectSetInteger(0,labelID,OBJPROP_SELECTABLE,0);
 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 엑스퍼트 초기화 해제 함수                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   ObjectDelete(0,buttonID);
   ObjectDelete(0,labelID);
  }
//+------------------------------------------------------------------+
//| 엑스퍼트 틱 함수                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
 
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- 마우스 버튼을 눌러 이벤트를 확인
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      string clickedChartObject=sparam;
      //--- 이름이 buttonID인 개체를 클릭하는 경우
      if(clickedChartObject==buttonID)
        {
         //--- 버튼 상태 - 누르거나 누르지 않음
         bool selected=ObjectGetInteger(0,buttonID,OBJPROP_STATE);
         //--- 디버그 메시지를 기록
         Print("버튼 눌림 = ",selected);
         int customEventID; // 전송할 사용자 지정 이벤트 수
         string message;    // 이벤트에 전송될 메시지
         //--- 버튼이 눌린 경우
         if(selected)
           {
            message="Button pressed";
            customEventID=CHARTEVENT_CUSTOM+1;
           }
         else // 버튼이 눌리지 않음
           {
            message="Button in not pressed";
            customEventID=CHARTEVENT_CUSTOM+999;
           }
         //--- 사용자 지정 이벤트 "당사" 차트 전송
         EventChartCustom(0,customEventID-CHARTEVENT_CUSTOM,0,0,message);
         ///--- 열려 있는 모든 차트에 메시지 전송
         BroadcastEvent(ChartID(),0,"Broadcast Message");
         //--- 디버그 메시지
         Print("ID를 사용하여 이벤트 전송 = ",customEventID);
        }
      ChartRedraw();// 모든 차트 개체를 강제로 다시 그리기
     }
 
//--- 이벤트가 사용자 이벤트세 속하는지 확인
   if(id>CHARTEVENT_CUSTOM)
     {
      if(id==broadcastEventID)
        {
         Print("Got broadcast message from a chart with id = "+lparam);
        }
      else
        {
         //--- 이벤트에서 문자 메시지를 읽었습니다
         string info=sparam;
         Print("ID로 사용자 이벤트 처리 = ",id);
         //--- 레이블에 메시지 표시
         ObjectSetString(0,labelID,OBJPROP_TEXT,sparam);
         ChartRedraw();// 모든 차트 개체를 강제로 다시 그리기
        }
     }
  }
//+------------------------------------------------------------------+
//| 열린 모든 차트에 브로드캐스트 이벤트 전송                         |
//+------------------------------------------------------------------+
void BroadcastEvent(long lparam,double dparam,string sparam)
  {
   int eventID=broadcastEventID-CHARTEVENT_CUSTOM;
   long currChart=ChartFirst();
   int i=0;
   while(i<CHARTS_MAX)                 // CHARTS_MAX 오픈 차트 밖에 없습니다
     {
      EventChartCustom(currChart,eventID,lparam,dparam,sparam);
      currChart=ChartNext(currChart); // 이전 차트로부터 새 차트를 받았습니다
      if(currChart==-1) break;        // 차트 목록의 끝에 도달함
      i++;// 카운터를 늘리는 것을 잊지 마십시오
     }
  }
//+------------------------------------------------------------------+

추가 참조

클라이언트 터미널의 이벤트, 이벤트 처리기 기능