对象属性
对象属性
图形对象根据对象类型可以具备多种属性。对象属性的值通过使用图形对象的相应 函数来设置和接收。
技术分析中使用的全部对象绑定时间和价格坐标:趋势线,通道,斐波纳契工具等等。但是有许多辅助对象,意在改善绑定图表始终可见部分的用户界面(主图表窗口或指标子窗口):
| 对象 | 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 定义了指定定位点坐标相对的图表角落。可以是4个ENUM_BASE_CORNER 枚举值中的一个;
- OBJPROP_ANCHOR 定义了对象本身的定位点,可以是9个 ENUM_ANCHOR_POINT 枚举值中的一个。从这个点到选定的图表角指定像素坐标;
- OBJPROP_ANGLE 定义逆时针对象旋转角度。
定义图形对象属性的函数,以及用于沿着图表创建和移动对象的ObjectCreate() 和 ObjectMove() 操作符实际上是用来向图表发送命令。如果这些函数成功执行,常见的图表事件队列就会包含该命令。当处理图表事件队列时,才会实施图形对象属性的视觉变化。
因此,不要期待调用这些函数后图形对象的即时视觉更新。通常,图表上的图形对象会根据事件变化由程序端自动更新 - 进入新报价,调整图表窗口等。使用ChartRedraw() 函数,强制更新图形对象。
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_FILL | 颜色填充对象 ( 为OBJ_RECTANGLE,OBJ_TRIANGLE,OBJ_ELLIPSE,OBJ_CHANNEL, OBJ_STDDEVCHANNEL,OBJ_REGRESSION) | bool |
| OBJPROP_HIDDEN | 禁止在程序端菜单“图表”-“对象”-“对象列表”的对象列表中显示图形对象的名称。真实值允许隐藏列表的对象。默认下,true的设置用于显示日程表事件的对象,交易历史和 MQL5 程序创建的对象。若要看到这种 图形对象 和访问他们的属性,请点击“对象列表”窗口中的“全部”按钮。 | bool |
| OBJPROP_SELECTED | 所选对象 | bool |
| OBJPROP_READONLY | 在编辑对象上编辑文本 | bool |
| OBJPROP_TYPE | 对象类型 | ENUM_OBJECT r/o |
| OBJPROP_TIME | 时间坐标 | 日期时间修饰符=定位点数字 |
| OBJPROP_SELECTABLE | 对象可用性 | bool |
| OBJPROP_CREATETIME | 创建对象时间 | datetime r/o |
| OBJPROP_LEVELS | 水平数量 | int |
| OBJPROP_LEVELCOLOR | 线路水平颜色 | 颜色修饰符=水平数字 |
| OBJPROP_LEVELSTYLE | 线路水平风格 | ENUM_LINE_STYLE 修饰符=水平数字 |
| OBJPROP_LEVELWIDTH | 线路水平厚度 | int 修饰符=水平数字 |
| OBJPROP_ALIGN | “编辑”对象中的水平文本对齐 (OBJ_EDIT) | ENUM_ALIGN_MODE |
| OBJPROP_FONTSIZE | 字体大小 | int |
| OBJPROP_RAY_LEFT | 向左发出射线 | bool |
| OBJPROP_RAY_RIGHT | 向右发出射线 | bool |
| OBJPROP_RAY | 垂直线通过图表的全部窗口 | 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_BITMAP_LABEL, OBJ_TEXT) |
| OBJPROP_XDISTANCE | X轴定位点像素距离 (see note) | int |
| OBJPROP_YDISTANCE | Y轴定位点像素距离 (see note) | int |
| OBJPROP_DIRECTION | 江恩物件趋势 | ENUM_GANN_DIRECTION |
| OBJPROP_DEGREE | 埃利奥特波动标记水平 | ENUM_ELLIOT_WAVE_DEGREE |
| OBJPROP_DRAWLINES | 埃利奥特波动标记排成一行 | bool |
| OBJPROP_STATE | 按钮状态(按压/未按压) | bool |
| OBJPROP_CHART_ID | “图表”对象的ID(OBJ_CHART)。它允许使用该对象的属性,好像使用图表操作中描述的函数的普通图表,但是有一些例外。 | long r/o |
| OBJPROP_XSIZE | 对象宽度沿着X轴,以像素表示。指定用于 OBJ_LABEL (只读), OBJ_BUTTON, OBJ_CHART, OBJ_BITMAP, OBJ_BITMAP_LABEL, OBJ_EDIT, OBJ_RECTANGLE_LABEL 对象 | int |
| OBJPROP_YSIZE | 对象高度沿着Y轴,以像素表示。指定用于 OBJ_LABEL (只读), OBJ_BUTTON, OBJ_CHART, OBJ_BITMAP, OBJ_BITMAP_LABEL, OBJ_EDIT, OBJ_RECTANGLE_LABEL 对象 | int |
| OBJPROP_XOFFSET | 图形对象“位图标签”和“位图”(OBJ_BITMAP_LABEL 和 OBJ_BITMAP)中的 矩形可见区域 左上角的X坐标。该值由原始图片左上角对应的像素设置。 | int |
| OBJPROP_YOFFSET | 图形对象“位图标签”和“位图”(OBJ_BITMAP_LABEL 和 OBJ_BITMAP)中的 矩形可见区域 左上角的Y坐标。该值由原始图片左上角对应的像素设置。 | int |
| OBJPROP_PERIOD | 图解对象时间表 | ENUM_TIMEFRAMES |
| OBJPROP_DATE_SCALE | 显示图解对象时间比例 | bool |
| OBJPROP_PRICE_SCALE | 显示图解对象价格比例 | bool |
| OBJPROP_CHART_SCALE | 图解对象测量 | 0-5的整数值 |
| 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_CHART)的 图表操作 时,会有以下限制:
- 不能使用 ChartClose()关闭;
- 不能使用 ChartSetSymbolPeriod() 函数改变交易品种/周期;
- 以下属性无效 CHART_SCALE, CHART_BRING_TO_TOP, CHART_SHOW_DATE_SCALE 和 CHART_SHOW_PRICE_SCALE (ENUM_CHART_PROPERTY_INTEGER)。
对于OBJ_BITMAP_LABEL 和 OBJ_BITMAP对象,可以通过编程的方式设置特殊的图片展示模式。在该模式下,只有部分原始图片(应用矩形可见区域的图片)可以展示,而其他图片都不会显示。该区域的大小应该使用OBJPROP_XSIZE 和 OBJPROP_YSIZE属性来设置。可见区域只能使用OBJPROP_XOFFSET 和 OBJPROP_YOFFSET属性在原始图片范围内“移动”。
对于固定大小的对象: OBJ_BUTTON,OBJ_RECTANGLE_LABEL,OBJ_EDIT 和 OBJ_CHART,属性OBJPROP_XDISTANCE 和 OBJPROP_YDISTANCE 设置对象的左上角的位置到相对的图表的四角(OBJPROP_CORNER),这里X和Y坐标将通过像素计算。
ObjectSetDouble() 和 ObjectGetDouble() 函数
ENUM_OBJECT_PROPERTY_DOUBLE
| 标识符 | 描述 | 属性类型 |
|---|---|---|
| OBJPROP_PRICE | 价格坐标 | double 修饰符=定位点号 |
| OBJPROP_LEVELVALUE | 水平值 | double 修饰符=水平号 |
| OBJPROP_SCALE | 比例(江恩对象和斐波纳契 弧线) | double |
| OBJPROP_ANGLE | 角度。对于程序创建的,无指定角度的对象来说,它的值等同于 EMPTY_VALUE | double |
| OBJPROP_DEVIATION | 标准偏差通道误差 | double |
ObjectSetString() 和 ObjectGetString() 函数
ENUM_OBJECT_PROPERTY_STRING
| 标识符 | 描述 | 属性类型 |
|---|---|---|
| OBJPROP_NAME | 物件名称 | string |
| OBJPROP_TEXT | 物件描述(物件中包含的文本) | string |
| OBJPROP_TOOLTIP | 提示信息文本。如果没有设置属性,那么将显示程序端自动生成的提示信息。提示信息可以通过设置"\n" (line feed) 值来禁用 | string |
| OBJPROP_LEVELTEXT | 水平描述 | string 修饰符=水平号 |
| OBJPROP_FONT | 字体 | string |
| OBJPROP_BMPFILE | 文件的位图标签名称 另见 Resources | string 修饰符: 0-state ON, 1-state OFF |
| 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"
//+------------------------------------------------------------------+
//| 脚本程序启动函数 |
//+------------------------------------------------------------------+
void OnStart()
{
//---
string label_name="my_OBJ_LABEL_object";
if(ObjectFind(0,label_name)<0)
{
Print("Object ",label_name," not found. Error code = ",GetLastError());
//--- 创建标签物件
ObjectCreate(0,label_name,OBJ_LABEL,0,0,0);
//--- 设置X坐标
ObjectSetInteger(0,label_name,OBJPROP_XDISTANCE,200);
//--- 设置Y坐标
ObjectSetInteger(0,label_name,OBJPROP_YDISTANCE,300);
//--- 定义文本颜色
ObjectSetInteger(0,label_name,OBJPROP_COLOR,clrWhite);
//--- 定义标签物件文本
ObjectSetString(0,label_name,OBJPROP_TEXT,UP);
//--- 定义字体
ObjectSetString(0,label_name,OBJPROP_FONT,"Wingdings");
//--- 定义字体大小
ObjectSetInteger(0,label_name,OBJPROP_FONTSIZE,10);
//--- 顺时针45度
ObjectSetDouble(0,label_name,OBJPROP_ANGLE,-45);
//--- 禁止鼠标选择
ObjectSetInteger(0,label_name,OBJPROP_SELECTABLE,false);
//--- 图表上绘画
ChartRedraw(0);
}
}