ObjectFind

이 함수는 차트에서 지정한 이름의 개체를 지정한 ID로 검색합니다.

int  ObjectFind(
   long    chart_id,     // 차트 식별자
   string  name          // object name
   );

Parameter

chart_id

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

name

[in]  검색된 개체의 이름입니다.

반환값

이 함수가 성공하면 개체가 발견된 하위 창의 번호(0은 차트의 주 창을 의미합니다)를 반환합니다. 개체를 찾을 수 없으면 함수는 음수를 반환합니다. 에러에 대한 자세한 내용은 GetLastError()를 참조하십시오.

참고

이 함수는 동기식 호출을 사용합니다. 이는 이 함수가 호출하기 전에 이 차트에 대해 대기한 모든 명령의 실행을 대기하므로 이 함수는 시간이 많이 걸릴 수 있습니다. 차트에서 많은 개체로 작업할 때는 이 기능을 고려해야 합니다.

개체 이름이 변경되면 두 개의 이벤트가 동시에 생성됩니다. 이러한 이벤트는 OnChartEvent() 기능을 통해 Professional Advisor 또는 지표에서 처리할 수 있습니다.:

  • 이전 이름을 가진 객체 삭제의 경우
  • 새 이름으로 개체를 만드는 이벤트

 

예:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   OBJ_NAME   "TestObjectFind"
#define   WND        0
 
/+------------------------------------------------------------------+
//| Script program start function                                   |
/+------------------------------------------------------------------+
void OnStart()
  {
//--- 차트 ID
   long chart_id=ChartID();
 
//--- WND 창의 차트에서 OBJ_NAME 그래픽 개체가 발견될 경우
//--- 이를 보고하고 작업을 마무리
   ResetLastError();
   if(ObjectFind(chart_idOBJ_NAME)==WND)
     {
      PrintFormat("A graphic object named \"%s\" exists on chart with ID %I64d"OBJ_NAMEchart_id);
      return;
     }
     
//--- 객체를 찾을 수 없는 경우
   else
     {
 //--- 마지막 오류 코드가 4202("그래픽 객체를 찾을 수 없습니다")가 아닌 경우
 //--- 오류를 보고하고 종료
      if(GetLastError()!=ERR_OBJECT_NOT_FOUND
        {
         Print("ObjectFind() failed. Error "GetLastError());
         return;
        }
      
 //--- OBJ_NAME 객체가 chart_id가 있는 차트에 없다는 것을 저널에 보고합니다.
      PrintFormat("There is no graphic object named \"%s\" on the chart with ID #%I64d. Let's create it."OBJ_NAMEchart_id);
      
 //--- WND 창에 OBJ_NAME이라는 "수직선" 그래픽 객체를 생성합니다
      ResetLastError();
      if(!ObjectCreate(chart_idOBJ_NAMEOBJ_VLINEWNDTimeCurrent(), 0))
        {
         Print("ObjectCreate() failed. Error "GetLastError());
         return;
        }
      
 //--- 변경 사항을 즉시 반영하도록 차트를 다시 그립니다.
      ChartRedraw(chart_id);
      
 //--- 생성된 객체가 존재하는지 확인
      if(ObjectFind(chart_idOBJ_NAME)!=WND)
        {
         Print("ObjectFind() failed. Error "GetLastError());
         return;
        }
      
 //--- 객체가 생성되면 이를 저널에 보고합니다.
 //--- 잠시만 기다린 후 생성된 그래픽 객체를 삭제합니다.
      PrintFormat("Now a graphic object named \"%s\" exists on the chart with ID #%I64d. Let's delete it."OBJ_NAMEchart_id);
      Sleep(1000);
      ObjectDelete(chart_idOBJ_NAME);
      
 //--- 변경 사항을 즉시 반영하도록 차트를 다시 그립니다.
      ChartRedraw(chart_id);
     }
   /*
   결과:
   There is no graphic object named "TestObjectFind" on the chart with ID #133246248352168439Let's create it.
   Now a graphic object named "TestObjectFind" exists on the chart with ID #133246248352168439Let's delete it
   */
  }