火线MT4编程教程_第1页
火线MT4编程教程_第2页
火线MT4编程教程_第3页
火线MT4编程教程_第4页
火线MT4编程教程_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、火线 MT4 编程教程MT4 编程开发实战系列 -画图系列 1:如何画直线这是 MT4 编程开发实战系列的第一站,我们先来学习一下如何在MT4 图表上进行基本的画图操作。在开始动手之前,首先讲一个很基本也很重要的概念:在MT4 系统中,图表的方向是从右到左的,举例说:在一个记录有当前图表每根K 线位置的数组中,第一个数值表示的是图表最右边、也就是当前的K 线的数值!画图最基本的操作是画直线。下面的两个例子将演示如何在图表上画一条直线。首先在 MetaEditor 编辑器中创建一个客户指标文件, 名字可以任意, 我这里就把它命名为 Lesson1_DrawLine。然后在其中的 start()函

2、数中添加下面的代码:添加完毕后,按 F5 编译代码,然后在 MT4 中打开任意一张图表,把编译好的指标 Lesson1_DrawLine添加到图表上,我们可以看到图表上已经画出了一条横线:现在来解释一下上面的代码。上面的代码使用了ObjectCreate 这个函数。 ObjectCreate 是一个非常重要的函数,在后面的画图教程中会多次使用到这个函数。 在上面的例子中, ObjectCreate 函数有 5 个参数,第 1 个” Hline”是对你要画的横线起一个名字,这个名字是可以任意的;第 2 个 OBJ_HLINE是 MT4 系统默认的一个变量,表示横线,意义是告诉系统你准备画一条横线

3、;第3 个参数是 0,表示在主窗口进行画图的操作,这里暂时不对这个参数作详细的说明, 后面我会专门用一个专题来将画图窗口的知识;第 4 个参数也是 0,这个代表的是横坐标 (X 轴),第 5 个参数是 Bid,这个是 MT4 系统默认的一个变量,意思是当前的卖出价。这里重点说一下最后两个参数:在 MT4 中,图表的横坐标( X 轴)代表时间,纵坐标( Y 轴)代表价格,在上面的例子中, ObjectCreate 函数的最后两个参数 0 和 Bid 就分别代表 X 轴坐标和 Y 轴坐标,意思是在 Y 轴为当前卖出价格的地方画一条横线(因为直线为无限长, X 坐标没有意义,所以这里就设成 0 了)

4、。明白了这点,再画条竖线就很简单了。只要把 X 轴坐标设为你想要的数值即可,例如:我想在当前的 K 线位置上画条竖线,代码如下:Time 数组是 MT4 系统默认的一个数组, 数组中每个数值对应当前图表上每根 K 线所处的时间。同样,因为直线是无限的, Y 轴坐标此时也失去了意义,我们就把它设为 0 好了。在本节的最后,我补充说明一下指标文件的各个组成部分:当你创建了一个指标文件后,会发现系统已经自动生成了init() 、deinit() 和 start()这 3 个函数。Init 函数是在初始化的时候调用的,也就是添加到图表的同时会执行一次,之后就不会再执行了; deinit 函数是在关闭图

5、表或删除指标的同时执行一次,主要作用是把该指标制作出来的东西删除掉; start 函数是主函数,每次价格变动的时候,都会执行一次这个函数。画图系列 2这是 MT4 编程开发实战系列的第2 站,在上一节中,我们学习了如何利用ObjectCreate 函数在图表上画直线。在这一节中,我们将继续用 ObjectCreate 函数在图表上画出更多的图形。有时候我们想对某些时间段的图形用椭圆形标识出来,下面我们一起来实现这样的一个指标。利用 ObjectCreate 函数可以方便的在图表上画出一个椭圆形,MQL 语言中表示椭圆的常量是OBJ_ELLIPSE。画一个椭圆需要两个坐标点,所以,画一个椭圆的基

6、本语句如下:ObjectCreate(“ ellipse”, OBJ_ELLIPSE, 0, x1, y1, x2, y2)新建一个指标文件,命名为” Lesson2_DrawShape_”1,然后在 start 函数中加入如下语句:保存文件,按 F5 编译指标文件,然后把在 MT4 中新建一个图表,把Lesson2_DrawShape_1指标添加到图表上,可以看到我们已经在图表上画出了一个椭圆形:解释一下 ObjectCreate 函数中的各个参数,第1 个是图形的名字,可以任意写(忘记了就回头看看第一节) ;第 2 个是 MT4 系统默认的一个常量,意思是告诉 MT4 我们要画一个椭圆;第

