外汇邦外汇论坛 - 中国最大的外汇投资论坛,全球华人外汇交易者交流平台!

 找回密码
 立即注册
查看: 4729|回复: 0
打印 上一主题 下一主题

MT4编程开发实战系列:画图系列

[复制链接]

397

主题

458

帖子

5637

积分

论坛元老

Rank: 8Rank: 8

积分
5637
跳转到指定楼层
楼主
发表于 2015-9-26 21:36:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 FxTrading 于 2015-9-30 09:11 编辑

第一节  如何画水平线与垂直线


这是MT4编程开发实战系列的第一站,我们先来学习一下如何在MT4图表上进行基本的画图操作。

在开始动手之前,首先讲一个很基本也很重要的概念:在MT4系统中,图表的方向是从右到左的,举例说:在一个记录有当前图表每根K线位置的数组中,第一个数值表示的是图表最右边、也就是当前的K线的数值!

画图最基本的操作是画直线。下面的两个例子将演示如何在图表上画一条直线。


1、画水平线:

首先,在MetaEditor编辑器中创建一个客户指标文件,名字可以任意,我这里就把它命名为Lesson1_DrawLine。

然后,在其中的start()函数中添加下面的代码:

  1. ObjectCreate("HLine",OBJ_HLINE,0,0,Bid);       //在图表上画一条直线
复制代码

添加完毕后,按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线位置上画条竖线,代码如下:

  1. ObjectCreate("VLine",OBJ_VLINE,0,Time[0],0);           //在图表上画一条竖线
复制代码

Time[]数组是MT4系统默认的一个数组,数组中每个数值对应当前图表上每根K线所处的时间。同样,因为直线是无限的,Y轴坐标此时也失去了意义,我们就把它设为0好了。

在本节的最后,我补充说明一下指标文件的各个组成部分:

当你创建了一个指标文件后,会发现系统已经自动生成了init()、deinit()和start()这3个函数。

Init函数是在初始化的时候调用的,也就是添加到图表的同时会执行一次,之后就不会再执行了;

deinit函数是在关闭图表或删除指标的同时执行一次,主要作用是把该指标制作出来的东西删除掉;

start函数是主函数,每次价格变动的时候,都会执行一次这个函数。



第二节  如何画椭圆形与矩形


这是MT4编程开发实战系列的第2站,

在上一节中,我们学习了如何利用ObjectCreate函数在图表上画直线。在这一节中,我们将继续用ObjectCreate函数在图表上画出更多的图形。

有时候我们想对某些时间段的图形用椭圆形标识出来,下面我们一起来实现这样的一个指标。


一、画椭圆形:

利用ObjectCreate函数可以方便的在图表上画出一个椭圆形,MQL语言中表示椭圆的常量是OBJ_ELLIPSE。画一个椭圆需要两个坐标点,所以,画一个椭圆的基本语句如下:

  1. ObjectCreate(“ellipse”, OBJ_ELLIPSE, 0, x1, y1, x2, y2)
复制代码

新建一个指标文件,命名为”Lesson2_DrawShape_ 1”,然后在start函数中加入如下语句:

  1. ObjectCreate("ellipse",OBJ_ELLIPSE,0,Time[0],Bid,Time[10],Ask);          //在图表上画一个椭圆形
复制代码

保存文件,按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函数下面添加这样一句:

  1. ObjectSet("ellipse",OBJPROP_COLOR,Red);      //把椭圆的颜色改为红色
复制代码

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



ObjectSet的第一个参数是图形的名字,意思是告诉MT4我将要对”ellipse”这个图形进行修改;

OBJPROP_COLOR这个参数是MT4默认的系统常量,表示Object的颜色属性,在后面我们将会看到,Object还会有很多各种各样的属性,这些属性命名的规则都是OBJ_XXX这样的,只要把这个常量更改为我们想要修改的属性就行了;

第3个参数Red是MT4默认的系统常量,表示红色,在MQL语言中,各种颜色都可以直接用它们的英文名称来表示,非常方便。

椭圆的颜色已经修改好了,但是大小似乎还不满意,我们再把它改大一点,在前面代码的基础上再添加一句:

  1. ObjectSet("ellipse",OBJPROP_SCALE,1);      //对图形进行缩放
复制代码

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



OBJ_SCALE表示对图形进行缩放,1是缩放的数值,越小椭圆就越大,具体效果可以自己修改看看。


二、画矩形:

下面,我想用一个矩形来替代上面我们画出来的椭圆,该如何做呢?

