MT4编程开发实战系列

来源:百度文库 编辑:神马文学网 时间:2024/04/29 06:56:23
\ Z~ M,Lq4bz
画图系列3:如何创建符号及文字
QP@@h4J^
这是MT4编程开发实战系列的第3站。在前面两节中,我们已经学会了如何利用ObjectCreate函数来画直线、椭圆和矩形。但这些都是很基本的图形,我们经常能看到一些MT4指标在图表上画出了各种各样的符号,非常有趣!那么这些符号是如何画出来的呢?答案还是ObjectCreate函数!由此看见ObjectCreate函数在MT4画图编程中是多么的重要了吧,就如造物主一般创造出各种美妙的图形!下面,我们一起来学习一下,如何用ObjectCreate函数创造出更多的图形。
"# Q"gC.K
首先创建一个指标文件,命名为Lesson3_DrawSymbol_1,然后在start函数中输入如下代码:
1d&Q E\2}

CthY`xAJ#= ,i
编译后添加到图表,会发现我们已在图表上画了一个向上的箭头:
B5;94YIN

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

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

(T.g""N~`
X>MDX.Z
编译后把Lesson3_DrawSymbol_2指标添加到图表上,看到了什么?没错,所有MT4支持的图形符号都跑出来了!
Lcs?2c:%

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

|<LW(,|A
^编译后添加Lesson3_DrawText_1指标到图表:
EB5 ^eNdL

l ZD"7om
9Ljd or
如果我想让”Hello World!”以与水平线成30度的角度显示,该如何做呢?在上面的代码后面添加一句:
}<H0CcG

NO.5Vy
dijHi
重新编译后效果如下:
N-Sjd%Z 

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