mt4箭头符号

更新时间:2023-11-28 22:03:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

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

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

在开始动手之前,首先讲一个很基本也很重要的概念:

在MT4系统中,图表的方向是从右到左的,举例说:在一个记录有当前图表每根K线位置的数组中,第一个数值表示的是图表最右边、也就是当前的K线的数值!

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

1、画水平线:

首先,在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函数是主函数,每次价格变动的时候,都会执行一次这个函数。

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

这是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表示当前的买入价。

椭圆已经画出来了,颜色似乎不够醒目,那我们应该如何修改已画出来的图形的颜色呢?

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

Int start()

{

Int counted_bars=IndicatorCounted();

Int cnt;

//----

If(counted_bars>0) counted_bars--;

Int limit=Bars-counted_bars-1;

For(cnt=0;cnt

{

ExtMapBuffer[cnt]=(High[cnt]+Low[cnt])/2;

}

//-----

Return(0);

}

编译后,将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函数改写为如下这样:

SetIndexStyle(0,DRAW_LINE,STYLE_DASH);

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

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

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

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,4);

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

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

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,4,Blue);

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

第五节如何创建警报

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

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

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

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

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

#property indicator_chart_window

Extern double Price;

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

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

Int start()

{

Int counted_bars=IndicatorCounted();

//----

If(Bid==Price)

Alert(“到达指定价位!”);

//----

Return(0);

}

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

本文来源:https://www.bwwdw.com/article/memt.html

Top