跳至内容

对象属性

对象属性

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

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

对象IDX/Y宽度/高度日期/价格OBJPROP_CORNEROBJPROP_ANCHOROBJPROP_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_XDISTANCEX轴定位点像素距离 (see note)int
OBJPROP_YDISTANCEY轴定位点像素距离 (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_LABELcolor
OBJPROP_CORNER图表连接到图解对象ENUM_BASE_CORNER
OBJPROP_BORDER_TYPE“矩形标签”对象的边界类型ENUM_BORDER_TYPE
OBJPROP_BORDER_COLOROBJ_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_VALUEdouble
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文件的位图标签名称 另见 Resourcesstring 修饰符: 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);
     }
  }