Esquina del gráfico a la que se enlaza un objeto

Existe una serie de objetos gráficos, para los que se puede establecer el ángulo del gráfico con respecto al cual se indican las coordenadas en píxeles. Se trata de los siguientes tipos de objetos (entre paréntesis se indican los identificadores del tipo de objeto):

  • Label (OBJ_LABEL); Etiqueta de texto
  • Button (OBJ_BUTTON); Botón
  • Bitmap Label (OBJ_BITMAP_LABEL); Etiqueta Gráfica
  • Edit (OBJ_EDIT); Campo de edición
  • Rectangle Label (OBJ_RECTANGLE_LABEL). Etiqueta rectangular

Objeto

Identificador

X/Y

Width/Height

Date/Price

OBJPROP_CORNER

OBJPROP_ANCHOR

OBJPROP_ANGLE

Text

OBJ_TEXT

Label

OBJ_LABEL

Sí (sólo lectura)

Button

OBJ_BUTTON

Bitmap

OBJ_BITMAP

Sí (sólo lectura)

Bitmap Label

OBJ_BITMAP_LABEL

Sí (sólo lectura)

Edit

OBJ_EDIT

Rectangle Label

OBJ_RECTANGLE_LABEL

En el recuadro se usan las siguientes denominaciones:

  • X/Y — las coordenadas del punto de enlace se establecen en píxeles con respecto a uno de los ángulos del gráfico;
  • Width/Height — el objeto tiene anchura y altura. Si se indica "sólo lectura", esto significa que los valores de la anchura y la altura se calculan sólo después de que el objeto haya sido dibujado en el gráfico;
  • Date/Price — las coordenadas del punto de enlace se dan con la pareja fecha/hora;
  • OBJPROP_CORNER — establece el ángulo del gráfico con respecto al cual se indican las coordenadas del punto de enlace. Puede ser uno de los 4 valores de la enumeración ENUM_BASE_CORNER;
  • OBJPROP_ANCHOR — establece la posición del punto de enlace en el propio objeto, y puede ser uno de los 9 valores de la enumeración ENUM_ANCHOR_POINT. Precisamente desde este punto hasta el ángulo elegido en el gráfico se indican las coordenadas en píxeles;
  • OBJPROP_ANGLE — establece el ángulo de rotación del objeto en el sentido opuesto a las agujas del reloj.

Para especificar la esquina del gráfico desde la cual se miden las coordinadas X y Y en píxeles, hay que usar la función ObjectSetInteger(chartID, name, OBJPROP_CORNER, chart_corner), donde:

  • chartID - identificador del gráfico;
  • name — nombre del objeto gráfico;
  • OBJPROP_CORNER — identificador de la propiedad para determinar la esquina de enlace;
  • chart_corner — la esquina del gráfico puede adquirir uno de los valores de la enumeración ENUM_BASE_CORNER.

ENUM_BASE_CORNER

Identificador

Descripción

CORNER_LEFT_UPPER

Centro de coordinadas se encuentra en la esquina superior izquierda del gráfico

CORNER_LEFT_LOWER

Centro de coordinadas se encuentra en la esquina inferior izquierda del gráfico

CORNER_RIGHT_LOWER

Centro de coordinadas se encuentra en la esquina inferior derecha del gráfico

CORNER_RIGHT_UPPER

Centro de coordinadas se encuentra en la esquina superior derecha del gráfico

Ejemplo:

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("No se ha logrado crear el objeto OBJ_LABEL ",name,", Código de error = "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);
  }