对象属性

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

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

对象

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);                                      
     }
  }