7、 3 个 0 是表示我们要在 主窗口上进行画图 ;第 4 个是坐标点 1 的 x 坐标,简单起见,我这里写了 Time0 ,代表起点是当前时间 (还记得 MT4 图表的方向是从右到左的吗) ;第 5 个参数是坐标点 1 的 y 坐标,为简单起见,这里我写了 Bid,表示当前的卖出价;第 6 个是坐标点 2 的 x 坐标, Time10 表示在当前图表上从当前时间往左第 10 根 K 线的位置;第 7 个是坐标点 2 的 y 坐标, Ask 表示当前的买入价。椭圆已经画出来了,颜色似乎不够醒目,那我们应该如何修改已画出来的图形的颜色呢用 ObjectSet 函数。例如我现在想把椭圆的颜色改为红色

8、,可以在 ObjectCreate 函数下面添加这样一句:编译后把指标重新添加到图表上,可以看到椭圆已经变为红色了:ObjectSet 的第一个参数是图形的名字,意思是告诉MT4 我将要对” ellipse”这个图形进行修改;OBJPROP_COLOR这个参数是 MT4 默认的系统常量 ,表示 Object 的颜色属性,在后面我们将会看到, Object 还会有很多各种各样的属性,这些属性命名的规则都是 OBJ_XXX这样的,只要把这个常量更改为我们想要修改的属性就行了;第 3 个参数 Red 是 MT4 默认的系统常量,表示红色,在 MQL 语言中,各种颜色都可以直接用它们的英文名称来表示,

9、非常方便。椭圆的颜色已经修改好了, 但是大小似乎还不满意, 我们再把它改大一点,在前面代码的基础上再添加一句:编译运行后重新添加到图表上,我们发现椭圆变大了:OBJ_SCALE表示对图形进行缩放, 1 是缩放的数值,越小椭圆就越大, 具体效果可以自己修改看看。下面,我想用一个矩形来替代上面我们画出来的椭圆,该如何做呢很简单,只要用 OBJ_RECTANGLE代替 OBJ_ELLIPSE就行了。下面我们一起动手做。首先新创建一个指标文件,命名为 Lesson2_DrawShape_,2在 start 函数加入如下语句:编译后运行,然后在 MT4 中新建一张图表,把 Lesson2_DrawSha

10、pe_2指标添加到图表上,可以看到我们已经在图表上画了一个矩形:解释一下上面的代码:我们用 OBJ_RECTANGLE代替了前面的 OBJ_ELLIPSE,意思是告诉 MT4 我们将要在图表上画一个矩形; Time0 和 Time10 分别是坐标点 1 的 x 轴坐标和坐标点 2 的 x 轴坐标,这个我们在前面都讲过了,关键是 iHigh 和iLow 这两个函数, iHigh 和 iLow 都是 MT4 自带的系统函数, iHigh 的意思是获取指定周期的最高价格, iHigh 函数里面有 3 个参数: Symbol()函数表明用当前图表上的货币、 1440 表示天图、 0 表示取当天的最高价

11、。 这里做个补充,在 MT4编程中, 表示时间周期有两种方法:一是直接用数字表示, MT4 中的时间单位是分钟,所以你要指定哪个时间周期,就直接填多少分钟行了,在上面的例子中,因为 1 天是 1440 分钟,所以直接填 1440 就行了,如果要取 1 小时图的最高值就填 60, 30 分钟图就填 30,如此类推; 二是用 MT4 默认的系统变量,像上面的语句,我们也可以这样写:编译出来的指标是一样的,PERIOD_D1是 MT4 默认的系统变量,表示周期为天,如果 1 小时图就是 PERIOD_H1, 30 分钟图就是 PERIOD_M30,如此类推。同理,iLow 就是取指定周期的最低价;最

12、后一个参数是 0,这里表示取最天图最右边的K 线的最高价和最低价,即当天的最高价和最低价, 如果改为 1,上面的例子就是取昨天的最高价和最低价了(还记得 MT4 图表的方向是由右往左吧) 。同样,我们可以用ObjectSet 函数把上面画出来的矩形变为红色:现在,我们把指标 Lesson2_DrawShape_2从图表上删除掉, 发现已经画出来的矩形并没有从图表上删除,为什么呢在 MT4 中,已经画出来的图形默认是不会随指标一起被删除的, 这时我们就要用到 deinit 和 ObjectDelete 函数了。前面说过, deinit 函数是在指标被删除的时候调用的,主要用来做一些清理性的工作,

