English Русский Español Deutsch 日本語 Português
MT4TerminalSync - MetaTrader 4 终端的同步系统

MT4TerminalSync - MetaTrader 4 终端的同步系统

MetaTrader 4示例 | 29 二月 2016, 12:05
3 042 0
Valery V. Chesnokov
Valery V. Chesnokov

简介

很多交易者和交易系统开发人员有多份用于技术目的的 MetaTrader 4 终端。在这些终端上,将打开不同的图表和帐户,测试不同的策略。与此同时,还会不时发布新的终端版本,出现新的指标和 Expert Advisor,编写其他 MQL 代码。

要保持正常运行,我们迟早会面临已使用终端副本的同步问题。为此,我们需要一个能够解决此问题的技术工具。在本文中,我们将了解创建此工具的过程,并最终获得一个可供使用的工具。

本文的目标受众是谁?

本文分析用于同步多个终端副本的程序系统示例的创建过程。

因此,本文可能会对以下两类读者产生兴趣:
1.用户交易者可使用本文的现成程序系统。
2.超越 MQL 代码的程序系统的专业开发人员可能会分析本系统以作为个人学习用途,而且可能会提出积极的意见。

终端同步系统的必要性

假设,你有八个终端副本。你下载了一个新发布的版本?怎么下载?你会依次单击八次下载的文件 https://www.metaquotes.net/files/mt4setup.exe 并指示包含这些副本的文件夹吗?这并不困难。

假设,你开发了三个新的指标、两个 Expert Advisor 和一个库。现在,你需要在八个终端副本上用不同的情境对它们进行测试。这意味着,你需要更新 MQL 源文件和 ex4 二进制文件。你已经在终端的一个源副本中开发了上面枚举的所有项目。现在,需要将它们复制到其他副本中。你现在逐一打开源终端的子文件夹: experts,然后是 experts\indicators 和 experts\libraries。接着在 Windows Explorer 中,在每个子文件夹中复制需要的文件,然后在每个更新的终端副本中打开,复制相同的文件夹并将文件复制到其中。然后,为更新的终端的每个源子文件夹和每个模拟子文件夹重复上述双循环。

这种情况你熟悉吗?如果你经常这样做,你很可能想简化这项工作。为此,我们需要一个能够自动执行这项任务的工具。换言之,最好是通过单击一个按钮来启动对终端的更新。拥有为此过程设置参数的功能非常有帮助,例如设置访问源控制终端、更新终端、为应更新的文件设置过滤器等各种方式。例如,如果终端文件夹的路径出现错误,同步系统应向我们显示。

这意味着,我们的工具必须灵活、高效。让我们来尝试创建一个这样的工具。

技术条件

本文围绕“使用操作系统功能和其他程序开发方法扩大 MQL4 程序功能”这一主题展开。这就是为什么使用的方法超越了 MetaTrader 4 终端和 MQL 语言的原因。

本文创建和介绍的终端副本同步系统需要以下程序功能才能运行:
1.操作系统 - Microsoft Windows 2000 SP4 或更高版本:Microsoft Windows 2000、Windows XP、Windows Server 2003、Windows Server 2003 R2、Windows Vista。
2.平台 Microsoft .NET Framework 2.0。可从 Microsoft 网站下载,网址为:
2.1.http://www.microsoft.com/downloads/details.aspx?displaylang=ru&FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5 - 适用于 x86 处理器的俄语版 (RUS),文件 dotnetfx.exe,大小 22 Mb。
2.2.http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5 - 适用于 x86 处理器的英语版 (EN),文件 dotnetfx.exe,大小 22 Mb。
2.3.http://www.microsoft.com/downloads/details.aspx?familyid=B44A0000-ACF8-4FA1-AFFB-40E78D788B00&displaylang=en - 适用于 x64 处理器的英语版 (EN), 文件 NetFx64.exe,大小 45 Mb。
3.桌面单用户数据库服务器 Microsoft SQL Server 2005 Compact Edition。此修订版的 SQL 服务器包括八个 dll 文件。可从以下网址下载:http://www.microsoft.com/downloads/details.aspx?FamilyId=%2085E0C3CE-3FA1-453A-8CE9-AF6CA20946C3&displaylang=en - SQLServerCE31-EN.msi,文件大小 1.7 Mb。更多信息可在 MSDN 文章“在台式和平板电脑(SQL Server Compact Edition)上安装”中找到,网址为:http://technet.microsoft.com/en-us/library/bb190958.aspx (EN)。

