对象属性

图形对象根据对象类型可以具备多种属性。对象属性的值通过使用图形对象的相应 函数来设置和接收

技术分析中使用的全部对象绑定时间和价格坐标:趋势线,通道,斐波纳契工具等等。但是有许多辅助对象,意在改善绑定图表始终可见部分的用户界面(主图表窗口或指标子窗口):

对象 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)的 图表操作 时,会有以下限制:

对于OBJ_BITMAP_LABELOBJ_BITMAP对象,可以通过编程的方式设置特殊的图片展示模式。在该模式下,只有部分原始图片(应用矩形可见区域的图片)可以展示,而其他图片都不会显示。该区域的大小应该使用OBJPROP_XSIZE 和 OBJPROP_YSIZE属性来设置。可见区域只能使用OBJPROP_XOFFSET 和 OBJPROP_YOFFSET属性在原始图片范围内“移动”。

对于固定大小的对象: OBJ_BUTTONOBJ_RECTANGLE_LABELOBJ_EDITOBJ_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);

     }

  }