13、ObjectDelete 函数是删除一个指定的图形对象,因此,我们可以在 deinit 函数中加入如下代码:ObjectDelete 函数中的参数表示告诉MT4 我们要删除哪个图形。画图系列 3:如何创建符号及文字这是 MT4 编程开发实战系列的第 3 站。在前面两节中,我们已经学会了如何利用 ObjectCreate 函数来画直线、椭圆和矩形。但这些都是很基本的图形,我们经常能看到一些 MT4 指标在图表上画出了各种各样的符号,非常有趣!那么这些符号是如何画出来的呢答案还是 ObjectCreate 函数!由此看见 ObjectCreate 函数在 MT4 画图编程中是多么的重要了吧,就如造

14、物主一般创造出各种美妙的图形!下面,我们一起来学习一下,如何用 ObjectCreate 函数创造出更多的图形。首先创建一个指标文件,命名为 Lesson3_DrawSymbol_1,然后在 start 函数中输入如下代码:编译后添加到图表,会发现我们已在图表上画了一个向上的箭头:从前面两节的学习中,我们知道”arrow”是图形的名字,OBJ_ARROW是告诉MT4 我们要画一个箭头, Time0 是 x 轴坐标, Low0 是表示当前 K 线的最低价。这里对 Low 和 iLow()做一个解释。 Low 是一个数组, 里面储存了当前周期图表上每根 K 线的最低价,注意了:仅储存了当前周期的!

15、如果想获取其它周期的图表上的某根 K 线的最低价,就要用到 iLow()函数了。同理, High 和 iHigh() 也是这样区分的,这样解释,应该很清楚了吧如果我想让箭头指向下方,该怎么做呢现在,就开始了本节最精彩的部分了!在刚才的代码后面添加如下一句:编译后,会发现图表上的箭头已经指向下方了。 补充一下, 学到这里我们可以发现一个规律:创建一个图形,用 ObjectCreate,修改一个图形,用 ObjectSet。就这么简单!在上面的例子中,最关键的是 ObjectSet 的第三个参数: 242。我们把 242 改成 67,然后再编译,看看图表现在的图形是什么是一个大拇指向上的手势。改成

16、 68,再编译看看,是一个大拇指向下的手势。看到这里,相信大家都知道怎么回事了吧,没错!只要更改这个参数,就能画出各种我们想要的符号了。我曾在火线发过一个中文的 MT4 编程文档,大家可以下载来查看一下,里面有个图形符号代码表, 只要将第 3 个参数改成代码表里面的数值, 就可以画出相应的符号了。下面我们来做个有趣的尝试:把 MT4 里面的各种符号都拉出来检阅一遍!首先新建一个指标文件,命名为 Lesson3_DrawSymbol_2,然后在 start 函数中输入如下的代码:编译后把 Lesson3_DrawSymbol_2指标添加到图表上,看到了什么没错,所有 MT4 支持的图形符号都跑出

17、来了!在上面的代码中,我用了一个循环,从当前 K 线往左数 257 根 K 线,在每根 K 线的最低价位置画一个符号。 为什么是 257 呢你可以把这个数字改大一点, 会发现之后所有的图形符号都是一样的了,这说明 MT4 支持的图形符号就是到 257为止了。学完了前面的例子后, 我相信很多朋友都能在图表上随意画出自己想要的各种图形和符号了,那么假如想在图表上加入一些文字呢这个问题是初学MT4 编程的朋友经常提出的一个问题,答案还是用 ObjectCreate 和 ObjectSet 这对配合得天衣无缝的函数来实现!在 MT4 图表上添加文字,有两种方法, 一种是用 Comment 函数,缺点是

18、只能在图表的左上角添加,且不能对文字的各种特性调整,如大小、颜色等 ;另外一种就是我们下面将要学到的方法, 用 ObjectCreate 函数来创建。 ObjectCreate函数可以创建两种类型的文字,一种是 OBJ_TEXT,一种是 OBJ_LABEL。这两种类型的区别: OBJ_TEXT是以时间和价格作为坐标的,且可以设置显示角度;OBJ_LABEL是以当前图表可视区域的相对位置作为坐标的,且不能调整显示角度。下面我们用例子来加深理解。新建一个指标文件, 命名为 Lesson3_DrawText_,1在 start 函数输入如下代码:编译后添加 Lesson3_DrawText_1指标到

19、图表:如果我想让” Hello World! ”以与水平线成 30 度的角度显示,该如何做呢在上面的代码后面添加一句:重新编译后效果如下:利用 ObjectSet 函数来调整显示文字的角度属性: OBJPROP_ANGLE,30 表示 30 度。既然已经有 OBJ_TEXT了,为什么 MT4 中还要再多一个 OBJ_LABEL呢关键就是两者的坐标性质不同。 OBJ_TEXT的坐标是时间和价格,而 OBJ_LABEL的坐标是以当前可视区域的相对位置作为坐标。当你移动图表的时候,会发现用OBJ_TEXT创建的文字的位置会随着图表的移动而变化,但用 OBJ_LABEL创建的文字则始终不变, 除非你更

