这是MT4编程开发实战系列的第3站。在前面两节中,我们已经学会了如何利用ObjectCreate函数来画直线、椭圆和矩形。但这些都是很基本的图形,我们经常能看到一些MT4指标在图表上画出了各种各样的符号,非常有趣!那么这些符号是如何画出来的呢?答案还是ObjectCreate函数!由此看见ObjectCreate函数在MT4画图编程中是多么的重要了吧,就如造物主一般创造出各种美妙的图形!下面,我们一起来学习一下,如何用ObjectCreate函数创造出更多的图形。
首先创建一个指标文件,命名为Lesson3_DrawSymbol_1,然后在start函数中输入如下代码:

编译后添加到图表,会发现我们已在图表上画了一个向上的箭头:

从前面两节的学习中,我们知道”arrow”是图形的名字,OBJ_ARROW是告诉MT4我们要画一个箭头,Time[0]是x轴坐标,Low[0]是表示当前K线的最低价。这里对Low[]和iLow()做一个解释。Low[]是一个数组,里面储存了当前周期图表上每根K线的最低价,注意了:仅储存了当前周期的!如果想获取其它周期的图表上的某根K线的最低价,就要用到iLow函数了。同理,High[]和iHigh()也是这样区分的,这样解释,应该很清楚了吧?
如果我想让箭头指向下方,该怎么做呢?现在,就开始了本节最精彩的部分了!
在刚才的代码后面添加如下一句:

 
编译后,会发现图表上的箭头已经指向下方了。
补充一下,学到这里我们可以发现一个规律:创建一个图形,用ObjectCreate,修改一个图形,用ObjectSet。就这么简单!
在上面的例子中,最关键的是ObjectSet的第三个参数:242。我们把242改成67,然后再编译,看看图表现在的图形是什么?是一个大拇指向上的手势。改成68,再编译看看,是一个大拇指向下的手势。看到这里,相信大家都知道怎么回事了吧,没错!只要更改这个参数,就能画出各种我们想要的符号了。我曾在火线发过一个中文的MT4编程文档,大家可以下载来查看一下,里面有个图形符号代码表,只要将第3个参数改成代码表里面的数值,就可以画出相应的符号了。下面我们来做个有趣的尝试:把MT4里面的各种符号都拉出来检阅一遍!
首先新建一个指标文件,命名为Lesson3_DrawSymbol_2,然后在start函数中输入如下的代码:

编译后把Lesson3_DrawSymbol_2指标添加到图表上,看到了什么?没错,所有MT4支持的图形符号都跑出来了!

在上面的代码中,我用了一个循环,从当前K线往左数257根K线,在每根K线的最低价位置画一个符号。为什么是257呢?你可以把这个数字改大一点,会发现之后所有的图形符号都是一样的了,这说明MT4支持的图形符号就是到257为止了。
学完了前面的例子后,我相信很多朋友都能在图表上随意画出自己想要的各种图形和符号了,那么假如想在图表上加入一些文字呢?这个问题是初学MT4编程的朋友经常提出的一个问题,答案还是用ObjectCreate和ObjectSet这对配合得天衣无缝的函数来实现!
在MT4图表上添加文字,有两种方法,一种是用Comment函数,缺点是只能在图表的左上角添加,且不能对文字的各种特性调整,如大小、颜色等;另外一种就是我们下面将要学到的方法,用ObjectCreate函数来创建。ObjectCreate函数可以创建两种类型的文字,一种是OBJ_TEXT,一种是OBJ_LABEL。这两种类型的区别:OBJ_TEXT是以时间和价格作为坐标的,且可以设置显示角度;OBJ_LABEL是以当前图表可视区域的相对位置作为坐标的,且不能调整显示角度。下面我们用例子来加深理解。
新建一个指标文件,命名为Lesson3_DrawText_1,在start函数输入如下代码:

编译后添加Lesson3_DrawText_1指标到图表:

如果我想让”Hello World!”以与水平线成30度的角度显示,该如何做呢?在上面的代码后面添加一句:


重新编译后效果如下:

利用ObjectSet函数来调整显示文字的角度属性:OBJPROP_ANGLE,30表示30度。
既然已经有OBJ_TEXT了,为什么MT4中还要再多一个OBJ_LABEL呢?关键就是两者的坐标性质不同。OBJ_TEXT的坐标是时间和价格,而OBJ_LABEL的坐标是以当前可视区域的相对位置作为坐标。当你移动图表的时候,会发现用OBJ_TEXT创建的文字的位置会随着图表的移动而变化,但用OBJ_LABEL创建的文字则始终不变,除非你更改了屏幕分辨率它才会变化,当你想创建一些始终显示在某个固定位置的文字时,用OBJ_LABEL;如果想在某个固定的价格或时间位置显示文字,用OBJ_TEXT。
由于精力所限,我就不再演示OBJ_LABEL的使用方法了,大家可以参照帮助文档来使用,记住坐标的性质不同就行了。