很简单,只要用OBJ_RECTANGLE代替OBJ_ELLIPSE就行了。

下面我们一起动手做。

首先新创建一个指标文件,命名为Lesson2_DrawShape_2,

在start函数加入如下语句:

  1. ObjectCreate("rectangle",OBJ_RECTANGLE,0,Time[0],iLow(Symbol(),1440,0),Time[10],iHigh(Symbol(),1440,0));
复制代码

编译后运行,然后在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默认的系统变量,像上面的语句,我们也可以这样写:

  1. ObjectCreate("rectangle",OBJ_RECTANGLE,0,Time[0],iLow(Symbol(),PERIOD_D1,0),Time[10],iHigh(Symbol(),PERIOD_D1,0));
复制代码

编译出来的指标是一样的,PERIOD_D1是MT4默认的系统变量,表示周期为天,如果1小时图就是PERIOD_H1,30分钟图就是PERIOD_M30,如此类推。

同理,iLow就是取指定周期的最低价;最后一个参数是0,这里表示取最天图最右边的K线的最高价和最低价,即当天的最高价和最低价;如果改为1,上面的例子就是取昨天的最高价和最低价了(还记得MT4图表的方向是由右往左吧?)。

同样,我们可以用ObjectSet函数把上面画出来的矩形变为红色:

  1. ObjectSet("rectangle",OBJPROP_COLOR,Red);
复制代码

三、删除图形:

现在,我们把指标Lesson2_DrawShape_2从图表上删除掉,发现已经画出来的矩形并没有从图表上删除,为什么呢?

在MT4中,已经画出来的图形默认是不会随指标一起被删除的,这时我们就要用到deinit和ObjectDelete函数了。

前面说过,deinit函数是在指标被删除的时候调用的,主要用来做一些清理性的工作,ObjectDelete函数是删除一个指定的图形对象,因此,我们可以在deinit函数中加入如下代码:

  1. int deinit()
  2.   {
  3. //----
  4.   ObjectDelete("rectangle");
  5. //----
  6.   return(0);
  7.   }
复制代码

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




第三节  如何创建符号及文字


这是MT4编程开发实战系列的第3站。在前面两节中,我们已经学会了如何利用ObjectCreate函数来画直线、椭圆和矩形。但这些都是很基本的图形,我们经常能看到一些MT4指标在图表上画出了各种各样的符号,非常有趣!


一、画符号:

那么这些符号是如何画出来的呢?

答案还是ObjectCreate函数!由此看见ObjectCreate函数在MT4画图编程中是多么的重要了吧,就如造物主一般创造出各种美妙的图形!

下面,我们一起来学习一下,如何用ObjectCreate函数创造出更多的图形。

首先创建一个指标文件,命名为Lesson3_DrawSymbol_1,然后在start函数中输入如下代码:

  1. ObjectCreate("arrow",OBJ_ARROW,0,Time[0],Low[0]);
复制代码

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



从前面两节的学习中,我们知道”arrow”是图形的名字,OBJ_ARROW是告诉MT4我们要画一个箭头,Time[0]是x轴坐标,Low[0]是表示当前K线的最低价。

这里对Low[]和iLow()做一个解释。Low[]是一个数组,里面储存了当前周期图表上每根K线的最低价,

注意了:仅储存了当前周期的!如果想获取其它周期的图表上的某根K线的最低价,就要用到iLow函数了。同理,High[]和iHigh()也是这样区分的,这样解释,应该很清楚了吧?

如果我想让箭头指向下方,该怎么做呢?现在,就开始了本节最精彩的部分了!

在刚才的代码后面添加如下一句:

  1. ObjectSet("arrow",OBJPROP_ARROWCODE,242);
复制代码

编译后,会发现图表上的箭头已经指向下方了。

补充一下,学到这里我们可以发现一个规律:

创建一个图形,用ObjectCreate,修改一个图形,用ObjectSet。就这么简单!

在上面的例子中,最关键的是ObjectSet的第三个参数:242。我们把242改成67,然后再编译,看看图表现在的图形是什么?是一个大拇指向上的手势。改成68,再编译看看,是一个大拇指向下的手势。看到这里,相信大家都知道怎么回事了吧,没错!只要更改这个参数,就能画出各种我们想要的符号了。我曾在火线发过一个中文的MT4编程文档,大家可以下载来查看一下,里面有个图形符号代码表,只要将第3个参数改成代码表里面的数值,就可以画出相应的符号了。下面我们来做个有趣的尝试:把MT4里面的各种符号都拉出来检阅一遍!

