实战系列1:在图表上画直线

2008年5月12日  |  19:06分类:MT4编程, MT4编程开发实战系列  |  1,811 views

这是MT4编程开发实战系列的第一站,我们先来学习一下如何在MT4图表上进行基本的画图操作。
     在开始动手之前,首先讲一个很基本也很重要的概念:在MT4系统中,图表的方向是从右到左的,举例说:在一个记录有当前图表每根K线位置的数组中,第一个数值表示的是图表最右边、也就是当前的K线的数值!
    画图最基本的操作是画直线。下面的两个例子将演示如何在图表上画一条直线。首先在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函数是主函数,每次价格变动的时候,都会执行一次这个函数。

喜欢本文,那就收藏到: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
  • 暂无相关日志

13条评论 关于 “实战系列1:在图表上画直线”

  1. chjinhui 发表于: 十月 6th, 2008 23:36

    很高兴!你在博客里发表这些外汇编程知识。我会常来看你的文章的。谢谢你的坚持,我支持你。

  2. alibaren 发表于: 十月 18th, 2008 19:33

    请问如何把报警系统报出的各种价位(如,当前的均线价位,K线的开、收,高低价格)自动实时地记录到本地的数据库的表里面?

  3. 阿狼 发表于: 十月 19th, 2008 09:32

    具体实现比较复杂,原理就是设计一个dll,当信号出来时,通过dll来操作数据库。

  4. alibaren 发表于: 十月 19th, 2008 10:18

    请问阿狼,凭您的高深技术能否做个简单的测试看?能成功的话,我愿意付费开发。

  5. 阿狼 发表于: 十月 19th, 2008 10:58

    你加我的QQ详谈吧:228199130
    或电子邮件:shawnyau@126.com

  6. 阿狼 发表于: 十月 25th, 2008 17:35

    是的,这是我的原创,只不过被人转载。

  7. 非典型马甲 发表于: 十一月 18th, 2008 23:19

    lz真是好人,我是新手,刚对EA有一个初步了解,唉,大学学的那点编程都忘干净了,重新拣起来有点痛苦

  8. 新康 发表于: 三月 25th, 2009 14:33

    请教怎样找出对应价格的时间点?
    比如上一个H4的最高价格所对应的时间,怎样用mql4写出来?好像itime都不可以。因为我想找出相对应最高价格的rsi值,所以想先找出时间,然后再用ibarshift来找出shift数量,再可以用irsi。但就是不知道怎样找出对应的时间。。。
    非常感谢!

  9. 阿狼 发表于: 三月 25th, 2009 15:06

    你是怎么写的呢?把你的代码贴出来看看。

  10. 新康 发表于: 三月 25th, 2009 15:57

    我就是不清楚怎样写。我的想法是首先定义H4的最高价
    double h4high=ihigh(null,240,1)
    然后要找出这个h4high的时间,我就不知道怎么写了,本来以为用itime可以,但itime最后也是shift,不是价格值,所以我就写不下去了。。。
    如果能找出这个h4high的时间,那我就可以接着用ibarshift来算这个时间离开现在的barshift值,再用到irsi里面的shift就可以找出相应的rsi值了。
    现在问题就是怎样找到这个h4high的发生时间。。。

  11. 阿狼 发表于: 三月 26th, 2009 22:46

    你这样写不就行了吗:
    iRSI(NULL,0,14,PRICE_HIGH,1);

  12. 庐山外人 发表于: 八月 6th, 2009 16:30

    你好,请问能提供一个针对K线触穿各种信号指标线(如各种均线)时进行报警的MT4指标程序吗?
    谢谢。


发表您的评论