现在,假如我们觉得曲线太细了,想加粗该怎么做呢?这时就需要给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价格时,则会弹出如下的报警窗口:
Alert函数的意思是当满足if内设定的条件时,弹出一个警报窗口,把Alert函数内设定的内容显示出来,同时会发出警报声。
如果我把Lesson5_Alert_1指标同时添加到很多个货币对上,那么当指标弹出报警窗口时,我怎么才能知道是哪个货币对在报警呢?这时就必须为报警内容添上货币对的名称了。现在我们把刚才的语句改写如下: If(Bid==Price)
Alert(Symbol()+“到达指定价位!”);
重新编译并添加到图表上,当当前卖出价格等于Price指定的价格时,将会弹出如下的报警窗口:
可以看到报警窗口内已经显示出是哪个货币对在报警了,这都是Symbol()函数的功劳,Symbol函数的作用是获得当前指标所在图表的货币对的名称。与Alert函数类似的还有MessageBox函数,有兴趣的朋友可以自己查看帮助文档。
现在设想一下,假如同样是EURUSD货币对,同时打开了5分钟图、30分钟图、1小时图,并在每张图上都添加了Lesson5_Alert_1指标,那么,指标报警时光有名称还不足够了,这时可把语句改写如下: If(Bid==Price)
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(\射线名\如下语句:
ObjectCreate(\编译后如下图所示:
2、画线段:
方法:在射线基础上,加以限制“射线=假”加以实现。 如下语句:
ObjectCreate(\ObjectSet(\限制射线方式,即线段方式 编译后,如下图所示。