Object Properties
图形对象的属性
根据对象类型的不同,图形对象可以具有多种属性。所有用于技术分析的对象都绑定到时间和价格坐标:趋势线、通道、斐波那契工具等。但是,还有一些辅助对象旨在改进用户界面,这些对象绑定到图表中始终可见的部分(主图表窗口或指标子窗口):
| 对象 | 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 – 定义对象逆时针方向的旋转角度。
与ObjectGet()和ObjectSet()函数一起使用的对象值索引。它可以是以下值之一:
| ID | 值 | 类型 | 描述 |
|---|---|---|---|
| OBJPROP_TIME1 | 0 | datetime | 用于设置/获取第一个坐标时间部分的日期时间值 |
| OBJPROP_PRICE1 | 1 | double | 用于设置/获取第一个坐标价格部分的双倍值 |
| OBJPROP_TIME2 | 2 | datetime | 用于设置/获取第二个坐标时间部分的日期时间值 |
| OBJPROP_PRICE2 | 3 | double | 用于设置/获取第二个坐标价格部分的双倍值 |
| OBJPROP_TIME3 | 4 | datetime | 用于设置/获取第三个坐标时间部分的日期时间值 |
| OBJPROP_PRICE3 | 5 | double | 用于设置/获取第三个坐标价格部分的双倍值 |
| OBJPROP_COLOR | 6 | color | 用于设置/获取对象颜色的颜色值 |
| OBJPROP_STYLE | 7 | int | 用于设置/获取对象线样式的常量,可以是STYLE_SOLID、STYLE_DASH、STYLE_DOT、STYLE_DASHDOT或STYLE_DASHDOTDOT |
| OBJPROP_WIDTH | 8 | int | 用于设置/获取对象线宽的整数值。可以是1到5之间 |
| OBJPROP_BACK | 9 | bool | 用于设置/获取对象背景绘制的布尔值 |
| OBJPROP_RAY | 10 | bool | 用于设置/获取对象射线标志的布尔值。 |
| OBJPROP_ELLIPSE | 11 | bool | 用于设置/获取斐波那契弧的椭圆标志的布尔值 |
| OBJPROP_SCALE | 12 | double | 用于设置/获取对象属性比例的双倍值 |
| OBJPROP_ANGLE | 13 | double | 用于以度为单位设置/获取对象属性角度的双倍值 |
| OBJPROP_ARROWCODE | 14 | uchar | 用于设置/获取对象属性箭头代码的整数值或箭头枚举 |
| OBJPROP_TIMEFRAMES | 15 | int | 值可以是对象可见性常量的组合(按位加法),用于设置/获取时间框架对象属性 |
| OBJPROP_DEVIATION | 16 | double | 用于设置/获取标准差对象的偏差属性的双倍值 |
| OBJPROP_FONTSIZE | 100 | int | 用于设置/获取文本对象的字体大小的整数值 |
| OBJPROP_CORNER | 101 | int | 用于设置/获取标签对象的锚点角落的属性整数值。必须是0到3之间。 |
| OBJPROP_XDISTANCE | 102 | int | 用于设置/获取对象锚点X距离属性的值,以像素为单位(参见注释) |
| OBJPROP_YDISTANCE | 103 | int | 用于设置/获取对象锚点Y距离属性的值,以像素为单位(参见注释) |
| OBJPROP_FIBOLEVELS | 200 | int | 用于设置/获取斐波那契对象级别计数的整数值。可以是0到32之间 |
| OBJPROP_LEVELCOLOR | 201 | color | 用于设置/获取对象级别线颜色的颜色值 |
| OBJPROP_LEVELSTYLE | 202 | int | 用于设置/获取对象级别线样式的常量,可以是STYLE_SOLID、STYLE_DASH、STYLE_DOT、STYLE_DASHDOT或STYLE_DASHDOTDOT |
| OBJPROP_LEVELWIDTH | 203 | int | 用于设置/获取对象级别线宽的整数值。可以是1到5之间 |
| OBJPROP_FIRSTLEVEL+n | 210+n | int | 用于设置/获取带有索引n的斐波那契对象级别的值的整数值。索引n可以是0(级别数-1),但不超过31 |
价格图表中的每个图形对象都具有一组特定的属性。对象属性的值由相应的处理图形对象的函数设置和接收。每种对象类型都有自己的一组属性。这里列出了ENUM_OBJECT_PROPERTY枚举家族中所有可能的值。某些属性需要澄清,例如斐波那契扩展对象的级别数。在这种情况下,需要在ObjectSet…()和ObjectGet…()函数中指定修改器参数的值。
对于ObjectSetInteger()和ObjectGetInteger()
ENUM_OBJECT_PROPERTY_INTEGER
| 标识符 | 描述 | 属性类型 |
|---|---|---|
| OBJPROP_COLOR | 颜色 | color |
| OBJPROP_STYLE | 样式 | ENUM_LINE_STYLE |
| OBJPROP_WIDTH | 线宽 | int |
| OBJPROP_BACK | 对象在背景中的状态 | bool |
| OBJPROP_ZORDER | 图形对象接收图表点击事件的优先级(CHARTEVENT_CLICK)。创建对象时默认值为零;必要时可以提高优先级。当对象堆叠在一起时,只有优先级最高的一个会接收CHARTEVENT_CLICK事件。 | long |
| OBJPROP_HIDDEN | 禁止在终端菜单“图表”->“对象”->“对象列表”中显示图形对象的名称。真值允许从列表中隐藏对象。默认情况下,显示日历事件、交易历史和由MQL4程序创建的对象的对象的属性设置为真。要查看此类图形对象并访问其属性,请点击“对象列表”窗口中的“全部”按钮。 | bool |
| OBJPROP_SELECTED | 对象被选中 | bool |
| OBJPROP_READONLY | 编辑编辑对象中文本的能力 | bool |
| OBJPROP_TYPE | 对象类型 | ENUM_OBJECT 只读 |
| OBJPROP_TIME | 时间坐标 | datetime 修饰符=锚点数量 |
| OBJPROP_SELECTABLE | 对象的可用性 | bool |
| OBJPROP_CREATETIME | 对象创建时间 | datetime 只读 |
| OBJPROP_LEVELS | 级别数量 | int |
| OBJPROP_LEVELCOLOR | 线级颜色 | color 修饰符=级别数 |
| OBJPROP_LEVELSTYLE | 线级的样式 | ENUM_LINE_STYLE 修饰符=级别数 |
| OBJPROP_LEVELWIDTH | 线级的厚度 | int 修饰符=级别数 |
| OBJPROP_ALIGN | “编辑”对象中的水平文本对齐方式(OBJ_EDIT) | ENUM_ALIGN_MODE |
| OBJPROP_FONTSIZE | 字体大小 | int |
| OBJPROP_RAY_RIGHT | 射线向右延伸 | bool |
| OBJPROP_ELLIPSE | 显示斐波那契弧的完整椭圆(OBJ_FIBOARC) | bool |
| OBJPROP_ARROWCODE | 箭头对象的箭头代码 | uchar |
| OBJPROP_TIMEFRAMES | 对象在时间框架中的可见性 | 一组标志flags |
| OBJPROP_ANCHOR | 图形对象的锚点位置 | ENUM_ARROW_ANCHOR(适用于OBJ_ARROW), ENUM_ANCHOR_POINT(适用于OBJ_LABEL、OBJ_BITMAPLABEL和OBJ_TEXT) |
| OBJPROP_XDISTANCE | 从绑定角落沿X轴的距离(参见注释) | int |
| OBJPROP_YDISTANCE | 从绑定角落沿Y轴的距离(参见注释) | int |
| OBJPROP_DRAWLINES | 显示艾略特波浪线标记线 | bool |
| OBJPROP_STATE | 按钮状态(按下/压紧) | bool |
| OBJPROP_XSIZE | 对象沿X轴的宽度,以像素为单位。适用于OBJ_LABEL(只读)、OBJ_BUTTON、OBJ_BITMAP、OBJ_BITMAPLABEL、OBJ_EDIT、OBJ_RECTANGLE_label对象。 | int |
| OBJPROP_YSIZE | 对象沿Y轴的高度,以像素为单位。适用于OBJ_label(只读)、OBJ_button、OBJ_bitmap、OBJ_bitmap_label、OBJ_EDIT、OBJ_rectangle_label对象。 | int |
| OBJPROP_XOFFSET | 图形对象“Bitmap Label”和“Bitmap”中矩形可见区域的左上角的X坐标(OBJ_BITMAPLABEL和OBJ_bitmap)。该值以像素为单位相对于原始图像的左上角设置。 | int |
| OBJPROP_YOFFSET | 图形对象“Bitmap Label”和“Bitmap”中矩形可见区域的左上角的Y坐标(OBJ_BITMAPLABEL和OBJ_bitmap)。该值以像素为单位相对于原始图像的左上角设置。 | int |
| OBJPROP_BGCOLOR | OBJ_EDIT、OBJ_button、OBJ_rectangle_label的背景颜色 | color |
| OBJPROP_CORNER | 链接图形对象的图表角落 | ENUM_BASE_CORNER |
| OBJPROP_BORDER_TYPE | “矩形标签”对象的边框类型 | ENUM_BORDER_TYPE |
| OBJPROP_BORDER_COLOR | OBJ_EDIT和OBJ_button对象的边框颜色 | color |
对于OBJ_BITMAPLABEL和OBJ_BITMAP对象,可以通过编程设置特殊的图像显示模式。在这种模式下,仅显示原始图像的一部分(应用了矩形可见区域),而其余图像变得不可见。使用属性OBJPROP_XSIZE和OBJPROP_YSIZE可以设置该区域的大小。只能使用属性OBJPROP_XOFFSET和OBJPROP_YOFFSET在原始图像内“移动”可见区域。
对于固定大小的对象:OBJ_BUTTON、OBJ_RECTANGLE_LABEL和OBJ_EDIT,属性OBJPROP_XDISTANCE和OBJPROP_YDISTANCE设置对象左上角相对于图表角落的位置(OBJPROP_CORNER),从这一点开始以像素计算X和Y坐标。
对于ObjectSetDouble()和ObjectGetDouble()
ENUM_OBJECT_PROPERTY_DOUBLE
| 标识符 | 描述 | 属性类型 |
|---|---|---|
| OBJPROP_PRICE | 价格坐标 | double 修饰符=锚点数量 |
| OBJPROP_LEVELVALUE | 级别值 | double 修饰符=级别数 |
| OBJPROP_SCALE | 比例(Gann对象、斐波那契弧和椭圆的属性) | double |
| OBJPROP_ANGLE | 角度。对于没有指定角度的由程序创建的对象,该值等于EMPTY_VALUE | double |
| OBJPROP_DEVIATION | 标准差通道的偏差 | double |
对于ObjectSetString()和ObjectGetString()
ENUM_OBJECT_PROPERTY_STRING
| 标识符 | 描述 | 属性类型 |
|---|---|---|
| OBJPROP_NAME | 对象名称 | string |
| OBJPROP_TEXT | 对象的描述(包含在对象中的文本) | string |
| OBJPROP_TOOLTIP | 工具提示的文本。如果未设置此属性,则显示由终端自动生成的工具提示。可以通过将“\n”(换行符)值设置为该属性来禁用工具提示 | string |
| OBJPROP_LEVELTEXT | 级别描述 | string 修饰符=级别数 |
| OBJPROP_FONT | 字体 | string |
| OBJPROP_BMPFILE | 位图标签的BMP文件名称。另请参阅Resources | string 修饰符:0状态为开,1状态为关 |
| OBJPROP_SYMBOL | 图表对象的符号 | string |
对于OBJ_RECTANGLE_label对象(“矩形标签”),可以设置三种设计模式之一,以下ENUM_BORDER_TYPE值对应于此。
ENUM_BORDER_TYPE
| 标识符 | 描述 |
|---|---|
| BORDER_FLAT | 扁平形式 |
| BORDER_RAISED | 突出形式 |
| BORDER_SUNKEN | 凹形形式 |
对于OBJ_EDIT对象(“编辑”)和ChartScreenShot()函数,可以使用ENUM_ALIGN_MODE枚举的值指定水平对齐类型。
ENUM_ALIGN_MODE
| 标识符 | 描述 |
|---|---|
| ALIGN_LEFT | 左对齐 |
| ALIGN_CENTER | 居中(仅适用于编辑对象) |
| ALIGN_RIGHT | 右对齐 |
示例:
#define UP "\x0431"
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
string label_name="my_OBJ_LABEL_object";
if(ObjectFind(0,label_name)<0)
{
Print("Object ",label_name," not found. Error code = ",GetLastError());
//--- create Label object
ObjectCreate(0,label_name,OBJ_LABEL,0,0,0);
//--- set X coordinate
ObjectSetInteger(0,label_name,OBJPROP_XDISTANCE,200);
//--- set Y coordinate
ObjectSetInteger(0,label_name,OBJPROP_YDISTANCE,300);
//--- define text color
ObjectSetInteger(0,label_name,OBJPROP_COLOR,clrWhite);
//--- define text for object Label
ObjectSetString(0,label_name,OBJPROP_TEXT,UP);
//--- define font
ObjectSetString(0,label_name,OBJPROP_FONT,"Wingdings");
//--- define font size
ObjectSetInteger(0,label_name,OBJPROP_FONTSIZE,10);
//--- 45 degrees rotation clockwise
ObjectSetDouble(0,label_name,OBJPROP_ANGLE,-45);
//--- disable for mouse selecting
ObjectSetInteger(0,label_name,OBJPROP_SELECTABLE,false);
//--- draw it on the chart
ChartRedraw(0);
}
}