提示
这是 2011 年写的一个系列教程。
为了方便和章节号对应,再新建一个 mql5 文件:
- Ctrl + N 新建一个 mql5 文件。
- 自定义指标
- 名称:Indicators\bary-5
- 作者:bary
- 链接:http://www.bary.com/
- OnCalculate(..., open, high, low, close
- 不止一个时间序列用于计算
- 完成
找到大概第 16 行,也就是 OnInit() 的函数体部分。代码如下:
为了省地儿,我把注释删掉了,按照国际惯例,第一个测试程序是 hello, world。OnInit() 是初始化函数,也就是里面写的东西只在指标加载的时候运行一次,里用到了三个函数:ObjectCreate()、ObjectSetString()、ObjectSetInteger()。
ObjectCreate() 是物件创建函数,解释一下参数:第一个 0,表示这个物件创建在当前图表上,第二个 "bary_text" 是在给创建的物件命名,名字是一个字符串,注意要加双引号,第三个 OBJ_LABEL 表示创建一个 Label 物件,是一个标签。后三个 0 分别代表主窗口、时间坐标、价格坐标,因为后面我们要重新写坐标,所以暂时不用管。
ObjectSetString() 是设置物件属性用的,用这个函数设置的属性的值必须是字符串。前两个参数同上,第三个 OBJPROP_TEXT 表示设置物件的描述(物件中包含的文本),最后一个 "hello, world" 就是物件描述的值,是一个字符串,所以要加双引号。
ObjectSetInteger() 与 ObjectSetString() 一样是用来设置物件属性用的,不同的是用这个函数设置的属性的值必须是日期时间、整型、颜色、布尔或者字符类型的,字符类型和字符串是不一样的,字符类型可以用一个数字表示一个字母。OBJPROP_CORNER 表示这个物件,在图表上定位时,以图表哪里为原点。它的值只能是下面四个之一:
OBJPROP_XDISTANCE 和 OBJPROP_YDISTANCE 分别表示 x 坐标和 y 坐标,单位是像素。
复习一下:
- 创建一个名字为 bary_text 的 Label。
- 叫 bary_text 的 Label 的文字是 hello, world。
- 叫 bary_text 的 Label 定位于图表上的时候,以图表“右下角”为坐标原点。
- 叫 bary_text 的 Label 的 x 坐标是 100。
- 叫 bary_text 的 Label 的 y 坐标是 50。
- 整个初始化函数结束,返回值为 0。
保存文件,顶部菜单栏:“文件” -> "保存"。自定义指标的编译可以参考《怎么编译 MT4 指标和 EA 源码》。