下面是有关开发人员的其他信息。

如果你要使用指示的技术创建类似系统,你将需要 Microsoft Visual Studio 2005,例如,一个适用于语言 C# 或 VB.NET的 Visual Studio 2005 Express Editions 免费修订版。你可以下载 Microsoft® Visual Studio® 2005 Express Editions Service Pack 1, 网址为:/go?link=http://www.microsoft.com/en-us/download/details.aspx?id=804。你也可以订购试用版的 Visual Studio 2005,网址为:http://www.microsoft.com/emea/msdn/visualstudio/ruru/getthetrials/。或者,你可以使用更新版本的 Visual Studio“Orcas”,在撰写本文时是 Beta 1 版。其初始名称 Orcas 可能出现在 Visual Studio 2008 中。你可以在以下网址中找到有关 Visual Studio 及其新版的最新信息:http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx

如果你已经有两个必要的文件(x86 Windows 版的 dotnetfx.exe 和 SQLServerCE31-EN. msi),则不超过两到三分钟时间即可安装好 Microsoft .NET 2.0 和 SQL Compact Edition。只需下载此文件,单击“下一步”和“完成”。

系统组件

除了枚举的外部软件以外,同步系统本身包含很多文件,如下所述。

在这里,.exe 和 .dll 文件是二进制可执行代码,文件 config.xml 是启动 shell 的设置文件(下文详细介绍),文件 MT4TerminalSync. sdf 是系统数据库,文件 Log.txt 载有系统操作中的所有错误记录。

注意:由于网络程序开发的理念,尤其是在终端服务器上运行的程序,系统可能没有权限记录其开始执行的文件夹。因此,所有设置文件、错误日志文件和单独指向每个用户的其他文件必须保存在有关用户配置文件的 Windows 文件夹中。然而,此系统实际上是全值网络系统的一个示例和架构,在此系统中,所有指向此系统的文件都将保存在同一个文件夹中,以便于简化个人用户使用。

你不需要安装同步系统。你只需要安装枚举的外部程序,然后将系统文件复制到本地硬盘的文件夹中。

开发系统的理念。

有不同的方式来创建此类系统。每个开发人员都可以找到其自己的解决方案来完成此任务。提出的解决方案的优点是至少存在并且可行的。

脚本语言也可满足此解决方案的所有需求,例如 VBS 文件、xcopy 等命令。这看起来会比给定系统更简单。然而,我认为,此类方法有以下几个缺点:

1.你需要直接将系统设置(源/目标终端路径、文件扩展名)包括在源脚本文本中。或者,你需要编写你自己的 .ini 文件分析程序(分析程序)。

2.你几乎无法控制文件复制错误。使用类似 xcopy 的命令查看是否有错误以及将错误收集到单个表格以便于查看,这两个操作并不十分简单。

因此,我决定开发一个编译系统,将所有设置存储在数据库中,以最大程度提高扩展的灵活性。对于系统创建,我更喜欢使用熟悉的 Microsoft 开发技术。在这些规则内,选择以下工具。

系统数据库的描述

我们可以使用不同的变量来保存系统参数(路径、文件掩码等):将所有内容写入程序代码中,使用文本 ini 文件、XML 文件或 DBMS。我选择最后一个变量来使用 DBMS 的功能,而非创建自己的方法。