首先新建一个指标文件,命名为Lesson3_DrawSymbol_2,然后在start函数中输入如下的代码:

  1. int start()
  2.   {
  3.   int counted_bars=IndicatorCounted();
  4.   int i;
  5. //----
  6.   for(i=0;i<257;i++)
  7.   {
  8.     ObjectCreate("arrow"+i,OBJ_ARROW,Time[i],Low[i]);
  9.     ObjectSet("arrow"+i,OBJPROP_ARROWCODE,i);
  10.   }
  11. //----
  12.   return(0);
  13.   }
复制代码

编译后把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函数输入如下代码:

  1.   ObjectCreate("text",OBJ_TEXT,0,Time[0],High[0]);
  2.   ObjectSetText("text","Hello World!",10,"Arial",Red);
复制代码

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



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

  1. ObjectSet("text",OBJPROP_ANGLE,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编程开发实战系列的第4站。在前面3节我们分别学习了直线、椭圆和矩形、文字及符号的创建方法,这次我们要学习一下如何在图表上创建曲线。

虽然MT4中已经自带了很多曲线类型的指标,如各种不同的均线、布林带等等,但经常有些朋友还需要创建一些自己独有的曲线,系统自带的指标已经无法满足需求,这时我们就需要通过MT4编程来开发自己的曲线指标了。

下面我们一起通过实例来学习如何画曲线。假设我现在想把图表上每根K线的中间部分(即最高价与最低价之和的均值)用一条曲线连接起来。

首先创建一个新的指标文件,命名为Lesson4_DrawCurve_1。在指标文件的开始部分,添加如下语句:

  1. #property indicator_chart_window
  2. #property indicator_buffers 1
  3. #property indicator_color1 Red
  4. Double ExtMapBuffer[ ];
复制代码

上面代码的最后面三行为我们添加的语句。然后在init函数内添加如下语句:

  1. int init()
  2. {
  3. //-----indicators
  4. SetIndexStyle(0,DRAW_LINE);
  5. SetIndexBuffer(0,ExtMapBuffer);
  6. //-----
  7. return(0);
  8. }
复制代码

在start函数内添加如下语句:

  1. int start()
  2. {
  3. int counted_bars=IndicatorCounted();
  4. int cnt;
  5. //----
  6. if(counted_bars>0) counted_bars--;
  7. int limit=Bars-counted_bars-1;
  8. for(cnt=0;cnt<limit;cnt++)
  9. {
  10. ExtMapBuffer[cnt]=(High[cnt]+Low[cnt])/2;
  11. }
  12. //-----
  13. return(0);
  14. }
复制代码

编译后,将Lesson4_DrawCurve_1指标添加到图表上,会看到我们已创建了一条红色的曲线,将图表上每根K线的中间部分连接了起来:



下面来解释一下上面代码的意思。首先我们在指标文件的开始部分插入了3条语句,前面两条分别是:

#property indicator_buffer 1的意思是本指标将使用一个指标缓存(最多只能有8个指标,编码是从0至7);

#property indicator_color Red的意思是创建的指标将用红色显示。#property的意思是给指标文件添加一个编译参数(注:由于这些东西涉及到程序开发中比较专业的部分了,本教程的主旨是“实用为主”,所以我将不会对一些太过专业的部分进行深入探讨,只需知道应该这样做就行了。

假如你想创建两条曲线,则可以写成:#property indicator_buffer 2;假如想改变曲线的颜色,则可以把Red数值改为其它颜色,如Yellow、Green等。

在添加了两个编译参数后,我们还创建了一个double类型的数组ExtMapBuffer[],这个数组的作用是储存每根K线中间部分的数值,画图的时候就根据这个数组里面的数值来画。

在init函数中,我们用到了SetIndexStyle和SetIndexBuffer这两个MT4中的系统函数。SetIndexStyle的意思是设置我们要画的图形的类型,SetIndexStyle中的第一个参数0,表示我们要对第一个指标的样式进行设置,在MT4中,最多只能设置8个指标,编码是从0开始至7结束;第二个参数DRAW_LINE是MT4默认的系统变量,意思是告诉MT4我们将要在图表上画线。如果我们现在想在每根K线的中间部分画个箭头,该如何做呢?用DRAW_ARROW替换DRAW_LINE就行了,替换后的效果如下:



刚才我们画出来的曲线是一条连续的曲线,如果我想画一条虚线该如何做呢?给SetIndexStyle增加一个参数就行了,现在我们把SetIndexStyle函数改写为如下这样:

  1. SetIndexStyle(0,DRAW_LINE,STYLE_DASH);
复制代码

编译后重新添加到图表上,会发现现在的曲线已经是一条虚线了。



同理,如果用STYLE_DOT替换STYLE_DASH,就可以画出一条由点组成的曲线了,更多的类型大家可以通过查找编程文档获得。

现在,假如我们觉得曲线太细了,想加粗该怎么做呢?这时就需要给SetIndexStyle函数增加第4个参数了:

  1. SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,4);