20、改了屏幕分辨率它才会变化, 当你想创建一些始终显示在某个固定位置的文字时,用 OBJ_LABEL;如果想在某个固定的价格或时间位置显示文字,用 OBJ_TEXT。由于精力所限,我就不再演示 OBJ_LABEL的使用方法了,大家可以参照帮助文档来使用,记住坐标的性质不同就行了。画图系列 4:如何画曲线这是 MT4 编程开发实战系列的第 4 站。在前面 3 节我们分别学习了直线、椭圆和矩形、文字及符号的创建方法, 这次我们要学习一下如何在图表上创建曲线。虽然 MT4 中已经自带了很多曲线类型的指标,如各种不同的均线、布林带等等,但经常有些朋友还需要创建一些自己独有的曲线, 系统自带的指标已经无法满

21、足需求,这时我们就需要通过 MT4 编程来开发自己的曲线指标了。下面我们一起通过实例来学习如何画曲线。假设我现在想把图表上每根K 线的中间部分(即最高价与最低价之和的均值)用一条曲线连接起来。首先创建一个新的指标文件,命名为 Lesson4_DrawCurve_1。在指标文件的开始部分,添加如下语句:红色框内部分为我们添加的语句。然后在init 函数内添加如下语句:在 start 函数内添加如下语句:编译后,将 Lesson4_DrawCurve_1指标添加到图表上,会看到我们已创建了一条红色的曲线,将图表上每根 K 线的中间部分连接了起来:下面来解释一下上面代码的意思。 首先我们在指标文件的

22、开始部分插入了句,前面两条分别是:3 条语#property indicator_buffer 1 的意思是本指标将使用一个指标缓存(最多只能有 8 个指标,编码是从 0 至 7);#property indicator_color Red 的意思是创建的指标将用红色显示。 #property 的意思是给指标文件添加一个编译参数 (注:由于这些东西涉及到程序开发中比较专业的部分了,本教程的主旨是“实用为主” ,所以我将不会对一些太过专业的部分进行深入探讨,只需知道应该这样做就行了。有兴趣的朋友可以私下聊)。假如你想创建两条曲线,则可以写成: #property indicator_buffer

23、 2 ;假如想改变曲线的颜色,则可以把 Red数值改为其它颜色,如 Yellow、Green 等。在 添加 了两个编译参 数后 ,我们还创建 了一个 double 类 型的 数组ExtMapBuffer,这个数组的作用是储存每根 K 线中间部分的数值,画图的时候就根据这个数组里面的数值来画。在 init()函数中,我们用到了 SetIndexStyle 和 SetIndexBuffer 这两个 MT4 中的系统函数。 SetIndexStyle 的意思是设置我们要画的图形的类型,SetIndexStyle中的第一个参数0,表示我们要对第一个指标的样式进行设置,在MT4中,最多只能设置8 个指标

24、,编码是从0 开始至7 结束;第二个参数DRAW_LINE是MT4 默认的系统变量,意思是告诉MT4我们将要在图表上画线。如果我们现在想在每根K 线的中间部分画个箭头,该如何做呢用DRAW_ARROW替换DRAW_LINE就行了,替换后的效果如下:刚才我们画出来的曲线是一条连续的曲线,如果我想画一条虚线该如何做呢给SetIndexStyle增加一个参数就行了, 现在我们把 SetIndexStyle函数改写为如下这样:编译后重新添加到图表上,会发现现在的曲线已经是一条虚线了。同理,如果用 STYLE_DOT替换 STYLE_DASH,就可以画出一条由点组成的曲线了,更多的类型大家可以通过查找编程文档获得。现在,假如我们觉得曲线太细了,想加粗该怎么做呢这时就需要给SetIndexStyle函数增加第 4 个参数了:SetIndexStyle的第4 个参数4,意思是把曲线的宽度设置为4(从1 开始,最大为 5)。最后,假如想把刚才画的线更改一下颜色, 可以用到 SetIndexStyle的第 5 个参数,像下面这句:最后一个参数 Blue 的意思是把曲线的颜色改为蓝色。如何创建警报在前面几节,我们学习了 MT4 编程开发中画图方面的一些基础知识,这次我们来学习一下如何在 MT4 编程中应用报警功能。大家都知道,外汇市场是 24 小时不间断的,而人的精力是有限的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论