选择哪个 DBMS?有两个相关条件:
1.系统很可能被用作为公司工具,即它将成为网络多用户系统。这意味着我们可以将数据库用作为 Microsoft Access 文件或 SQL 服务器。然而,并非任何用户都可安装 Access,因为它包括在版本 Microsoft Office Professional Edition 中。
2.此系统还可供个人用户使用。这意味着,应减小系统的大小,同时应简化展开过程。正是基于这点,SQL 服务器有免费修订版:Express Edition 和 Compact Edition。为了实现最小化,我选择了修订版 SQL Server 2005 Compact Edition。此安装程序是一个 1.7 Mb 的文件。

修订版的服务器 SQL 2005 Compact Edition 能够同时满足这两个条件——它是桌面紧凑版 DBMS,便于下载,但在迁移到企业网络版的同步系统时会显示所有必要的选项。你只需在更强大的 SQL server 2005 修订版上重新创建数据库——从 Express Edition 开始的任何版本。

我们选择了一个数据库。现在,我们要存储哪些内容?

注意:为了正确理解下一章节,你需要了解有关 SQL——结构化查询语言的知识,这是针对数据库的结构化请求的一种语言。Wikipedia 中有关于该语言的详细信息,网址为:https://en.wikipedia.org/wiki/SQL

下面是使用的 SQL 数据库的表格屏幕截图。

这些表格存储了有关以下系统参数的信息:
1.表 CopyExtentions - 复制文件的掩码,很可能包含相对路径。示例:*.ini, experts\*.mq?, experts\indicators\*.ex4。
2.表 DestiantionTerminal - 终端进行更新的绝对路径。将从模板——源终端副本更新这些终端副本。对于每个用户配置文件(见表 UserProfile),都有一定数量的终端。
3.表 SourceTerminal——源终端副本的绝对路径。此源终端是用于从表 DestiantionTerminal 更新终端副本的校验模板。每个用户都有其自己的源终端。
4.表 UserProfile——系统用户列表(用户配置文件)。这是用于设计多用户系统的元素,每个用户都在此元素中存储终端路径的设置以及自己的配置文件的链接。个人用户可在不同的配置文件中存储按逻辑分组的终端集合。例如,你可以将它们分为两组——一组经常进行更新,一组很少进行更新。在组之间切换,你可以选择应更新哪个组。可阻止不必要的文件。如果系统仅包含一个解除阻止的配置文件,在客户端系统部分,会自动选择此文件作为活动文件。

上述图片没有显示数据库表格的详细方案。因此,让我们再来看一些包括字段类型的 SQL 表格的图片。遗憾的是,Compact Editor 没有显示数据库图表的选项,因此将单独显示每个表格。

下面是表 CopyExtentions 的方案图:

下面是表 DestinationTerminal 的方案图:

下面是表 SourceTerminal 的方案图:

下面是表 UserProfile 的方案图:

上述图片显示了所有数据库表格的详细方案图。

系统的客户端部分的开发理念

本部分包含技术细节,专业系统开发人员很可能比普通用户更对此感兴趣。

客户端部分实际上是 Windows Forms 类型的 .NET 应用程序,即所谓的 fat exe 客户端。你不需要安装客户端,只需将其所有文件复制到本地硬盘的一个文件夹中。

下面是关于我开发此类系统的理论的简短描述。
我相信应根据模块原则创建此类系统。这么做至少有两个优点:
1.你获得了一个包括所有必要功能的最终应用程序,这些功能像砌砖一样将模块组合而成。用户无需启动数十个不同的程序,而始终只需启动一个包含所有必要功能的程序。可根据仓位为每个系统用户单独调整模块列表。
2.模块开发原则允许调整系统开发过程,换言之,在开发工作量增加时吸引更多开发人员。

那么,我到底打算怎么做?我创建了一个用于启动 .NET 模块的框架 - Windows Forms 类的应用程序 shell,用于下载 .NET 组件和激活 .NET 组件 (User Control),即 System.Windows.Forms.UserControl,在技术角度上看属于根据标准 .NET 1.1 或 2.0 类开发的任何类别。

此 shell 由与其在同一文件夹中的 XML 文件 config.xml 的内容运行。下面显示了此 shell。

