MT4图形编程(2)

2018-12-02 13:52

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

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

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

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

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

#property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Red Double ExtMapBuffer[ ];

红色部分为我们添加的语句。然后在init函数内添加如下语句:

Int init() {

//-----indicators

SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer); //----- Return(0); }

在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,就可以画出一条由点组成的曲线了,更多的类型大家可以通过查找编程文档获得。


MT4图形编程(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:弟子规主持稿

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: