跳至内容

Chart Corner

图表角点,对象附着于此

有一些图形对象可以设置图表角点,相对于该角点来指定坐标(以像素为单位)。这些对象的类型如下(括号内为对象类型标识符):

  • 标签(OBJ_LABEL);
  • 按钮(OBJ_BUTTON);
  • 位图标签(OBJ_BITMAPLABEL);
  • 编辑框(OBJ_EDIT);
  • 矩形标签(OBJ_RECTANGLELABEL);
对象IDX/Y宽度/高度日期/价格OBJPROP_CORNEROBJPROP_ANCHOROBJPROP_ANGLE
文本OBJ_TEXT
标签OBJ_LABEL是(仅读取)
按钮OBJ_BUTTON
位图OBJ_BITMAP是(仅读取)
位图标签OBJ_BITMAPLABEL是(仅读取)
编辑框OBJ_EDIT
矩形标签OBJ_RECTANGLELABEL

表中使用的术语如下:

  • X/Y – 相对于图表角点以像素表示的锚点坐标;
  • 宽度/高度 – 对象具有宽度和高度。对于“仅读取”的情况,宽度和高度值仅在对象在图表上渲染时计算;
  • 日期/价格 – 锚点坐标使用日期和价格值指定;
  • OBJPROP_CORNER – 定义用于指定锚点坐标的图表角点。可以是ENUM_BASE_CORNER枚举中的4个值之一;
  • OBJPROP_ANCHOR – 定义对象本身的锚点,可以是ENUM_ANCHOR_POINT枚举中的9个值之一。从这一点到选定的图表角点以像素表示;
  • OBJPROP_ANGLE – 定义对象的旋转角度(逆时针方向)。

为了指定图表角点,以便以像素为单位测量X和Y坐标,可以使用ObjectSetInteger(chartID, name, OBJPROP_CORNER, chart_corner),其中:

  • chartID - 图表标识符;
  • name – 图形对象的名称;
  • OBJPROP_CORNER – 用于绑定的角点属性ID;
  • chart_corner – 所需的图表角点,可以是[ENUM_BASE_CORNER]枚举中的值之一。

[ENUM_BASE_CORNER]

ID描述
CORNER_LEFT_UPPER坐标中心位于图表的左上角
CORNER_LEFT_LOWER坐标中心位于图表的左下角
CORNER_RIGHT_LOWER坐标中心位于图表的右下角
CORNER_RIGHT_UPPER坐标中心位于图表的右上角

示例:

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("Failed to create the object OBJ_LABEL ",name,", Error code = ", 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);
  }
最后更新于