我认为,它的优点是有许多编程语言和开发环境 (IDE) 可供选择。实际上,它们是适用于版本 .NET Framework 1.1 和 2.0 的任何兼容 .NET 的 IDE,例如 NET 1.1 下的 Borland Developer Studio 2006 (BDS)、NET 1.1 下的 Microsoft Visual Studio .NET 2003、.NET 2.0 下的 Microsoft Visual Studio 2005、.NET 2.0 下的 Visual Studio Orcas。

从标准编程语言角度,它有 C# 和 VB.NET, 但是,你可以使用任何可创建 Windows Control Library 类型的项目并在其中创建 User Control 的兼容 CLR 的语言。

下面是一个在 Visual Studio .NET 2003 中开发并被加载到 shell 的组件操作示例。

还有一个在 Visual Studio Orcas March 2007 CTP 中创建的组件的示例。

我们分析了开发客户端部分的方法。现在,让我们来转到其创建部分。

系统的客户端部分

使用 Microsoft Visual Studio 2005 开发同步系统组件。
创建一个 Windows Control Library 类型的项目。

所有系统组件(用户控件)将位于一个项目中。物理成果将是项目文件夹中的文件 MT4TSyncUCLib.dll,它包含组件的二进制代码。让我们将适当的程序组件填充到项目中。

因而,我们将获得图片中的多个文件。

有项目资源以及存储在 SQL 数据库中的每个系统实体的组件:源终端、大量目标终端、大量复制文件掩码和执行同步的组件。项目还拥有每个枚举实体的类,以用于数据传递以及它们在标准组件 PropertyGrid(包含属性的表)中的编辑过程。

注意:本文并不详细讲述程序系统的开发过程。这就是你将看到有关客户端部分的检查点的说明的原因 - 系统已包括现成的模块。

下面是 XML 文件 config.xml 的配置,将介绍系统的所有可见组件。

如你在文件 config.xml 内容中所见,我将用户菜单分成了两个部分:同步启动和系统设置的管理部分。这是一个相对划分,用户可通过编辑 XML 文本进行更改,但不会影响关键信息。进入 <items> 部分的标记 <menu>,然后使用属性 type="folder"type="control" 更改标记 <item> 的仓位(最终自定义组件)。
系统包括菜单的两个用户配置文件 - 一个包含所有组件的完整配置文件,名为“管理程序(全部)”;一个仅包含启动组件的简单配置文件,名为“同步启动”。

现在,是时候显示系统本身。
以下图片显示了菜单中自下而上的所有可见系统组件。

在系统启动时,选择菜单配置文件:完整或简化的配置文件。

下面是用于管理用户的组件。

用户配置文件阻止功能用于禁用不必要的配置文件,而不会删除它们。保留一个活动的配置文件,你可以节约选择时间,因为系统本身会选择剩余的配置文件。当然,你不需要阻止所有用户配置文件。系统不允许执行所需操作或者在调用组件过程中显示错误,需要选择一个活动的配置文件。

下面是用于编辑复制文件的掩码的组件。

我认为,复制文件列表应包含以下掩码:

在这里,请注意我创建的用于简化系统设置过程的逻辑字段包括子文件夹实际上,例如,文件 *.mq4 和 *.ex4 位于终端的不同子文件夹中 - experts, experts\indicators 等。为了不要添加每个子文件夹,你可以从终端文件夹的根级指示一个记录,即没有相对路径而在子文件夹中启用搜索功能。然后,系统将检查源终端的所有子文件夹,并将具有相同掩码的文件复制到合适的目标子文件夹中。

这里还有一个秘密。查看掩码。此终端包括扩展名为 mq4、mqh、mqt 的文件:为了不指示所有项,我们将指示一个包含掩码 *.mq? 的记录,它包括前面三种文件类型 - '?' 替代掩码中的一个交易品种,* 替代不限数量的交易品种。同样,掩码 *.ex? 也是如此- 它是文件 *.exe(终端的可执行文件)和 *.ex4 - 二进制 MQL 文件的掩码。这样很方便,不是吗?

