안녕하세요, 트레이더 여러분! 오늘은 MetaTrader 4에서 사용할 수 있는 'Test_ChartEvent.mq4' Expert Advisor에 대해 알아보겠습니다. 이 EA는 다양한 ChartEvent를 시연하는 예제입니다. 키보드 이벤트, 마우스 클릭 및 이동 이벤트, 그리고 사용자 정의 이벤트를 포함하고 있습니다. 도움을 원하신다면 'H' 키를 눌러보세요. 'M' 키를 누르면 MOUSE_MOVE 이벤트 모드로 전환됩니다.
이 소스 코드는 MetaTrader 4와 MetaTrader 5 모두에서 작동합니다.
함수 프로토타입
- bool Obj_Create()
- bool Obj_Delete()
- bool Obj_Move(int hSens,int vSens) - 객체를 이동합니다.
- void Print_Info() - 객체에 대한 정보를 출력합니다.
- int MouseMove(int aXX,int aYY,string sState) - 마우스 이동 이벤트를 처리합니다.
전역 변수
- int gChartNo=0
- int gSubWinNo=0
- string gsObj_Name_selected="" - 현재 선택된 객체의 이름입니다.
사용자 정의 이벤트
세 가지 종류의 사용자 정의 이벤트가 정의되어 있습니다:
- #define cMyEvent_1 0
- #define cMyEvent_2 1
- #define cMyEvent_3_broadcast 2
OnTimer() 함수
이 함수는 사용자 정의 ChartEvent를 주기적으로 생성합니다. 특히, cMyEvent_3_broadcast 이벤트는 모든 열린 차트 창에 대해 생성됩니다.
클래스 예제
클래스 "CObjectMan"은 차트의 객체 기능을 처리하기 위해 생성되었습니다. 두 개의 인스턴스(gObjectMan1, gObjectMan2)가 선언되어 있으며, 이 두 인스턴스에 연결된 그래픽 객체의 이름은 각각 "Green Button"과 "Yellow Button"입니다.
이벤트 처리
void OnChartEvent():
"CHARTEVENT_KEYDOWN" 이벤트:
- 4 방향 키(화살표) 또는 디지털 패널의 4 방향 키로 선택된 객체를 이동합니다.
- 'H': 도움말 정보를 출력합니다 (전문가 로그 창).
- 'I': 두 객체의 위치 정보를 출력합니다.
- 'M': MOUSE_MOVE 이벤트를 활성화합니다.
사용자 정의 이벤트
이 이벤트에 대한 정보를 출력합니다. 특히 MyEvent_3_broadcast 이벤트에 대해 출력합니다.
객체 이벤트
- CHARTEVENT_OBJECT_CHANGE, CHARTEVENT_OBJECT_DRAG, CHARTEVENT_OBJECT_DELETE - 해당 객체의 이름을 출력합니다.
- CHARTEVENT_OBJECT_CLICK - 클릭한 객체의 이름을 출력하고, 방향 키로 이동할 객체의 이름을 선택합니다.
마우스 이벤트
- CHARTEVENT_CLICK - 클릭한 바의 정보: 가격(시가, 종가) 및 바의 시간 정보를 출력합니다.
- CHARTEVENT_MOUSE_MOVE (참고: CHART_EVENT_MOUSE_MOVE) - 포함된 구간의 정보: 바의 수, 가격 변동을 출력합니다.

시연
다음 테스트를 수행할 수 있습니다:
- 두 개의 객체(버튼) 중 하나를 클릭하여 선택한 후 화살표 키를 사용해 선택된 객체를 이동합니다.
- 그래픽 바를 클릭하고 로그 탭에서 바의 정보를 확인합니다.
- 'M' 키를 눌러 MOUSE_MOVE 이벤트 모드로 전환합니다. Ctrl+F를 눌러 십자선을 표시한 후 드래그 앤 드롭 작업을 수행합니다. 로그 메시지가 보이지 않으면 입력 매개변수 "iLogLevel"을 변경해보세요.