外汇EA编写教程:利用 MQL5 云网络加速计算

MetaTrader 5 中的多线程测试

您可以长长地列举出新型 MetaTrader 5 交易平台的所有优势,也可以提出它比金融市场中其它技术分析程序都要更好的诸多理由。而该平台还有一个更加无可辩驳的支持论据:即 MetaTrader 5 客户端中的策略测试仪。我们会在本文中为您讲述其绝佳的功能,您也就能明白,是什么样的功能能够让 MetaQuotes 软件公司的开发人员如此骄傲。

第 5 代的客户端不仅配备了一种强大且快速的新型 MQL5 编程交易策略语言,还有一种从头开始设计的绝对全新的“策略测试仪”。此测试仪不仅用于接收基于历史数据的交易策略测试的结果,还允许对其实施优化,即,找到最优参数。

策略优化是某交易策略在同一历史时段上的多路运行,带有其所依赖的不同参数组。这是一种标准的大量运算任务,可以并行,而且您可能已经猜到了 – MetaTrader 5 中的测试仪为多线程!实际上也就是说,我们现在该来看看来自标准发行包的某“EA 交易”的优化示例了。

测试条件

出于上述目的,我们采用一台配有 Intel Core i7 (8 核心,3.07 GHz)、12 GB 内存、Windows 7 64 位操作系统及 MetaTrader 5 build 1075 的计算机。

来自标准交付包、含有下述参数的“EA 交易” Moving Average.mq5 接受了测试:

  • 交易品种:EURUSD H1
  • 测试间隔:从 2011.01.01 到 2011.10.01
  • 价格模拟模式:1 分钟 OHLC (一分钟柱线上有开盘价、最高价、最低价和收盘价)
  • 优化类型:缓慢完全算法,计算次数总计 14,040

优化参数:

优化参数

本地代理上的优化

首先,在本地代理上运行优化。我们拥有八个测试代理,这也是最佳内核数的数字。禁止从本地网络使用远程代理和MQL5云网络的代理:

启用/禁用代理组

优化结束后,转到日志:在8个本地代理上进行14,040次通过需要1小时,3分,44秒。

2015.02.05 16:44:38	统计	本地 14040 次任务 (100%),远程0 次任务 (0%),云端 0 次任务 (0%)
2015.02.05 16:44:38	统计	优化通过时间1 小时3分46秒
2015.02.05 16:44:38	测试	优化结束,一共通过14040次

使用代理本地区域的优化

如何并行执行更多的任务?当然,您可以购买内核数更多的处理器。然而,这不会使您增加同时发生的任务数。策略测试解决了这个问题。您可以在您的本地网络创建您自己的处理代理区域。

如何创建代理区?

如果是本地网,代理应该安装在每台电脑上。如果MetaTrader 5安装在电脑上,使用“工具”菜单的相应命令,打开测试代理经理。

测试代理经理

另外,下载独立的应用程序,用来管理代理 MetaTrader 5 策略测试代理 并通过简单的安装过程。

MetaTrader 5 策略测试代理

在经理中,打开代理标签:

  1. 选择必须安装的代理数量。代理必须根据逻辑内核数来安装。 
  2. 输入将用于连接所用代理的密码。
  3. 选择连接的端口范围。
  4. 点击添加。

这就是它的全部。代理已经准备好使用本地网络的其他电脑。

如何连接您的代理?

代理只需几下点击即可连接。在程序端打开策略测试并转到“代理”标签。选择“本地网络区”并在上下文菜单中点击“添加”。

如何添加远程代理

最简单最快捷的方式自动扫描本地网络的IP地址和端口范围。选择它们,输入安装过程中指定的代理连接密码。

在LAN上搜索代理

点击“完成”,找到的所有代理将都可用于测试。

速度测试

我们已经在8个本地代理基础上,添加了20个远程代理。因此我们总共拥有28个代理,这是我们原有的3.5 倍。让我们优化我们的EA交易,看看它能执行得有多快吧。

2015.02.05 15:14:44    统计    本地 3412 次任务 (24%),远程10628 次任务 (75%),云端 0 次任务 (0%)
2015.02.05 15:14:44    统计 优化通过时间 15分钟 47 秒
2015.02.05 15:14:44     测试     优化结束,一共通过14040次

