OBJ_EVENT

이벤트 개체.

ObjEvent

참조

마운스를 이벤트 위로 가져가면 해당 텍스트가 나타납니다.

다음 스크립트는 차트에서 이벤트 개체를 만들고 이동합니다. 그래픽 개체의 속성을 만들고 변경할 수 있는 특수 기능이 개발되었습니다. 이러한 기능은 자체 애플리케이션에서 "있는 대로" 사용할 수 있습니다.

 

//--- 설명
#property description "스크립트가 \"이벤트\" 그래픽 개체를 그립니다."
#property description "고정점 날짜는 백분율로 설정됩니다."
#property description "차트 창 너비(막대 단위)."
//--- 스크립트 실행 중 입력 매개변수의 표시 창
#property script_show_inputs
//--- 스크립트의 입력 매개변수
input string          InpName="Event";    // 이벤트 이름
input int             InpDate=25;         // 이벤트 날짜(%)
input string          InpText="Text";     // 이벤트 텍스트
input color           InpColor=clrRed;    // 이벤트 색상
input int             InpWidth=1;         // 강조 표시된 경우 점 크기
input bool            InpBack=false;      // 배경 이벤트
input bool            InpSelection=false// 이동하려면 강조 표시
input bool            InpHidden=true;     // 개체 목록에 숨겨짐
input long            InpZOrder=0;        // 마우스 클릭 우선 순위
//+------------------------------------------------------------------+
//| 차트에 이벤트 개체 생성                                 |
//+------------------------------------------------------------------+
bool EventCreate(const long            chart_ID=0,      // 차트의 ID
                 const string          name="Event",    // 이벤트 이름
                 const int             sub_window=0,    // 하위 창 인덱스
                 const string          text="Text",     // 이벤트 텍스트
                 datetime              time=0,          // 시간
                 const color           clr=clrRed,      // 색상
                 const int             width=1,         // 강조 표시된 경우 점 너비
                 const bool            back=false,      // 배경에
                 const bool            selection=false// 이동하려면 강조 표시
                 const bool            hidden=true,     // 개체 목록에 숨겨짐
                 const long            z_order=0)       // 마우스 클릭 우선 순위
  {
//--- 시간이 설정되지 않은 경우, 마지막 막대에 개체를 생성
   if(!time)
      time=TimeCurrent();
//--- 오류 값 재설정
   ResetLastError();
//--- 이벤트 개체 생성
   if(!ObjectCreate(chart_ID,name,OBJ_EVENT,sub_window,time,0))
     {
      Print(__FUNCTION__,
            ": \"이벤트\" 개체 생성 실패! Error code = ",GetLastError());
      return(false);
     }
//--- 이벤트 텍스트 설정
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- 색상 설정
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- 개체가 강조 표시된 경우 고정점 너비 설정
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- 전경(false) 또는 배경(true)에 표시
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- 마우스를 사용하여 이벤트 이동 모드를 활성화(true) 또는 비활성화(false)
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- 개체 목록에서 그래픽 개체 이름 숨기기(true) 또는 표시(false)
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- 차트에서 마우스 클릭 이벤트 수신 우선 순위 설정
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- 실행 성공
   return(true);
  }
//+------------------------------------------------------------------+
//| 이벤트 개체 텍스트 변경                                         |
//+------------------------------------------------------------------+
bool EventTextChange(const long   chart_ID=0,   // 차트의 ID
                     const string name="Event"// 이벤트 이름
                     const string text="Text")  // 텍스트
  {
//--- 오류 값 재설정
   ResetLastError();
//--- 개체 텍스트 변경
   if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
     {
      Print(__FUNCTION__,
            ": 텍스트 변경 실패! Error code = ",GetLastError());
      return(false);
     }
//--- 실행 성공
   return(true);
  }
//+------------------------------------------------------------------+
//| 이벤트 개체 이동                                                |
//+------------------------------------------------------------------+
bool EventMove(const long   chart_ID=0,   // 차트의 ID
               const string name="Event"// 이벤트 이름
               datetime     time=0)       // 시간
  {
//--- 시간이 설정되지 않은 경우 이벤트를 마지막 막대로 이동
   if(!time)
      time=TimeCurrent();
//--- 오류 값 재설정
   ResetLastError();
//--- 개체 이동
   if(!ObjectMove(chart_ID,name,0,time,0))
     {
      Print(__FUNCTION__,
            ": \"이벤트\" 개체 이동 실패! Error code = ",GetLastError());
      return(false);
     }
//--- 실행 성공
   return(true);
  }
//+------------------------------------------------------------------+
//| 이벤트 개체 삭제                                              |
//+------------------------------------------------------------------+
bool EventDelete(const long   chart_ID=0,   // 차트의 ID
                 const string name="Event"// 이벤트 이름
  {
//--- 오류 값 재설정
   ResetLastError();
//--- 개체 삭제
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": \"이벤트\" 개체 삭제 실패! Error code = ",GetLastError());
      return(false);
     }
//--- 실행 성공
   return(true);
  }
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 입력 매개변수의 정확성 확인
   if(InpDate<0 || InpDate>100)
     {
      Print("오류! 입력 매개변수의 잘못된 값!");
      return;
     }
//--- 차트 창에 표시되는 막대 수
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- 사용할 날짜 값을 저장하기 위한 배열
//--- 이벤트 개체 고정점 좌표 설정 및 변경
   datetime date[];
//--- 메모리 할당
   ArrayResize(date,bars);
//--- 날짜 배열 채우기
   ResetLastError();
   if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
     {
      Print("시간 값 복사 실패! Error code = ",GetLastError());
      return;
     }
//--- 개체를 작성할 점 정의
   int d=InpDate*(bars-1)/100;
//--- 이벤트 개체 생성
   if(!EventCreate(0,InpName,0,InpText,date[d],InpColor,InpWidth,
      InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return;
     }
//--- 차트를 다시 그리고 1초 동안 대기
   ChartRedraw();
   Sleep(1000);
//--- 이제 개체를 이동합니다
//--- 루프 카운터
   int h_steps=bars/2;
//--- 개체 이동
   for(int i=0;i<h_steps;i++)
     {
      //--- 다음의 값 사용
      if(d<bars-1)
         d+=1;
      //--- 점 이동
      if(!EventMove(0,InpName,date[d]))
         return;
      //--- 스크립트 작업이 강제로 비활성화 되었는지 확인
      if(IsStopped())
         return;
      //--- 차트 다시 그리기
      ChartRedraw();
      // 0.05초 지연
      Sleep(50);
     }
//--- 1초 지연
   Sleep(1000);
//--- 차트에서 채널을 삭제
   EventDelete(0,InpName);
   ChartRedraw();
//--- 1초 지연
   Sleep(1000);
//---
  }