English Русский Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
全新 MetaTrader 5 和 MQL5 来袭

全新 MetaTrader 5 和 MQL5 来袭

MetaTrader 5示例 | 19 八月 2013, 11:27
2 675 0
Yuriy Zaytsev
Yuriy Zaytsev

我将给出部分功能的简短描述。


图 1. 这不是 Photoshop - 这是 MQL5。

MQL5 和 MT5 的引人入胜之处几乎全部实施于一个极高的层面。

MQL5 的根本性变革在于面向对象编程 (Object Oriented Programming, OOP) 的出现。我在 OOP 方面涉猎不深 - 事实上,经验丰富的程序员能获得更大的可能性。对于那些喜爱 MQL4 而对 OOP 知之甚少的程序员来说,开发人员提供了使用 MQL4 方式而无需 OOP 在 MQL5 中编程的可能性。不同之处在于功能,这需要重新熟悉。

让我们举一个简单的例子:新版本中不再有 Ask 和 Bid 变量。要获得 Bid 值,需要调用以下函数:

SymbolInfoDouble(Symbol(),SYMBOL_BID);

新版中不再有过去频繁使用的 Low[0] 或 iLow ( Symbol(), PERIOD_D1, 0 ),但可以轻易地重新构建它们。配合历史数据使用的新函数提供了从一个点到另一个点、从某柱到另一特定的柱或从某个选定时间到另一选定时间在内存中读取历史数据的可能性。此前,读取一个数据系列需要将整个可见范围都加载到内存中。无论您是否需要,数据都将读取;若您需要读取 M1,系统将会从 1999(如果有相应历史数据可用)一直读取到当前日期、小时和分钟。

现在,仅读取必要范围的数据,如此一来大大节省了时间和内存。

MqlRates rates_arrayG[];
Int Bar=30; // read only 30 bars stating from the zero one
iCopBar=CopyRates(Symbol(),PERIOD_M1,0,Bar,rates_arrayG);

此功能节省了时间和内存。

此类功能变化并不会为我们带来多少不适。我们只需要花费一点时间了解和熟悉新的函数或类似物。

我所期待的 MQL 的一些功能创新:

  • OnTimer() - 用于处理计时器事件的函数(现在您无需循环 Expert Advisor(EA 交易)以使其工作具有独立于收到的订单号的周期性);
  • OnTrade() - 用于处理交易事件 - 交易开仓、平仓或交易量改变 - 的函数;
  • OnChartEvent() - 通过鼠标或键盘处理事件。

让我们在此稍作展开。

如果计时器在 OnInit 预设函数中预初始化,则调用 OnTimer() 函数(EA 初始化事件处理程序)。

示例:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(1); //each second we'll refer to OnTimer()
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit()
  {
   EventKillTimer(); // canceling of timer reference must be called at exit
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   MqlDateTime str1;
   TimeGMT(str1); // new function to get GMT time
   Comment(str1.hour
           ,str1.min
           ,str1.sec
           ,str1.day
           ,str1.mon
           ,str1.year
           ,str1.day_of_year
           ,OrdersTotal()
           ,PositionsTotal()
           );
  }

因此,控制可在较早接收订单号时获得,也可从允许写入实时可管理程序的计时器获得。有了这一可能性,我们便可以创建更为复杂的系统。

我喜欢 OnTrade() 函数。此函数在以下任意交易事件触发时调用:下单、激活止损或获利、更改止损或获利水平、发出/删除挂单。

现在,监视事件及相关交易操作要容易得多。无需循环检查订单号或柱的订单状态。此类循环在 MQL4 中使用,这样一来,就极大降低了程序的性能,而这一点对于最优化而言是很重要的。

下面我们要讨论的是 OnChartEvent() 函数。该函数调用为多个事件执行。我并没有逐个测试,但结果令人印象深刻:

  • CHARTEVENT_KEYDOWN - 键按下事件;
  • CHARTEVENT_OBJECT_CLICK - 鼠标点击隶属某个图表的图形对象的事件;
  • CHARTEVENT_OBJECT_DRAG - 通过鼠标移动图形对象的事件;
  • CHARTEVENT_OBJECT_ENDEDIT - 文本编辑结束事件;
  • CHARTEVENT_CUSTOM+n - 自定义事件的标识符;
  • CHARTEVENT_CUSTOM_LAST - 最后一个。

在一个新的功能层面管理交易和图形的可能性 - 这正是开发人员所宣称的。