下面是同步的目标终端的管理组件。

在右侧字段边框上选择终端路径时,你将看到一个带三个点的按钮,单击此按钮可打开一个标准 Windows 窗口,以从磁盘选择文件(打开对话框)。你可在需要的文件夹中指明文件 terminal.exe

此源终端组件很大程度类似于选择目标终端。

你可能想知道,为什么我在数据库中将源终端和目标终端的表格分开来?请注意,由于目标终端与源终端不同,你可以指示更多的功能。例如,对于它们,数据库中有一个名为更新后启动的字段。你可以在目标终端组件中看到它。系统不对它进行处理,但为了创建它,你需要编写两行代码——第一行创建有关文件 terminal.exe 的完整路径的进程,第二行用于启动它。

由于使用此类扩展名,系统可获得更多的功能。

最后是同步启动的最后也是最重要的一个组件,系统就是为该组件而创建的。

所有上述组件都用于系统参数设置,以最大程度提高其灵活性。在此组件中,单击按钮启动启动同步进程,即复制所需的文件。在分组框日志操作中,你将看到执行的同步的检查点,即文件夹路径和已复制文件数量。在分组框日志操作中,你将看到执行的同步的检查点,即文件夹路径和已复制文件数量。

如果复制进程中出现错误,将在用红色标记的错误日志组中显示这些错误。它们也将被记录到系统文件夹中的文件 Log.txt 中。此类方法用于将通知消息与重要的错误消息区分开来。例如,错误原因可能是源或目标终端的路径错误(路径已输入数据库中,但文件夹已从硬盘上删除),或者在阻止甚至没有读取权限的独占性文件时出错。

对于此阻止,可做如下选择——挑选出复制到一个独立流程,或者将其保留在系统进程的主要流程的范围内。第一个选择会使系统对复制进程中的用户操作做出更好的响应,即没有系统“失效”。然而,此流程的优先级较低,复制速度很可能会较慢。因此,我决定将复制操作保留在当前主要流程中,使其成为组件中定时器上的处理程序。因此,系统可能仅在处理定时器事件时响应鼠标点击。然而,你可以通过单击 停止来停止同步进程——系统将在鼠标移至目标终端列表时处理单击操作。

总结

我们成功地完成了此任务并获得了一个技术工具——带参数设置的同步系统、可能错误的记录和显示等等。我从终端根文件夹的文件 INSTALL.LOG[CopyFiles] 部分中获取了已复制文件的掩码。在操作期间,你很可能会发现更多应进行同步的文件,这些文件使用了其他扩展名。如果你在本文的评论部分分享你的观点,会给其他用户带来很大帮助,引起他们的极大兴趣。

本文附有现成的二进制项目和系统模块示例代码。

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

附加的文件 |
ctrlSync_cs.txt (11.84 KB)
MT4TerminalSync.zip (56.85 KB)
TestProject.zip (42.87 KB)
逐步说明如何通过 CSV 文件组织 MetaTrader 4 与 Matlab 之间的数据数组交换。 逐步说明如何通过 CSV 文件组织 MetaTrader 4 与 Matlab 之间的数据数组交换。
逐步说明如何通过 CSV 文件组织 MetaTrader 4 与 Matlab 之间的数据数组交换。
测试可视化:帐户状态图表 测试可视化:帐户状态图表
利用图表测试和显示余额的过程—现在可以始终看见所有必要信息了!
如何缩短 EA 代码以让程序更加简单同时减少错误 如何缩短 EA 代码以让程序更加简单同时减少错误
使用本文介绍的简单概念,负责在 MQL4 中开发自动交易系统的人员能够通过缩短代码来简化现有交易系统以及缩短开发新系统所需的时间。
非标准自动交易 非标准自动交易
不进行深入市场分析便使用 MT4 平台成功且舒适地交易&mdash;&mdash;这可能吗?这种交易可以在现实中实施吗?我想,是的。特别对于自动交易,更是如此!