四分之三的任务通过远程代理来执行。优化时间减少到15分钟 47秒,这几乎要快4 倍。

增长速度惊人,但该解决方案并不是所有人都可以使用。但不要担心。甚至有机会更快地优化EA – 让我们试着使用MQL5云网络代理!

利用 MQL5 云网络实现优化

这一次我们不用本地代理,而是只采用 MQL5 云网络代理。点击“开始”按钮,并观察优化进度。此视频可实时显示进度。

使用MQL5 云网络,优化过程会加快150倍!

优化过程中,MQL5 云网络的每个节点都都向可用代理分配任务(多个单运行)。优化仅耗时 26 秒,实现高达 147 (!) 倍的加速。交易员可能需要在一段合理的时间内运行数十万次优化计算。利用 MetaTrader 5 测试仪,您在 MQL5 云网络中的计算仅需一个小时,而如果没有网络,则您要花费几天的时间。现在,只需一次点击,您就可以调用成千上万个核心来处理一个任务。而且,它对所有人都开放!那么它是如何运作的呢?

MQL5 云网络囊括成千上万部计算机

MQL5由一个个节点(专用服务器)构成,测试代理都是连接到它们执行任务。这些节点都是管理器(池程序),因它们会根据地理位置将全世界的代理组合成一个更大的池。闲置模式下,每个代理都会发送信息,通知其已做好执行任务的准备。此类信息的间隔取决于MQL5云网络的当前负载。

同时,此网络的每个节点也都被视为访问MQL5云网络的一个点;利用MQL5.com帐户详情连往它们的一个终端。MQL5 云网络服务器列表以及通过它们可获得的云代理数量,都可以在该终端的 Tester (测试仪)窗口 “Agents” 选项卡中找到。

处于闲置模式、未忙于执行其由某台本地计算机或本地网络接收的本地任务的代理免费使用。如果代理正忙,则其不会尝试从MQL5云网络获取任务。完成本地计算之后几分钟内,代理就会与最近的MQL5云网络取得联系并提供其服务。因此,您的测试代理只会在您不需要它们的时候才会在网络上工作。当然,代理会遵照设定的时间安排在网络上工作。

MetaTrader 5 Agents Manager(代理管理器)易于安装且所需设置极少,正因如此,才能实现网络于任何指定时间内都有成千上万的可用测试代理。MQL5 云网络的综合统计和已完成的任务,可于https://cloud.mql5.com项目主页上获取。

利用 MQL5 云网络代理运行分布式计算

与常规优化类似,您需要设置所有的测试选项和“EA 交易”的输入参数。在此之前,不要忘记在终端设置中指定您的 MQL5.社区登录并允许使用 MQL5 云网络。下图显示的是四个必需步骤。

利用 MQL5 云网络执行优化

点击 “Start” 按钮,则优化过程开始。终端会为测试代理准备一个任务,其中包括:

  • 一份扩展名为 EX5 的“EA 交易”编译文件。
  • 利用指令 #property tester_indicator#property tester_library (云中明确不允许 DLL)启用的指标与 EX5 库
  • 利用指令 #property tester_file启用的测试所需数据文件
  • 测试/优化条件(金融工具的名称、测试间隔、模拟模式等)
  • 交易环境(交易品种属性、交易条件等)
  • 构成整组所需计算次数的“EA 交易”参数的设定,即任务

MetaTrader 5 终端会与 MQL5 云网络节点通信,并赋予每个节点一个独立的任务包以执行特定的计算次数。每个节点实际上都是一个代理服务器,因为它会接收一个任务和一个计算次数包,然后再将这些任务分配给与其连接的各个代理。在这种情况下,“EA 交易”、指标、库和数据文件均不存储于 MQL5 云网络的硬盘驱动器中。

而且,出于机密性考虑,EX5 文件也不存储于云代理的硬盘驱动器中。数据文件被保存于磁盘上,但优化过后即删除数据文件。

此即您的客户端与 MQL5 云网络间通信的全部流程 – 实际上也就是向网络发送任务包并等待结果。

云中同步以及向代理分发的历史

MQL5 云网络的每个节点都会保存所需交易品种的历史,并根据要求将其发送到与 MQL5 连接的代理。如果代理 ABC 处没有交易品种 XYZ 的历史,那么节点就会自动从您的终端下载必要的历史数据。因此,您的终端应做好提供此类来历的准备。