新的图形对象、按钮、输入字段出现。图表管理变得极为出色,您甚至可以从文件中插入图片 - 此选项对于那些喜欢特别设计的用户而言带来了极大的可能性。这不是 Photoshop,这是 MQL5 和 MetaTrader 5 发展潜力的结果。除了一应新功能,您还可以创建自己的按钮和输入字段添加,例如,用于关闭所有未结订单的按钮,或带有预设止损和获利参数的快速“买入”和“卖出”按钮。


图 2. 图形对象可创建信息面板。

图 2. 图形对象可创建信息面板

有一个令人不快的事实是:无法从指标创建对象。这是软件开发商故意为之,以加快指标的性能。好消息是,软件开发商同样也明白这一点,并有可能提供在一个图表内启动多个 EA 交易的可能性。 这样我们便能够通过对象创建 EA 指标而无需交易。现在就可以创建此类指标 - 它们的操作方式与普通指标并无不同。现在任务得以解决,即在一个图表中启动一个交易 EA,然后 EA 在第二个图表中创建对象,接下来在两者之间实行交易。

例如,我花了几个小时设法将我的突破指标从 MQL4 转换到 MQL5。大部分时间都花在了函数的学习和调试上。在 MQL5 中,代码变得更短。

而对于终端本身而言,数量众多的时间表让我印象深刻。在我看来,这似乎稍有过多之嫌。然而,丰富的分钟时间表对某些交易人员而言是十分有用的。那么,现在离自由设置的时间表的创建仅有一步之遥。现在,所有数据已仅作为分钟时间表存储,因此,不同时间表的同步完全没有问题 - 这是一项重要的技术解决方案。

现在 HISTORY(历史数据)目录下没有不同时间表的文件



图 3. 所有历史数据存储于单一文件中。

另外一个让人惊喜的新功能的引入是现在我们可以清除日志。

图 4. 一键清除 EA 日志,删除所有不必要的消息

这只是 MetaTrader 5 的一个简短介绍。我无法在如此短小的篇幅里给出系统所有新功能的描述 - 测试从 2009 年 9 月 9 日即已开始。这是一个具有象征意义的日子,我肯定这也会是一个幸运数字。就在几天之前,我拿到了 MetaTrader 5 终端和 MQL5 的试用版。我并没有试用所有的功能,即便如此,它们也给我留下了深刻的印象。

MetaQuotes 的“魔法师”们创造出令人惊叹的产品。作为拥有 25 年经验的资深开发人员,我已经看到了众多的可能性,并且敢断言结果的实现!

此致
Yuriy Zaytsev

Skype:yurazyuraz
yzh@mail.ru

本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/1

MQL5云网络: 你还在计算吗? MQL5云网络: 你还在计算吗?
自MQL5云网络发布以来很快就要有一年半的时间了,这个领先事件又迎来了一个算法交易的新时代 - 现在,通过轻点鼠标交易人员就可以拥有成百上千的计算核心来处理优化他们的交易策略。
关于MetaTrader 4和MetaTrader 5交易信号的一般资料 关于MetaTrader 4和MetaTrader 5交易信号的一般资料
MetaTrader 4 / MetaTrader 5的“交易信号”是这样一种服务,它允许普通交易者复制信号提供者的交易操作。我们的目标是开发一种能被广泛使用的新服务,它能够保护订阅者,并为他们减少不必要的成本支出。
探索新功能:MQL5 的自定义指标 探索新功能:MQL5 的自定义指标
在这里,我无法一一列举新终端和新编程语言的所有新的可能性和功能。这数不胜数,而且部分创新点也需要以单独的章节来进行详细探讨。同样,本章节也不会出现以面向对象编程语言写就的代码。这部分内容十分重要,不能简单地附于其他内容之后作为补充优点呈现给开发人员。在本文中,我们将会探讨指标,以及相比 MQL4 指标的结构、图形、类型和编程细节。希望无论是初学者还是经验丰富的开发人员均能从本文中获益,也许部分读者还会有自己新的发现。
如何订阅交易信号 如何订阅交易信号
信号服务推广了可用于 MetaTrader 4 和 MetaTrader 5 平台的社群交易。该服务已集成在交易平台之中, 并且允许任何人轻松地跟单专业操盘手的交易。从数千信号提供者当中任意选择, 只需数次点击即可订阅,之后操盘手的交易将被复制到您的帐户。