这是MT4编程开发实战系列的第2站,在上一节中,我们学习了如何利用ObjectCreate函数在图表上画直线。在这一节中,我们将继续用ObjectCreate函数在图表上画出更多的图形。
有时候我们想对某些时间段的图形用椭圆形标识出来,下面我们一起来实现这样的一个指标。
利用ObjectCreate函数可以方便的在图表上画出一个椭圆形,MQL语言中表示椭圆的常量是OBJ_ELLIPSE。画一个椭圆需要两个坐标点,所以,画一个椭圆的基本语句如下:
ObjectCreate(“ellipse”, OBJ_ELLIPSE, 0, x1, y1, x2, y2)
新建一个指标文件,命名为”Lesson2_DrawShape_1”,然后在start函数中加入如下语句:

保存文件,按F5编译指标文件,然后把在MT4中新建一个图表,把Lesson2_DrawShape_1指标添加到图表上,可以看到我们已经在图表上画出了一个椭圆形。

      解释一下ObjectCreate函数中的各个参数,第1个是图形的名字,可以任意写(忘记了就回头看看第一节);第2个是MT4系统默认的一个常量,意思是告诉MT4我们要画一个椭圆;第3个0是表示我们要在主窗口上进行画图;第4个是坐标点1的x坐标,简单起见,我这里写了Time[0],代表起点是当前时间(还记得MT4图表的方向是从右到左的吗?);第5个参数是坐标点1的y坐标,为简单起见,这里我写了Bid,表示当前的卖出价;第6个是坐标点2的x坐标,Time[10]表示在当前图表上从当前时间往左第10根K线的位置;第7个是坐标点2的y坐标,Ask表示当前的买入价。
椭圆已经画出来了,颜色似乎不够醒目,那我们应该如何修改已画出来的图形的颜色呢?用ObjectSet函数。例如我现在想把椭圆的颜色改为红色,可以在ObjectCreate函数下面添加这样一句: 

 编译后把指标重新添加到图表上,可以看到椭圆已经变为红色了:

ObjectSet的第一个参数是图形的名字,意思是告诉MT4我将要对”ellipse”这个图形进行修改;OBJPROP_COLOR这个参数是MT4默认的系统常量,表示Object的颜色属性,在后面我们将会看到,Object还会有很多各种各样的属性,这些属性命名的规则都是OBJ_XXX这样的,只要把这个常量更改为我们想要修改的属性就行了;第3个参数Red是MT4默认的系统常量,表示红色,在MQL语言中,各种颜色都可以直接用它们的英文名称来表示,非常方便。
椭圆的颜色已经修改好了,但是大小似乎还不满意,我们再把它改大一点,在前面代码的基础上再添加一句:

编译运行后重新添加到图表上,我们发现椭圆变大了:

OBJ_SCALE表示对图形进行缩放,1是缩放的数值,越小椭圆就越大,具体效果可以自己修改看看。
下面,我想用一个矩形来替代上面我们画出来的椭圆,该如何做呢?很简单,只要用OBJ_RECTANGLE代替OBJ_ELLIPSE就行了。下面我们一起动手做。首先新创建一个指标文件,命名为Lesson2_DrawShape_2,在start函数加入如下语句:

编译后运行,然后在MT4中新建一张图表,把Lesson2_DrawShape_2指标添加到图表上,可以看到我们已经在图表上画了一个矩形:

 解释一下上面的代码:我们用OBJ_RECTANGLE代替了前面的OBJ_ELLIPSE,意思是告诉MT4我们将要在图表上画一个矩形;Time[0]和Time[10]分别是坐标点1的x轴坐标和坐标点2的x轴坐标,这个我们在前面都讲过了,关键是iHigh和iLow这两个函数,iHigh和iLow都是MT4自带的系统函数,iHigh的意思是获取指定周期的最高价格,iHigh函数里面有3个参数:Symbol()函数表明用当前图表上的货币、1440表示天图、0表示取当天的最高价。这里做个补充,在MT4编程中,表示时间周期有两种方法:一是直接用数字表示,MT4中的时间单位是分钟,所以你要指定哪个时间周期,就直接填多少分钟行了,在上面的例子中,因为1天是1440分钟,所以直接填1440就行了,如果要取1小时图的最高值就填60,30分钟图就填30,如此类推;二是用MT4默认的系统变量,像上面的语句,我们也可以这样写:

 编译出来的指标是一样的,PERIOD_D1是MT4默认的系统变量,表示周期为天,如果1小时图就是PERIOD_H1,30分钟图就是PERIOD_M30,如此类推。同理,iLow就是取指定周期的最低价;最后一个参数是0,这里表示取最天图最右边的K线的最高价和最低价,即当天的最高价和最低价,如果改为1,上面的例子就是取昨天的最高价和最低价了(还记得MT4图表的方向是由右往左吧?)。
