개체 바인딩 방법

Graphical objects Text, Label, Bitmap and Bitmap Label 그래픽 개체 텍스트, 레이블, 비트맵 및 비트맵 레이블 (OBJ_TEXT, OBJ_LABEL, OBJ_BITMAP 및 OBJ_BITMAP_LABEL)은 OBJPROP_ANCHOR 속성에 의해 정의된 9가지 좌표 바인딩 방법 중 하나를 가질 수 있습니다.

개체

ID

X/Y

너비/높이

날짜/가격

OBJPROP_CORNER

OBJPROP_ANCHOR

OBJPROP_ANGLE

텍스트

OBJ_TEXT

레이블

OBJ_LABEL

예(읽기 전용)

버튼

OBJ_BUTTON

비트맵

OBJ_BITMAP

예(읽기 전용)

비트맵 레이블

OBJ_BITMAP_LABEL

예(읽기 전용)

편집

OBJ_EDIT

직사각형 레이블

OBJ_RECTANGLE_LABEL

표에서 사용되는 명칭은 다음과 같습니다:

  • X/Y – 차트 모서리에 상대적인 픽셀로 지정된 고정점 좌표;
  • 너비/높이 – 개체의 너비와 높이를 가집니다. "읽기 전용"의 경우 개체가 차트에 렌더링된 후에만 너비와 높이 값이 계산됩니다;
  • 날짜/가격 – 고정점 좌표는 날짜 및 가격 값을 사용하여 지정됩니다;
  • OBJPROP_CORNER – 고정점 좌표가 지정되는 차트 모서리를 정의합니다. ENUM_BASE_CORNER 열거의 4개 값 중 하나일 수 있습니다;
  • OBJPROP_ANCHOR – 개체 자체에 고정점을 정의하며, ENUM_ANCHOR_POINT 열거의 9개 값 중 하나일 수 있습니다. 좌표는 바로 이 지점에 선택한 차트 모서리까지 지정됩니다;
  • OBJPROP_ANGLE – 개체 회전 각도를 시계 반대 방향으로 지정합니다.

필요한 번영은 ObjectSetInteger 함수(chart_handle, object_name, OBJPROP_ANCHOR, anchor_point_mode)를 사용하여 지정할 수 있습니다. 여기서 anchor_point_mode는 ENUM_ANCHOR_POINT 값 중 하나입니다.

ENUM_ANCHOR_POINT

ID

설명

ANCHOR_LEFT_UPPER

좌측 상단 모서리의 고정점

ANCHOR_LEFT

가운데의 좌측에 고정점

ANCHOR_LEFT_LOWER

좌측 하단 모서리의 고정점

ANCHOR_LOWER

가운데 아래의 고정점

ANCHOR_RIGHT_LOWER

우측 하단 모서리의 고정점

ANCHOR_RIGHT

가운데 우측의 고정점

ANCHOR_RIGHT_UPPER

우측 상단 모서리의 고정점

ANCHOR_UPPER

가운데 위의 고정점

ANCHOR_CENTER

고정점이 개체의 가운데에 정확히 위치

OBJ_BUTTON, OBJ_RECTANGLE_LABEL, OBJ_EDITOBJ_CHART 개체의 좌측 상단 모서리(ANCHOR_LEFT_UPPER)에 고정점이 고정되어 있습니다.

