论坛风格切换切换到宽版
  • 7087阅读
  • 45回复

MT5编程实战开发系列----第一讲:Hello,MT5 [复制链接]

上一主题 下一主题
离线shawnyau
 

发帖
49
金钱
41
威望
1173
贡献
151
交易币
6
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-10-15
本帖最后由 shawnyau 于 2009-10-15 18:34 编辑 QeY+imM  
DN9x<%/-  
MT5的推出,实在是广大汇友之福!新增的众多强大功能,相信会让大家在交易时如虎添翼。废话不多说,沿袭MTx编程实战开发系列的惯例,先来个小例子,让大家感受一下MT5的强大。 W}F~vx.  
首先启动MT5(不知道哪里下载的请参阅笔者博客): *K>2B99TXu  
E; yr46  
图1-1 };2Lrz9<  
如图1-1所示,选择菜单上”Tools->MetaQuotes Language Editor”选项,启动MQL5编辑器MetaEditor5(以下简称ME5),或者在MT5中直接按快捷键F4,同样可启动。进入ME5后,点击工具栏上的“New”按钮,在弹出的对话框中选择Expert Advisor选项: Pf8_6z_  
M|y!,/'  
点击“下一步”,输入EA的名称: @#"K6  
"6e3Mj\  
这里我们将第一个EA例子命名为Lesson1,输入后点击“完成”按钮,即可生成Lensson1.mq5文件,一切与ME4基本一致。 r& RJ'z  
让我们来观察一下Lesson1.mq5的代码结构,与MT4时代自动生成的EA代码基本一样,也是三个函数,其功能也是一样的,区别在于名字变了,MT4时代的是init、deinit和start,而MT5中生成的是OnInit、OnDeinit和OnTick。On我们可以理解为“当。。。”的意思,那么这三个函数就很形象了,分别为:当初始化、当程序结束和当价格跳动。这里作个补充:MT5中虽然增加了Timer机制,但默认仍然是基于Tick驱动事件的,Timer机制需自行启动(最后这段话看不懂?没关系,以后再用例子说明,这里不看也罢,呵呵)。 a"+/fC`  
好了,框架有了,那么我们想让第一个例子Lesson1实现些什么功能呢?我是这样打算的:让Lesson1在图表上添加一个按钮,当点击这个按钮时,会弹出一个对话框,对话框的内容是“Hello, MT5!”。有了目标就好办,我们继续前进! :U1V 2f'l3  
首先我们让Lessson1具备在图表上添加按钮的功能。我们在OnInit函数中添加如下代码: 4/o9K*M+  
G4F~V't  
输入完毕后,按下编译快捷键F5,如输入无误,会自动切换到MT5图表: d76C ]R5L  
+'e3YF+'  
如图1-3勾上两个选项,点“确定”,EA就加载到图表上了。这时我们可以发现,在图表中多了个按钮: < Lrd(b;  
bF@iO316H  
点击这个按钮,什么都没发生,那是因为我们还没有为这个按钮添加处理代码。下面,我们继续为Lesson1添砖加瓦。 t/"9LMKs?  
在OnTick函数下面添加一个函数OnChartEvent,并输入如图1-5所示代码: piUfvw  
(7aE!r\Ab  
输入完毕,再次按下编译快捷键F5,然后点击图表上的按钮,这时就会弹出个对话框,内容为”Hello,MT5!”: RK]."m0c~#  
]_)=xF19  
至此,我们的Lesson1就完成了!怎样,MT5的功能不错吧? X?"Ro`S  
下面,为大家讲解一下上面的代码含义。首先我们看看在OnInit函数里面添加的代码: [C~{g#  
ObjectCreate(0, "Button1", OBJ_BUTTON, 0, 0, 0, 0, 0); Yc'7F7.<6  
如果读者有MT4编程基础的话,ObjectCreate函数就非常熟悉了(如不熟悉请参阅笔者的《MT4编程实战开发系列》,创建一个Object(物件),OBJ_BUTTON是MT5新增的参数,意即创建一个Button1(按钮)。 ].w$b)G   
ObjectSetInteger(0, "Button1", OBJPROP_XDISTANCE, 250); =mk7'A>l  
ObjectSetInteger(0, "Button1", OBJPROP_YDISTANCE, 100);
WxLILh  
上面两句分别设定了Button1的X坐标和Y坐标。注意:在MT4时代,Object的所有属性都是用ObjectSet函数来设定的,在MT5中,将其细分为ObjectSetInteger、ObjectSetDouble和ObjectSetString三个函数了,三权分立,各司其职。 ~F]- +|  
ObjectSetString(0, "Button1", OBJPROP_TEXT, "Say"); VuW&CnZ  
ObjectSetString函数功能为设定Object的string类型(字符串类型)属性,这里设置Button1上面的文字。补充一下:MT5中对中文的支持仍然很差,这里如果设置为中文则无法显示,希望后续版本有所改善。 Im_`q\i  
ObjectSetInteger(0, "Button1", OBJPROP_STATE, 0); M+^+u 1QQ0  
最后,设定OBJPROP_STATE属性,这个属性控制着Button1的显示状态,设置为0,表示默认显示为弹起的,大家可将其设为1,看看效果。 Hw/1~O$T  
综述,上面的几句代码创建了一个叫做Button1的按钮,并设置了x,y坐标及按钮文字、显示状态。 /T*]RO4%>]  
接着,我们来看看新增的函数OnChartEvent。如上所述,OnChartEvent顾名思义就是“当图表上发生了事情时。。。”,OnChartEvent的参数比较多,也比较复杂,这里暂时不解释,后面有机会再细谈,这里我们需要知道的是:在MT5中,当图表上发生了任何事情,如点击按钮、输入框中输入文字、拖动Object、按下键盘等等,就会调用OnChartEvent函数。那么,我们只需守株待兔,在OnChartEvent函数中检测Button1是否被按下: m5LP~Gb  
if (id==CHARTEVENT_OBJECT_CLICK && sparam=="Button1") D`.CXFI+U  
这句,意思就是当图表上发生了事情,如果是Object被按下,且Object的名字是Button1,则满足条件,继续下面的操作: S*CRVs  
MessageBox("Hello, MT5!", "Button1", MB_OK); zUxF"g-W  
MessageBox函数功能是弹出一个对话框,其中参数这里就不详述了。 e:.Xs  
看起来Lesson1似乎工作得不错,但仔细看看,按钮在按下之后不会自动弹起来!为了解决这个问题,我们把OnChartEvent函数改进一下: sM~|}|p  
(N43?iv(  
还记得OBJPROP_STATE属性吧,控制按钮的显示状态,那么这里的意思就是显示完MessageBox后,再次把按钮的显示状态恢复为弹起。至此,Lesson1开发全部结束,敬请关注MT5编程实战开发系列第二讲!
附件: Lesson1.rar (1 K) 下载次数:85
3条评分
老山羊 ͭǮ +10 - 2009-10-18
xucheng ͭǮ +10 精华教程 2009-10-16
hahaundhehe ͭǮ +10 - 2009-10-16
 
离线xiaosuteng
发帖
13
金钱
10
威望
58
贡献
20
交易币
0
只看该作者 沙发  发表于: 2009-10-15
支持,顶学习学习
 
离线aaakun1888

发帖
1
金钱
6
威望
559
贡献
56
交易币
0
只看该作者 板凳  发表于: 2009-10-15
支持,支持,非常严重的支持
离线jinxi

发帖
21
金钱
135
威望
16
贡献
80
交易币
5
只看该作者 地板  发表于: 2009-10-15
thanks you very much...........................
离线melamine

发帖
14
金钱
17
威望
639
贡献
84
交易币
135
只看该作者 地下室  发表于: 2009-10-15
错过了mt4,我要在MT5上追上来,非常坚定滴学习
离线melamine

发帖
14
金钱
17
威望
639
贡献
84
交易币
135
只看该作者 下水道  发表于: 2009-10-15
刚操作了一遍,非常不错!基本能懂
离线单刀

发帖
208
金钱
853
威望
8947
贡献
155
交易币
0
只看该作者 6楼 发表于: 2009-10-16
老师讲的好,学生的记得鼓掌,加分!~~
离线fanfan888

发帖
63
金钱
598
威望
220
贡献
110
交易币
93
只看该作者 7楼 发表于: 2009-10-16
不错,MT5的功能更强, 还是先学习吧,有MT4基础,MT5只会更简单.
离线niu2004

发帖
17
金钱
20
威望
2
贡献
43
交易币
0
只看该作者 8楼 发表于: 2009-10-16
xuexi....................
离线zlemzlem

发帖
17
金钱
73
威望
187
贡献
89
交易币
6
只看该作者 9楼 发表于: 2009-10-16
支持,支持,非常严重的支持 下载 (714 Bytes) O~N0JK_>  
sPuNwVX>}I  
2009-10-15 21:40 下载 (714 Bytes) x9)^0Hbo  
'te4mY}  
2009-10-15 21:40 下载 (714 Bytes) ~1jSz-s  
[1K\ _  
2009-10-15 21:40 下载 (714 Bytes) 0l=g$G \%  
FJDx80J  
2009-10-15 21:40
离线指小标

发帖
121
金钱
786
威望
7554
贡献
304
交易币
507
只看该作者 10楼 发表于: 2009-10-16
我想在主图里养只金鱼,看来有机会了……
离线yangxiao51
发帖
50
金钱
8
威望
36
贡献
62
交易币
0
只看该作者 11楼 发表于: 2009-10-16
学习学习
离线toolater

发帖
36
金钱
560
威望
522
贡献
193
交易币
5
只看该作者 12楼 发表于: 2009-10-16
问lz一下, 1M={8}3  
有没有十字线在某根k线上停留引发的事件?
离线winshell32
发帖
39
金钱
9
威望
35
贡献
54
交易币
0
只看该作者 13楼 发表于: 2009-10-16
太牛了,MT5。
离线shawnyau

发帖
49
金钱
41
威望
1173
贡献
151
交易币
6
只看该作者 14楼 发表于: 2009-10-16
问lz一下, A;g{H|  
有没有十字线在某根k线上停留引发的事件? oY$L  
toolater 发表于 2009-10-16 15:47
M(+;AS?;  
MG6y  
现在只有俄文的帮助文档,我借助google看了一下,能处理键盘事件,和鼠标拖动事件,但鼠标停留事件似乎没有。
离线xucheng
发帖
958
金钱
120
威望
1760
贡献
112
交易币
40
只看该作者 15楼 发表于: 2009-10-16
多谢分享, 认真跟楼主学习MT5编程。
离线水位
发帖
6
金钱
37
威望
222
贡献
57
交易币
19
只看该作者 16楼 发表于: 2009-10-16
学习学习
离线lonelywing
发帖
11
金钱
58
威望
2508
贡献
86
交易币
6
只看该作者 17楼 发表于: 2009-10-16
好课程啊
离线weiscc
发帖
6
金钱
54
威望
3
贡献
71
交易币
4
只看该作者 18楼 发表于: 2009-10-16
非常感谢
离线devcon
发帖
2
金钱
0
威望
53
贡献
11
交易币
0
只看该作者 19楼 发表于: 2009-10-16
学习了!
离线fxso
发帖
7
金钱
-2
威望
971
贡献
57
交易币
0
只看该作者 20楼 发表于: 2009-10-17
严重学习了。。
离线ithurricane
发帖
14
金钱
755
威望
2209
贡献
116
交易币
7
只看该作者 21楼 发表于: 2009-10-17
从零开始学习MT的编程了
离线mini_chens
发帖
9
金钱
58
威望
133
贡献
64
交易币
1
只看该作者 22楼 发表于: 2009-10-17
强贴,顶了,楼主请继续。
离线孙行者
发帖
57
金钱
589
威望
1757
贡献
88
交易币
14
只看该作者 23楼 发表于: 2009-10-17
学习学习..
离线trader888

发帖
117
金钱
33
威望
220
贡献
125
交易币
3939
只看该作者 24楼 发表于: 2009-10-17
楼主再接再励, 非常感谢
发帖
98
金钱
210
威望
125
贡献
51
交易币
0
只看该作者 25楼 发表于: 2009-10-17
佩服 auY?Cj'"fs  
AxO.adQE%  
离线aaakun1888

发帖
1
金钱
6
威望
559
贡献
56
交易币
0
只看该作者 26楼 发表于: 2009-10-18
非常感谢,谢谢
离线melamine

发帖
14
金钱
17
威望
639
贡献
84
交易币
135
只看该作者 27楼 发表于: 2009-10-18
什么时候发第二课啊?期待着
离线loolool
发帖
3
金钱
0
威望
0
贡献
21
交易币
0
只看该作者 28楼 发表于: 2009-10-18
非常感谢
离线huangzilai
发帖
1
金钱
84
威望
134
贡献
87
交易币
11
只看该作者 29楼 发表于: 2009-10-18
MT5 编程更趋向Object Oriented, Debug 将更加困难

  • 在线咨询
  • 400-881-0680