复制代码

SetIndexStyle的第4个参数4,意思是把曲线的宽度设置为4(从1开始,最大为5)。

最后,假如想把刚才画的线更改一下颜色,可以用到SetIndexStyle的第5个参数,像下面这句:

  1. SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,4,Blue);
复制代码

最后一个参数Blue的意思是把曲线的颜色改为蓝色。




第五节  如何创建警报


在前面几节,我们学习了MT4编程开发中画图方面的一些基础知识,这次我们来学习一下如何在MT4编程中应用报警功能。

大家都知道,外汇市场是24小时不间断的,而人的精力是有限的,那么,在休息的时候如果价位到达了自己的目标价位,这时候该怎么办呢?答案是利用MT4的警报功能。在MT4平台上如何设置警报这里就不详述了,具体可参考帮助文档,这里说一下如何通过编程来实现。

首先,我们来实现一个最简单的指标:当价格到达指定价位时,进行报警。

新创建一个指标文件,命名为:Lesson5_Alert_1。

在程序头部加入如下一句:

  1. #property indicator_chart_window
  2. Extern double Price;
复制代码

第二句为我们添加的语句。Extern的意思是Price为一个外部变量,可以在指标运行期间动态进行修改。

然后在start函数中加入如下语句:

  1. int start()
  2. {
  3. int counted_bars=IndicatorCounted();
  4. //----
  5. if(Bid==Price)
  6. Alert(“到达指定价位!”);
  7. //----
  8. return(0);
  9. }
复制代码

编译后运行,然后把Lesson5_Alert_1指标添加到图表上,并设置好Price变量,当当前的卖出价等于设定的Price价格时,则会弹出如下的报警窗口:



Alert函数的意思是当满足if内设定的条件时,弹出一个警报窗口,把Alert函数内设定的内容显示出来,同时会发出警报声。


如果我把Lesson5_Alert_1指标同时添加到很多个货币对上,那么当指标弹出报警窗口时,我怎么才能知道是哪个货币对在报警呢?这时就必须为报警内容添上货币对的名称了。现在我们把刚才的语句改写如下:

  1. if(Bid==Price)
  2. Alert(Symbol()+“到达指定价位!”);
复制代码

重新编译并添加到图表上,当当前卖出价格等于Price指定的价格时,将会弹出如下的报警窗口:



可以看到报警窗口内已经显示出是哪个货币对在报警了,这都是Symbol()函数的功劳,Symbol函数的作用是获得当前指标所在图表的货币对的名称。与Alert函数类似的还有MessageBox函数,有兴趣的朋友可以自己查看帮助文档。


现在设想一下,假如同样是EURUSD货币对,同时打开了5分钟图、30分钟图、1小时图,并在每张图上都添加了Lesson5_Alert_1指标,那么,指标报警时光有名称还不足够了,这时可把语句改写如下:

  1. if(Bid==Price)
  2. Alert(Symbol()+“在”+Period()+“分钟图上到达指定价位!”);
复制代码

此时,当卖出价到达指定价位后,弹出的报警窗口如下图所示:



Period函数的作用是获取指标所在图表的时间周期。




附:《MT4》编程的输出方式


1、画图:

MT4语言编程的基本输出方式就是“画”(动词)。这个“画“可以画出最常见的线图,也可以画出提示用的箭头、柱状图、趋势线等。

决定“画”的输出样式的函数是: SetIndexStyle

它应用在我们前面说过的系统函数init()的内容里面,一般通过在函数init()里面的SetIndexStyle设定,来决定哪个要画成线图、哪个要画成箭头。

举例:

int init()

  {

IndicatorBuffers(2); //这个函数表示有两个数组的数值用于画图

SetIndexBuffer(0,MAUp) ;//表示前面定义的数组MAUp的数值用于画第一个指标的图

SetIndexBuffer(1,MADown); //表示前面定义的数组MADown的数值用于画第二个指标的图

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2); //参数里面:0表示设定第一个数组,参数DRAW_HISTOGRAM表示画柱状图,参数STYLE_SOLID表示画图的样式为实心图,参数2表示画徒的线宽度为2。

SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,1);//参考上面

提示:凡是你不懂意思的参数或者函数,将光标移动到它上面,按F1,则MetaEditor就会给你显示函数或者参数的意思和用法。


2、 标记文字:

函数为Comment(),

使用这个函数可以输出文字到屏幕K线图的左上角。我们一般用它显示一些记忆性的内容。因为左上佳的字体比较小,文字内容的变化不容易被察觉到,所以一般不用她来做提示性的功能。


3、 弹出窗口报警:

函数为Alert(),

使用这个函数,当运他的时候,将弹出一个报警窗口,并发出一个短促的警报声音。使用它可以在满足条件的重要时刻,弹出报警窗口,及时察觉这种变化。
注意:这个函数一般放在条件语句满足之后运行,不要将满足条件设得很频繁,否则报警窗口经常弹出来比较烦人。还有如果你是对当前K线进性判断,要注意到一个编成问题,当前K线的价格还在不停变动中,每变动一次都将执行一次系统函数Start(),因此您的Alert()条件如果是和当前K线的Close关系密切的话,在满足条件后,将会来一个价格就报一次窗口,也很讨厌。


4、 文件输出:

MT4可以读取和写入一般文本文件,因此你可以将一些运行中的重要动态数据通过MT4的文件函数写入具体文件中。这些功能应用较少。有兴趣的朋友可以直接查看MetaEditor右侧帮助栏的File Functions函数分类。


5、 对象:

MT4可以使用程序来创造很种类型的“对象”放在图表上面,这种功能主要用于将图表打扮的更加漂亮以及标示出更多重要的程序计算出来的数据,具体用法后面再慢慢说。MT4可以创造的“对象”类型如下:

OBJ_VLINE  0  垂直线,使用第一坐标部分时间

OBJ_HLINE  1  水平线,使用第一坐标部分价格

OBJ_TREND  2  趋势线,应用2个坐标

OBJ_TRENDBYANGLE  3  趋势角度,应用1个坐标。应用ObjectSet()功能设置线的角度(角度的趋势线)

OBJ_REGRESSION  4  回归线,应用前2个坐标的时间部分

OBJ_CHANNEL  5  通道,应用3个坐标

OBJ_STDDEVCHANNEL  6  标准偏离通道,应用前2个坐标的时间部分

OBJ_GANNLINE  7  甘氏线,应用2个坐标,但第2个坐标的价格部分

OBJ_GANNFAN  8  甘氏扇形,应用2个坐标,但第二个坐标价格部分

OBJ_GANNGRID  9  甘氏网格线,应用2个坐标,但第2个坐标的价格部分

OBJ_FIBO  10  费波纳切搞通撤回,应用2个坐标

OBJ_FIBOTIMES  11  费波纳切周期线,应用2个坐标

OBJ_FIBOFAN  12  费波纳切扇形图,应用2个坐标

OBJ_FIBOARC  13  费波纳切弧线,应用2个坐标

OBJ_EXPANSION  14  费波纳切延展线,应用3个坐标

OBJ_FIBOCHANNEL  15  费波纳切波通道,应用3个坐标

OBJ_RECTANGLE  16  长方形,应用2个坐标

OBJ_TRIANGLE  17  三角形,应用3个坐标

OBJ_ELLIPSE  18  椭圆形,应用2个坐标

OBJ_PITCHFORK  19   安德鲁分叉线,应用3个坐标

OBJ_CYCLES  20  圆形,应用2个坐标

OBJ_TEXT  21  文本,应用1个坐标

OBJ_ARROW  22  箭头,应用1个坐标

OBJ_LABEL  23  文字标签,应用1个坐标




杨氏补:如何画射线与线段


1、画射线:

ObjectCreate("射线名",OBJ_TREND,0,X1,Y1,X2,Y2);

如下语句:

ObjectCreate("X1LINE",OBJ_TREND,0,Time[20],High[20],Time[5],Low[5]);

编译后如下图所示:




2、画线段:

方法:在射线基础上,加以限制“射线=假”加以实现。

如下语句:

ObjectCreate("X1LINE",OBJ_TREND,0,Time[20],High[20],Time[5],Low[5]);

ObjectSet("X1LINE", OBJPROP_RAY, false);//限制射线方式,即线段方式

编译后,如下图所示。


 

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系我们|外汇邦外汇论坛

GMT+8, 2022-10-10 08:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表