O Canto do Gráfico no Qual um Objeto Fica Ligado

Existe uma série de objetos gráficos, para os quais você pode definir o ângulo, que especifica as coordenadas do ponto de âncora. Esses são os seguintes tipos de objetos (os identificadores de tipo de objeto estão entre parênteses):

  • Label (OBJ_LABEL); Rótulo do texto
  • Button (OBJ_BUTTON); Botão
  • Bitmap Label (OBJ_BITMAP_LABEL); Rótulo do gráfico
  • Edit (OBJ_EDIT); Campo de entrada
  • Rectangle Label (OBJ_RECTANGLE_LABEL). Rótulo retangular

Objeto

Identificador

X/Y

Width/Height

Date/Price

OBJPROP_CORNER

OBJPROP_ANCHOR

OBJPROP_ANGLE

Text

OBJ_TEXT

Sim

Sim

Sim

Label

OBJ_LABEL

Sim

Sim (apenas leitura)

Sim

Sim

Sim

Button

OBJ_BUTTON

Sim

Sim

Sim

Bitmap

OBJ_BITMAP

Sim (apenas leitura)

Sim

Sim

Bitmap Label

OBJ_BITMAP_LABEL

Sim

Sim (apenas leitura)

Sim

Sim

Edit

OBJ_EDIT

Sim

Sim

Sim

Rectangle Label

OBJ_RECTANGLE_LABEL

Sim

Sim

Sim

Na tabela são utilizadas as seguintes denominações:

  • X/Y — as coordenadas do ponto âncora são especificadas em pixels em relação a um dos cantos do gráfico;
  • Width/Height — os objetos têm largura e altura. Se você definir "apenas leitura", isso significa que os valores para largura e altura são calculados somente após o processamento do objeto no gráfico;
  • Date/Price — as coordenadas do ponto âncora são definidas pelo par data/preço;
  • OBJPROP_CORNER — define o ângulo do gráfico, que especifica as coordenadas do ponto de âncora. Pode ser um dos 4 valores de enumeração ENUM_BASE_CORNER;
  • OBJPROP_ANCHOR — define a posição do ponto de âncora no objeto, e pode ser um dos 9 valores de enumeração ENUM_ANCHOR_POINT. Precisamente a partir desse ponto até ao canto selecionado são expecificadas as cordenadas em pixels;
  • OBJPROP_ANGLE — define o ângulo de rotação do objeto no sentido anti-horário.

A fim de especificar o canto do gráfico, a partir do qual as coordenadas X e Y serão medidas em pixels, use ObjectSetInteger(chartID, name, OBJPROP_CORNER, chart_corner), onde:

  • chartID - identificador do gráfico;
  • name — nome de um objeto gráfico;
  • OBJPROP_CORNER — propriedade ID para especificar o canto para vinculação;
  • chart_corner — o canto desejado do gráfico, pode ser um dos valores da enumeração ENUM_BASE_CORNER.

ENUM_BASE_CORNER

ID

Descrição

CORNER_LEFT_UPPER

Centro de coordenadas está no canto superior esquerdo do gráfico

CORNER_LEFT_LOWER

Centro de coordenadas está no canto inferior esquerdo do gráfico

CORNER_RIGHT_LOWER

Centro de coordenadas está no canto inferior direito do gráfico

CORNER_RIGHT_UPPER

Centro de coordenadas está no canto superior direito do gráfico

Exemplo:

void CreateLabel(long   chart_id,
                 string name,
                 int    chart_corner,
                 int    anchor_point,
                 string text_label,
                 int    x_ord,
                 int    y_ord)
  {
//---
   if(ObjectCreate(chart_id,name,OBJ_LABEL,0,0,0))
     {
      ObjectSetInteger(chart_id,name,OBJPROP_CORNER,chart_corner);
      ObjectSetInteger(chart_id,name,OBJPROP_ANCHOR,anchor_point);
      ObjectSetInteger(chart_id,name,OBJPROP_XDISTANCE,x_ord);
      ObjectSetInteger(chart_id,name,OBJPROP_YDISTANCE,y_ord);
      ObjectSetString(chart_id,name,OBJPROP_TEXT,text_label);
     }
   else
      Print("Не удалось создать объект OBJ_LABEL ",name,", Код ошибки = "GetLastError());
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int height=(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0);
   int width=(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);
   string arrows[4]={"LEFT_UPPER","RIGHT_UPPER","RIGHT_LOWER","LEFT_LOWER"};
   CreateLabel(0,arrows[0],CORNER_LEFT_UPPER,ANCHOR_LEFT_UPPER,arrows[0],50,50);
   CreateLabel(0,arrows[1],CORNER_RIGHT_UPPER,ANCHOR_RIGHT_UPPER,arrows[1],50,50);
   CreateLabel(0,arrows[2],CORNER_RIGHT_LOWER,ANCHOR_RIGHT_LOWER,arrows[2],50,50);
   CreateLabel(0,arrows[3],CORNER_LEFT_LOWER,ANCHOR_LEFT_LOWER,arrows[3],50,50);
  }