同样,我们可以用ObjectSet函数把上面画出来的矩形变为红色:

现在,我们把指标Lesson2_DrawShape_2从图表上删除掉,发现已经画出来的矩形并没有从图表上删除,为什么呢?在MT4中,已经画出来的图形默认是不会随指标一起被删除的,这时我们就要用到deinit和ObjectDelete函数了。前面说过,deinit函数是在指标被删除的时候调用的,主要用来做一些清理性的工作,ObjectDelete函数是删除一个指定的图形对象,因此,我们可以在deinit函数中加入如下代码:

 

 ObjectDelete函数中的参数表示告诉MT4我们要删除哪个图形。

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

添加完毕后,按F5编译代码,然后在MT4中打开任意一张图表,把编译好的指标Lesson1_DrawLine添加到图表上,我们可以看到图表上已经画出了一条横线:


现在来解释一下上面的代码。
      上面的代码使用了ObjectCreate这个函数。ObjectCreate是一个非常重要的函数,在后面的画图教程中会多次使用到这个函数。在上面的例子中,ObjectCreate函数有5个参数,第1个”Hline”是对你要画的横线起一个名字,这个名字是可以任意的;第2个OBJ_HLINE是MT4系统默认的一个变量,表示横线,意义是告诉系统你准备画一条横线;第3个参数是0,表示在主窗口进行画图的操作,这里暂时不对这个参数作详细的说明,后面我会专门用一个专题来将画图窗口的知识;第4个参数也是0,这个代表的是横坐标(X轴),第5个参数是Bid,这个是MT4系统默认的一个变量,意思是当前的卖出价。
      这里重点说一下最后两个参数:在MT4中,图表的横坐标(X轴)代表时间,纵坐标(Y轴)代表价格,在上面的例子中,ObjectCreate函数的最后两个参数0和Bid就分别代表X轴坐标和Y轴坐标,意思是在Y轴为当前卖出价格的地方画一条横线(因为直线为无限长,X坐标没有意义,所以这里就设成0了)。明白了这点,再画条竖线就很简单了。只要把X轴坐标设为你想要的数值即可,例如:我想在当前的K线位置上画条竖线,代码如下:

Time[]数组是MT4系统默认的一个数组,数组中每个数值对应当前图表上每根K线所处的时间。同样,因为直线是无限的,Y轴坐标此时也失去了意义,我们就把它设为0好了。
      在本节的最后,我补充说明一下指标文件的各个组成部分:当你创建了一个指标文件后,会发现系统已经自动生成了init()、deinit()和start()这3个函数。Init函数是在初始化的时候调用的,也就是添加到图表的同时会执行一次,之后就不会再执行了;deinit函数是在关闭图表或删除指标的同时执行一次,主要作用是把该指标制作出来的东西删除掉;start函数是主函数,每次价格变动的时候,都会执行一次这个函数。

FXCM也开始使用MT4平台了

2008年5月12日 13:37  |  分类:MT4使用

偶然去到FXCM的网站,发现FXCM已经开始启用MT4交易平台了,很好的消息,这意味着我们熟悉的指标和EA都能在FXCM帐户上运行了。但很可惜,经咨询FXCM客服,Demo帐户暂时还不提供,看来要用FXCM的MT4平台的话,只能先到FXCM开个帐户了。

重启我的博客

2008年5月12日 13:18  |  分类:MT4编程

经过反复的比较,终于在现在的空间商暂时落脚了,希望这次的空间不会让人太失望。现在我的精力都放在FXCreator的开发工作之中,暂时是没有精力去经营论坛,所以索性把论坛关闭了,仅保留现在这个博客足矣。希望能和大家一起继续研究MT4编程的知识。

Pages: Prev 1 2 3 ...5 6 7 8 9 10 11 12 13