hello, world(指标编程教程第五篇:创建一个 Lable 物件)

提示

这是 2011 年写的一个系列教程。

为了方便和章节号对应,再新建一个 mql5 文件:

  • Ctrl + N 新建一个 mql5 文件。
  • 自定义指标
  • 名称:Indicators\bary-5
  • 作者:bary
  • 链接:http://www.bary.com/
  • OnCalculate(..., open, high, low, close
  • 不止一个时间序列用于计算
  • 完成

找到大概第 16 行,也就是 OnInit() 的函数体部分。代码如下:

int OnInit()
{
    ObjectCreate(0, "bary_text", OBJ_LABEL, 0, 0, 0);
    ObjectSetString(0, "bary_text", OBJPROP_TEXT, "hello, world");
    ObjectSetInteger(0, "bary_text", OBJPROP_CORNER, CORNER_RIGHT_LOWER);
    ObjectSetInteger(0, "bary_text", OBJPROP_XDISTANCE, 100);
    ObjectSetInteger(0, "bary_text", OBJPROP_YDISTANCE, 50);
    return(0);
}

为了省地儿,我把注释删掉了,按照国际惯例,第一个测试程序是 hello, worldOnInit() 是初始化函数,也就是里面写的东西只在指标加载的时候运行一次,里用到了三个函数:ObjectCreate()ObjectSetString()ObjectSetInteger()

ObjectCreate() 是物件创建函数,解释一下参数:第一个 0,表示这个物件创建在当前图表上,第二个 "bary_text" 是在给创建的物件命名,名字是一个字符串,注意要加双引号,第三个 OBJ_LABEL 表示创建一个 Label 物件,是一个标签。后三个 0 分别代表主窗口、时间坐标、价格坐标,因为后面我们要重新写坐标,所以暂时不用管。

ObjectSetString() 是设置物件属性用的,用这个函数设置的属性的值必须是字符串。前两个参数同上,第三个 OBJPROP_TEXT 表示设置物件的描述(物件中包含的文本),最后一个 "hello, world" 就是物件描述的值,是一个字符串,所以要加双引号。

ObjectSetInteger()ObjectSetString() 一样是用来设置物件属性用的,不同的是用这个函数设置的属性的值必须是日期时间、整型、颜色、布尔或者字符类型的,字符类型和字符串是不一样的,字符类型可以用一个数字表示一个字母。OBJPROP_CORNER 表示这个物件,在图表上定位时,以图表哪里为原点。它的值只能是下面四个之一:

CORNER_RIGHT_LOWER  // 右下角
CORNER_RIGHT_UPPER  // 右上角
CORNER_LEFT_LOWER  // 左下角
CORNER_LEFT_UPPER  // 左上角

OBJPROP_XDISTANCEOBJPROP_YDISTANCE 分别表示 x 坐标和 y 坐标,单位是像素。

复习一下:

  1. 创建一个名字为 bary_text 的 Label。
  2. bary_text 的 Label 的文字是 hello, world
  3. bary_text 的 Label 定位于图表上的时候,以图表“右下角”为坐标原点。
  4. bary_text 的 Label 的 x 坐标是 100
  5. bary_text 的 Label 的 y 坐标是 50
  6. 整个初始化函数结束,返回值为 0

保存文件,顶部菜单栏:“文件” -> "保存"。自定义指标的编译可以参考《怎么编译 MT4 指标和 EA 源码》。

  • 726
回复内容较长可以拖右下角↑
回到
顶部