English Русский Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
利用 MQL5 云网络加速计算

利用 MQL5 云网络加速计算

MetaTrader 5示例 | 16 九月 2013, 15:34
6 144 0
MetaQuotes
MetaQuotes

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 Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/341

MetaTrader 5 - 超乎您的想像! MetaTrader 5 - 超乎您的想像!
MetaTrader 5 客户端已经从无到有地发展起来,而且,当然也已经远远地超越了其前任版本。这种新型的交易平台为所有金融市场中的交易提供了无限的机遇。而且,其功能仍在持续扩展,以实现更多有用的功能与便利。现在,想要全部列出 MetaTrader 5 的繁多优势是非常难的。我们曾尝试专设一篇文章简要描述,结果让我们大吃一惊 - 这篇文章可远远谈不上简要!
EA 交易中采用OnTrade() 函数处理交易事件 EA 交易中采用OnTrade() 函数处理交易事件
MQL5提供了海量的创新,其中就包括使用各种类型的事件(计时器事件、交易事件、自定义事件等)。有了处理事件的能力,您就能够创建全新类型的自动与半自动交易程序。我们会在本文中一起学习交易事件,并针对OnTrade()函数编写一些处理交易事件的代码。
MetaTrader 5 带来新机遇 MetaTrader 5 带来新机遇
MetaTrader 4 在全世界范围内的交易者群体中收获了广泛的青睐,看起来似乎已经功德圆满了。利用其高处理速度、稳定性、编写指标的宽泛数组可能性、EA 交易、信息通达的交易系统,以及从 100 多家不同经纪人中进行挑选的能力 - 此终端于同类产品中鹤立鸡群、独树一帜。然而时间永不停歇,我们猛然间发现已经面临着选择 MetaTrade 4 还是 MetaTrade 5 的问题。那么,以有利于我们当前的观点来看,第 5 代终端有着哪些主要的不同呢?我们会在本文中给您讲述。
针对初学者的 MQL 5 中的自定义指标 针对初学者的 MQL 5 中的自定义指标
对于初学者而言,任何新鲜事物似乎都是复杂难懂的。我们熟知的事物对我们而言则极为简单明了。但我们不要忘记,任何事物,包括我们的母语,我们都是从头学起的。MQL5编程语言也是如此,它为开发人员开发自己的交易策略提供了广泛的可能性 - 您可以从基本概念和最简单的例子入手开始您的学习。本文将探讨技术指标与 MetaTrader 5 客户端的交互,并以简单自定义指标 SMA 作为示例。