Chart Corner
图表角点,对象附着于此
有一些图形对象可以设置图表角点,相对于该角点来指定坐标(以像素为单位)。这些对象的类型如下(括号内为对象类型标识符):
- 标签(OBJ_LABEL);
- 按钮(OBJ_BUTTON);
- 位图标签(OBJ_BITMAPLABEL);
- 编辑框(OBJ_EDIT);
- 矩形标签(OBJ_RECTANGLELABEL);
| 对象 | ID | X/Y | 宽度/高度 | 日期/价格 | OBJPROP_CORNER | OBJPROP_ANCHOR | OBJPROP_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);
}最后更新于