我们建议您在电脑上就某项策略执行一次单项测试,然后再将其发送给 MQL5 云网络。此方案会自动提供某个交易服务器所有必需历史的下载和同步。

一般来说,一部现代计算机上会安装 4 到 8 个代理,而历史数据则存储于 MQL5 策略测试仪代理安装目录下的一个单独文件夹内。通过一个 MQL5 策略测试仪代理管理器安装的所有的云代理,都从此文件夹接收历史数据。如果安装了 8 个代理,而且全都可供 MQL5 云网络使用,仅需一次即可完成所需历史的下载。如此则允许您节约流量和硬盘空间。而且,还方便在云代理与分布式计算网络的节点间执行同步。

因此,在给定的时间间隔内根据给定的交易品种对交易策略执行优化的所有代理,都会自动接收到相同的同步历史和市场环境。

预热

本地计算机优化如何执行?如果您有 8 个核心,则您通常默认可用 8 个本地代理。点击 “Start” 时,任务即被分配到各个本地代理,下载所需内容(如有必要),过程开始。在这种情况下,优化几乎是即时开始的。但是如果您将任务分配给MQL5云网络,则流程会稍有不同。

云代理并不是永久性地与网络管理器连接,这种做法在技术上未必合理,而且成本高昂(不管是何理由)。反之,代理会定期访问 MQL5 云网络服务器,看看是否有其新任务。这一动作的频率多到足够确保所需数量代理的快速调动,而且又少到此类信息不足以令网络流量过载。因此在您执行优化时,您可以看到连接到您任务执行的代理数量的增长。此为云代理接往 MQL5 云网络并接收特定计算次数任务的实时进程。

如果没有任务,则代理很少会联系管理器。但是如果出现了数千次(数万次)计算的任务,则又是另一种情况。我们可以说 MQL5 云网络的活动量会增长,而在完成任务后,新任务的代理应用数量又会减少。而且,比如说完成了一个来自欧洲的任务之后,又有来自亚洲的其它任务,则该网络会做好快速启动的准备。您可以将网络的这种行为称为“预热”。

在 MQL5 云网络中执行计算

由此,MQL5云网络再次做好接受新任务、并在可能最短的时间内执行的准备。

使用 MQL5 云网络!

每过去一年,“时间就是金钱”这句话都会成为更被热议的话题,我们不能承受重要运算几十小时甚或几天的等候。撰写本文之际,MQL5云网络已经实现了100倍的计算增长。随其进一步的增长,时间的节约量还会增长到1000倍甚至更多。此外,分布式计算网络允许您处理的不单单是策略优化任务。

您可以在MQL5中编写一个实施大量数学运算并调用大量CPU资源的程序。MQL5语言(MetaTrader 5 终端程序即用其编写)非常接近 C++,而且允许您轻松地将编写的算法转换成其它高阶语言。

MetaTrader 5 终端测试仪有一项重要功能,那就是让那些旨在利用大型输入变量集搜寻解决方案的超难数学任务,在各个测试代理中轻松并行。而且无需您为此撰写任何特定代码 – 只需连接到分布式计算的MQL5云网络!

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
原文地址: https://www.mql5.com/ru/articles/341

 

 


MyFxtop迈投-靠谱的外汇跟单社区,免费跟随高手做交易!

 

免责声明:本文系转载自网络,如有侵犯,请联系我们立即删除,另:本文仅代表作者个人观点,与迈投财经无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。

風險提示

MyFxtops邁投所列信息僅供參考,不構成投資建議,也不代表任何形式的推薦或者誘導行為。MyFxtops邁投非外匯經紀商,不接觸妳的任何資金。 MYFXTOPS不保證客戶盈利,不承擔任何責任。從事外彙和差價合約等金融產品的槓桿交易具有高風險,損失有可能超過本金,請量力而行,入市前需充分了解潛在的風險。過去的交易成績並不代表以後的交易成績。依據各地區法律法規,MyFxtops邁投不向中國大陸、美國、加拿大、朝鮮居民提供服務。

邁投公眾號

聯繫我們

客服QQ:981617007
Email: service@myfxtop.com

MyFxtops 邁投