예:

   string text_name="my_OBJ_TEXT_object";
   if(ObjectFind(0,text_name)<0)
     {
      Print("Object ",text_name," not found. Error code = ",GetLastError());
      //--- 차트의 최대값 가져오기
      double chart_max_price=ChartGetDouble(0,CHART_PRICE_MAX,0);
      //--- 개체 레이블 생성
      ObjectCreate(0,text_name,OBJ_TEXT,0,TimeCurrent(),chart_max_price);
      //--- 글씨 색상 설정
      ObjectSetInteger(0,text_name,OBJPROP_COLOR,clrWhite);
      //--- 배경 색상 설정 
      ObjectSetInteger(0,text_name,OBJPROP_BGCOLOR,clrGreen);
      //--- 레이블 개체의 텍스트 설정
      ObjectSetString(0,text_name,OBJPROP_TEXT,TimeToString(TimeCurrent()));
      //--- 글씨 글꼴 설정
      ObjectSetString(0,text_name,OBJPROP_FONT,"Trebuchet MS");
      //--- 글꼴 크기 설정
      ObjectSetInteger(0,text_name,OBJPROP_FONTSIZE,10);
      //--- 상단 우측 모서리에 바인딩
      ObjectSetInteger(0,text_name,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
      //--- 시계 반대 방향으로 90도 회전
      ObjectSetDouble(0,text_name,OBJPROP_ANGLE,90);
      //--- 마우스를 통한 개체 선택 금지
      ObjectSetInteger(0,text_name,OBJPROP_SELECTABLE,false);
      //--- 개체 다시 그리기
      ChartRedraw(0);
     }

그래픽 개체 화살표(OBJ_ARROW)에는 좌표를 연결하는 두 가지 방법만 있습니다. 식별자는 ENUM_ARROW_ANCHOR에 나열됩니다.

ENUM_ARROW_ANCHOR

ID

설명

ANCHOR_TOP

상부 측면 앵커

ANCHOR_BOTTOM

하부 측면 앵커

예:

void OnStart()
  {
//--- 보조 배열
   double Ups[],Downs[];
   datetime Time[];
//--- 배열을 시계열로 설정
   ArraySetAsSeries(Ups,true);
   ArraySetAsSeries(Downs,true);
   ArraySetAsSeries(Time,true);
//--- 지표 프랙탈 핸들 생성
   int FractalsHandle=iFractals(NULL,0);
   Print("FractalsHandle = ",FractalsHandle);
//--- 마지막 오류 값을 0으로 설정
   ResetLastError();
//--- 지표 값 복사 시도
   int copied=CopyBuffer(FractalsHandle,0,0,1000,Ups);
   if(copied<=0)
     {
      Print("상위 프랙탈을 복사할 수 없습니다. Error = ",GetLastError());
      return;
     }
 
   ResetLastError();
//--- 지표 값 복사 시도
   copied=CopyBuffer(FractalsHandle,1,0,1000,Downs);
   if(copied<=0)
     {
      Print("하위 프랙탈을 복사할 수 없습니다. Error = ",GetLastError());
      return;
     }
 
   ResetLastError();
//--- 마지막 1000개의 시작 막대가 포함된 시계열 복사
   copied=CopyTime(NULL,0,0,1000,Time);
   if(copied<=0)
     {
      Print("마지막 100개 막대 시작 시간을 복사할 수 없습니다.");
      return;
     }
 
   int upcounter=0,downcounter=0; // 화살표 수를 파악
   bool created;// 개체 생성 시도의 결과를 수신
   for(int i=2;i<copied;i++)// 지표 iFractals 값 실행
     {
      if(Ups[i]!=EMPTY_VALUE)// 상위 프랙탈 발견
        {
         if(upcounter<10)// 10개 이하의 "위쪽" 화살표 생성
           {
            //--- "위쪽" 개체 생성 시도
            created=ObjectCreate(0,string(Time[i]),OBJ_ARROW_THUMB_UP,0,Time[i],Ups[i]);
            if(created)// 설정된 경우 - 튜닝을 수행합니다
              {
               //--- 막대를 덮지 않기 위해 점 앵커가 아래에 있습니다
               ObjectSetInteger(0,string(Time[i]),OBJPROP_ANCHOR,ANCHOR_BOTTOM);
               //--- 최종 터치 - 색칠
               ObjectSetInteger(0,string(Time[i]),OBJPROP_COLOR,clrBlue);
               upcounter++;
              }
           }
        }
      if(Downs[i]!=EMPTY_VALUE)// 하부 프랙탈 발견
        {
         if(downcounter<10)// 10개 이하의 "아래로" 화살표 만들기
           {
            //--- "아래쪽" 개체 생성 시도
            created=ObjectCreate(0,string(Time[i]),OBJ_ARROW_THUMB_DOWN,0,Time[i],Downs[i]);
            if(created)// 설정된 경우 - 튜닝을 수행합니다
              {
               //--- 막대를 덮지 않기 위해 점 앵커가 위에 있습니다
               ObjectSetInteger(0,string(Time[i]),OBJPROP_ANCHOR,ANCHOR_TOP);
               //--- 최종 터치 - 색칠
               ObjectSetInteger(0,string(Time[i]),OBJPROP_COLOR,clrRed);
               downcounter++;
              }
           }
        }
     }
  }

스크립트 실행 후 차트는 이 그림과 같이 표시됩니다.

프랙탈 값으로 표시 배치