图形对象概述:
图形对象是 MQL4 中用于在交易图表上显示各种可视化元素的编程工具。包括线条、箭头、文本框、按钮,位图,矩形背景等多种类型。是用于构建用户界面的常用方法;图形对象可以与交易逻辑以及指标计算进行交互,增强图表可视化交互性与使用体验,是一种把内部信息通过图形对象直观展现的方式。例如我们常用的交易面板 - BBdata就是使用这种方式开发。
图示:创建几个简单的图形对象
- 对象创建:使用 ObjectCreate() 函数创建各种类型的图形对象。
- 事件捕捉:使用 OnChartEvent() 函数捕捉图形对象的事件,如单击、拖拽等。可以作为输入控件,接收鼠标或键盘操作。根据图形对象的事件,触发相应的交易逻辑和功能。
- 应用场景:创建可视化的交易信号和指标。开发交互式的交易界面和控制面板。实现图表上的标记、注释等功能。提高交易系统的可视化和用户体验。
图形对象分类
MQL4中自带的图形对象种类高达40余种,你能想到的类型基本都有,但多数在我们实际使用中的频率很低,本单元教学将列举使用频率最高的几种讲解。
1、OBJ_EDIT - 文本编辑框对象:edit为可编辑的意思,用于创建可编辑的文本输入框,监听编辑框的事件,如文本输入修改等操作。
2、OBJ_LABEL - 文本标签对象:用于创建静态文本标签,通常用于在图表上固定显示一些提示性文字。
3、OBJ_TEXT - 动态文本标签:和静态的功能相同,只不过显示内容吸附在图表或K线上
4、OBJ_BUTTON - 按钮对象:用于创建可点击的按钮控件,对象属性包含按下和弹起两种状态,可以通过监听按钮的点击事件,触发相应的交易逻辑,比如平仓开仓等功能实现。
5、OBJ_BITMAP_LABEL - 位图标签对象:用于在图表上显示位图图像,通常用于显示一些图标或logo,或者特定风格的图片。
6、OBJ_RECTANGLE_LABEL - 矩形标签对象:可以看做是一个矩形背景控件,通常同于衬托其他对象的美观度
图形对象的主要函数
在MQL4中,可以说每一种图形对象都包含了独立的常量属性,属性数量上百种。状态函数也是高达几十种;但是函数基本通用,可以使用函数进行创建和设置特定的图形对象。下面为大家列举最基础的4个主要函数:
- ObjectCreate 创建对象函数
- ObjectSetInteger 对象设置函数:具有int类型的对象属性,比如宽度高度颜色等
- ObjectSetDouble 对象设置函数:具有double类型的属性,比如价格等
- ObjectSetString 对象设置函数:具有string类型的属性,比如文本信息
到这里你可能会觉得对于图形对象的创建实在是太复杂了,有那么多属性怎么学?还还记答题的时候关于空间想象力的题目吧?学习图形化交互其实只需要具备空间想象力即可,对象属性可以随用随查MQL4帮助手册,千万不需要死记硬背,我们为大家准备了中文的MQL4中文版手册可以使用,另外MQL5的图形对象也和MQL4的使用方式一致。
MQL4/5帮助手册中为我们准备的现成代码,直接复制过来稍做改动即可:
void PANEL(const string name, // 名称
const int x, // X坐标
const int y, // Y坐标
const color back_clr, // 背景色
const int w, // 宽
const int h, // 高
const color line_clr, // 边色
const int linesize, // 线粗
const ENUM_BORDER_TYPE type = BORDER_FLAT, // 边框类型
const ENUM_BASE_CORNER corner = CORNER_LEFT_UPPER, // 锚点
const ENUM_LINE_STYLE style = STYLE_SOLID) // 边框样式
{
if(ObjectFind(name) < 0){
ObjectCreate(0,name,OBJ_RECTANGLE_LABEL,0,0,0);
}
ObjectSetInteger(0,name,OBJPROP_XSIZE,w); // 宽度
ObjectSetInteger(0,name,OBJPROP_YSIZE,h); // 高度
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x); // X轴
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y); // Y轴
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,back_clr); // 背景颜色
ObjectSetInteger(0,name,OBJPROP_WIDTH,linesize); // 边框粗细
ObjectSetInteger(0,name,OBJPROP_COLOR,line_clr); // 边框颜色:
ObjectSetInteger(0,name,OBJPROP_BORDER_TYPE,type); // 边框类型
ObjectSetInteger(0,name,OBJPROP_CORNER,corner); // 锚点
ObjectSetInteger(0,name,OBJPROP_STYLE,style); // 边框样式
//---
ObjectSetInteger(0, name, OBJPROP_BACK, FALSE); // 置于背景
ObjectSetInteger(0, name, OBJPROP_ZORDER,0); // 鼠标点击优先级
ObjectSetInteger(0, name, OBJPROP_SELECTABLE, FALSE); // 是否可选择
ObjectSetInteger(0, name, OBJPROP_SELECTED, FALSE); // 是否被选中
ObjectSetInteger(0, name, OBJPROP_HIDDEN, TRUE); // 是否隐藏
}
初步理解对象的各种属性
在每一种对象中,具有独有的属性也具有相同的属性,比如按钮和输入框,都包含了长度、宽度、横坐标、纵坐标颜色等属性,部分属性常量大体相似。
对于坐标,你可以先从屏幕分辨率理解,把1920X1080的屏幕理解成由1920x1080个像素个构成一个矩形的界面,而MT4的图表,也可以比作一个单独的屏幕,横坐标和纵坐标都是从0开始。以屏幕左上角为锚点,越往右,横坐标就越大;越往下,纵坐标就越大。
下图以OBJ_LABEL对象为例,属性中就是该对象的锚点和坐标。
下面的信息为该对象的名称、显示内容、字体、字体大小、显示颜色等属性。这些属性都可以通过编程写入样式来显示。