MT5 / MQL5新功能新函数首次大曝光 [MT4]
作者:
MT4 来源:
cxh99.com 发布时间:2012年05月08日 点击数:
【
收藏到本网的会员中心】
- 我只能进行一下简短的描述。
MetaTrader 5 和 MQL5的高水准让大多数人感兴趣。
MQL5中根本的改变是面向对象编程的出现。我不会在面向对象编程方面走得更深,那只是给资深程序员提供了更多的可能性。对于那些喜欢MQL4并且不懂得面向对象编程方法的人来说,在MQL5里仍然可以用MQL4的方式编程,而不使用面向对象功能。区别只是如果你要使用这个功能,就必须重新学习。
让我们看一个简单的例子:Ask和Bid变量没有了。为了取得卖出价,需要调用以下函数:
复制代码- SymbolInfoDouble(Symbol(),SYMBOL_BID);
不需要频繁使用Low[0] 或 iLow ( Symbol(), PERIOD_D1, 0 ),但你可以很容易重建他们,新函数把历史数据逐个读入内存,从某一K线到另一K线,或从一个选定的时间到另一个选定的时间。通过预读数据,整个可见的变化范围都被读入内存。不管你是否需要,它已经被读入内存了;比如你需要读入一分钟的数据,那么从1999年(如果存在有效历史数据的话)到此时此刻的一分钟数据都会被读入内存。
下面的例子只读入必要范围的数据。极大的节省了时间和内存。
复制代码-
- MqlRates rates_arrayG[];
- Int Bar=30; // 从当前K线开始只读入30个K线的数据
- iCopBar=CopyRates(Symbol(),PERIOD_M1,0,Bar,rates_arrayG);
这个功能既节省时间又节省内存。
这样的功能性变化并不吓人,我们只需要花点时间学习一下函数指针。
我等待已久MQL的一些有用的创新:
OnTimer() – 处理时间事件的函数(可以使EA的工作不再单纯依赖tick数据的触发);
OnTrade()-处理交易事件函数-交易仓位的开立、关闭或数量的变化。
OnChartEvent() – 处理来自鼠标和键盘的消息。
让我们仔细研究一下这些功能:
要调用OnTimer()函数,需在OnInit()函数(EA初始化事件处理器)里初始化计时器。
例如:
复制代码-
- //+------------------------------------------------------------------+
- //| |
- //+------------------------------------------------------------------+
- int OnInit()
- {
- EventSetTimer(1); //每一钞钟将会提交给 OnTimer()函数
- }
- //+------------------------------------------------------------------+
- //| |
- //+------------------------------------------------------------------+
- void OnDeinit()
- {
- EventKillTimer(); // 退出时必须调用取消时间基准
- }
- //+------------------------------------------------------------------+
- //| |
- //+------------------------------------------------------------------+
- void OnTimer()
- {
- MqlDateTime str1;
- TimeGMT(str1); // 新函数取得 GMT 时间
- Comment(str1.hour
- ,str1.min
- ,str1.sec
- ,str1.day
- ,str1.mon
- ,str1.year
- ,str1.day_of_year
- ,OrdersTotal()
- ,PositionsTotal()
- );
- }
因此,控制不只象早先那样能够在收到tick数据时得到,还可以从时钟控制器上得到,这样可以编写实时的易处理程序,有了这个功能,更复杂的系统可以创建。
我喜欢OnTrade()函数,这个函数在下列交易事件被触发时调用:订单放置、止损或止盈被激活、改变止损或止盈数值、放置/删除一个待办定单。
现在监视事件与交易操作之间的关系更容易了。现在不用在每个tick发生或K线产生时循环检查定单状态了。这样的循环检查在MQL4中被使用,这极大地削弱了程序的性能。因此,在优化过程中特别重要。
让我们仔细研究一下OnChartEvent()函数。这个函数在以下几个事件发生时调用。我没有逐个测试,但这个目录给人印象深刻:
CHARTEVENT_KEYDOWN — 键盘按下事件;
CHARTEVENT_OBJECT_CLICK —在一个图表上绘制的物件被鼠标点击事件;
CHARTEVENT_OBJECT_DRAG —在一个图表上绘制的物件被鼠标移动事件;;
CHARTEVENT_OBJECT_ENDEDIT — 文本编辑结束事件;
CHARTEVENT_CUSTOM+n — 定制事件的识别;
CHARTEVENT_CUSTOM_LAST —定制的最后一个事件的识别.
高水平管理交易和图表的能力-这是开发者事先承诺过的
新的图表物件、按钮、进入域出现了。图表管理变得非同寻常,甚至可以插入来自于文件的图片-这个选项给那些喜欢特别设计的人提供了很多可能性。这不是Photoshop,这是MQL5 和 MetaTrader 5的结果。通过这些功能,你可以创建自己的按钮或添加进入域,例如,一个关闭所有打开订单的按钮或预先设定好止损止盈的快速买入和卖出按钮。
有一个另人不愉快的事实:那就是指标里不能创建物件,这是为了使指标执行得更快。好消息是他们知道了这一点,可能会让一个图表上可以执行多个EA。这样我们可以创建一个带有物件的“EA指标”,这个EA不交易,象指标一样操作。现在,问题是这样解决的:在一个图表上运行一个交易EA,这个EA在可以在第二个图表上创建物件,二者可以互换。
我试着把我的一个MQL4突破指标转换成MQL5的,用了好几个小时,大部份时间用在学习函数和调试上了。不过MQL5的程序代码已经变得很短了。
至于终端方面,让我印象最深的是数据周期的数目。在我看来,已经过多了。但是,大量的时间周期对一些交易者可能有用。现在创建任意时间周期只需要一步。所有的数据都是以一分钟周期存储的,因此转换成任何不同的周期都没有问题-这是一个重要的技术解决方案。
在历史数据目录里,现在没有不同时间周期的文件了。
另一个另人愉快的新功能是现在我们可以清除日志文件了。
这只是MetaTrader 5简短的评价。在这么短的时间内我无法描述系统全部的新功能。2009年9月9日开始测试,这是一个象征性的日子,我确信它将是一个幸运数字。自从我得到MetaTrader 5 终端 和 MQL5的测试版,几天过去了,还没能试遍它的所有功能,但我已经印象非常深刻了。
来自METAQUOTES的魔术师们创造了一个不可思议的产品。我是一个有25年经验的开发者,我看到了很多项目的开始并一定能够完成。
献上最好的祝福
Yuriy Zaytsev
Skype: yurazyuraz
翻译者:bcsunwww
MetaQuotes 官方网站英文原文地址:http://articles.mql4.com/854