English Русский Español Deutsch 日本語 Português
MetaTrader 4 Build 600及以上的数据结构 -  MQL4文章

MetaTrader 4 Build 600及以上的数据结构 - MQL4文章

MetaTrader 4示例 | 25 二月 2014, 08:16
2 613 0
MetaQuotes
MetaQuotes

介绍

MetaTarder 4 build 600突出了新的结构和客户端文件的位置。现在,MQL4应用程序根据类型置于不同的目录中(EA交易,指标或脚本)。 在大多数情况下,程序端数据现在存储在不同于程序端安装位置的特殊的数据文件夹。在本文中,我们将详细描述数据如何传输,以及引入新存储系统的原因。


为什么实施新的数据存储系统

13年前发布的Microsoft Windows XP允许应用程序在其安装的位置写入它们自己的数据,即使其安装位置位于Program Files系统文件夹。用户只有拥有管理员权限才能向任何文件夹写入数据。

当在64-位系统工作时,会为32和64-位程序提供单独的安装目录:Program Files和Program Files (x86)。本文描述的操作特性适用于这两个目录。

从Windows Vista开始,Microsoft 对写入Program Files目录就采用了一个限制。如果用户账户控件 (UAC)系统已启用,那么程序不允许将它们的数据存储在Program Files文件夹中。所有数据都应该置于独立的用户目录中。这种限制的采用是为了保护用户免受恶意程序攻击和防止用户帐户下的应用程序改变或损坏另一个用户账户所需的相同程序的数据。自那时起,微软操作系统的安全要求已进一步收紧。特别是,从Windows 8开始,UAC系统无法禁用即使在其设置中选择了“从不通知”选项。

微软已经实施虚拟化进程为了在使用UAC时提供与旧应用程序的兼容性。如果某个程序试图将其数据保存到Program Files目录,数据实际上是(物理)保存到具有下面显示的一个单独的文件夹 - C:\Users\<user-name>\AppData\Local\VirtualStore\Program Files,而Windows资源管理器显示文件,好像它们被保存在安装目录一样。微软声称,提供这种模式只是为了兼容以及以后可以移除。

为了符合微软的建议,MetaTrader 4客户端的数据存储结构已经从build 600开始改变。现在,程序端也将其数据存储在用户目录。


用户数据目录

在新版本中,使用MetaTrader 4客户端副本工作的某个用户的所有数据都存储在一个叫做程序端数据文件夹的特殊的地方。此文件夹可沿着以下路径在系统盘(安装Windows操作系统的磁盘)上找到

C:\Users\User_account_name\AppData\Roaming\MetaQuotes\Terminal\Instance_id
其中:
  • C:- 系统盘的名称;
  • User_account_name - 在Windows上工作的用户帐户;
  • Instance_id - 使用MetaTrader 4程序端副本工作的所有用户的数据存储的文件夹的唯一名称。唯一名称由16个字符组成。这个名称是基于程序端安装目录的路径生成的,因为程序端安装目录的路径不能明确地用作文件夹名称。唯一名称的长度由程序端的多个副本可以在一台PC上安装的事实进行解释。

“打开数据文件夹”命令已被添加到程序端的文件菜单用来搜索和打开数据文件夹。


每个程序端数据文件夹的根目录还包含origin.txt文件,在这里您可以找到这些数据相关的程序端安装文件夹的路径。这使得用户能够匹配每个程序端的数据文件夹与某个程序端的安装目录,例如,在用户安装多个MetaTrader 4程序端副本时,以备不时之需。这种数据文件夹与安装文件夹分离的程序端工作类型是主要模式

为了更多的便利,每次启动程序端时,程序端日志中有包含数据文件夹的路径的条目。例如:

2014.02.10 12:48:28.477 数据文件夹: C:\Users\JohnSmith\AppData\Roaming\MetaQuotes\Terminal\9F86138A4E27C7218E9EC98A5F8D8CA1


当更新到MetaTrader 4 Build 600及以上时复制MQL4应用程序文件

当新更新的程序端启动后,它会检查数据文件夹是否存在。如果数据文件夹不存在,那么它会被创建。如果该文件夹不同于安装文件夹,程序端的常规数据(标准MQL4程序,历史数据,配置文件,模板等)会复制到其中。程序端操作过程中不会更改的文件(可执行文件,mql.dll编译器,声音文件等)都保留在了安装目录。在以下情况下程序端数据文件夹不同于安装文件夹:

  • UAC系统处于开启状态。当程序端被安装在便携设备上(外接硬盘,USB闪存驱动器等)的除外。
  • 当前PC用户将数据写入到安装目录权限有限。
  • 用户通过远程连接(RDP)工作。

如果上述条件没有得到满足,程序端数据会存储在安装目录。

那么,用户文件会移动到数据文件夹。在此阶段,确定程序端的用户数据存储的目录。如果数据已经被存储在程序端的安装文件夹,它们按如下方式被复制:

在安装目录下的源文件夹
内容 在程序端数据目录的目标文件夹
\experts
EA交易(自动交易)
注释: 只复制来自根目录 \experts的文件。不复制子目录,因为不能可靠地确定它们的内容
\MQL4\Experts
\experts\indicators 自定义指标
\MQL4\Indicators
\experts\scripts
脚本(图表上单次运行的MQL4应用程序) \MQL4\Scripts
experts\include 源代码MQH和MQ4 文件实施到其他程序 \MQL4\Include
experts\libraries MQ4 源代码格式的程序库和由此编译的EX4可执行文件。它们用于动态调用包含在其他MQL4程序的函数 \MQL4\Libraries
experts\files 特殊的“文件沙箱”。MQL4 应用程序只允许在该目录下执行文件操作。 \MQL4\Files
experts\logs
MQL4应用程序的日志文件
\MQL4\Logs
experts\presets
MQL4应用程序的预置文件
\MQL4\Presets
experts\images
资源中正在使用的图像文件 \MQL4\Images


接着,检查该客户端是否已经将数据存储在虚拟目录(上述的操作系统的虚拟存储)。如果程序端已经安装在Program Files目录而操作系统是Windows Vista或更高时,程序端数据最有可能存储在该目录中。如果找到该数据,根据上表复制。

该文件被复制并在迁移过程中不会移动。复制的文件从源文件夹不会被删除

在迁移过程中,包含复制文件的源路径和目标路径条目在程序端的日志中完成。若要查看所有日志,则打开程序端窗口的日志选项卡,并在上下文菜单中执行打开命令。包含程序端日志文件的文件夹将被打开。

如果对当前程序端的副本迁移已成功完成,那么它就不用在后续的MetaTrader 4程序端更新重复了。如果数据文件夹不同于安装文件夹,并且在迁移过程中自定义MQL4应用程序连同标准的文件已一起复制,那么会出现以下对话框:



便携模​​式

便携式启动模式提供用于便携式设备和非系统目录的程序端操作,以及在Windows XP中的工作。在此模式下启动时,程序端尝试在安装文件夹保存其数据。然而,使用便携模式并不能保证操作系统将允许在安装文件夹存储数据(例如,如果程序端是安装在Program Files目录而UAC系统已启用)。

便携模式工作应该满足下列情况:

安装目录
操作系统
要求
Program Files或其他系统目录(例如,Windows)
Windows XP
写入到安装文件夹的权限
另一个非系统目录
Windows XP
写入到安装文件夹的权限
外部硬盘驱动器,USB闪存驱动器等。 Windows XP 将始终以便携模式启动程序端。
Program Files或其他系统目录(例如,Windows) Windows Vista\Windows 7
作为管理员启动程序端并禁用UAC
另一个非系统目录 Windows Vista\Windows 7
写入到安装文件夹的权限
外部硬盘驱动器,USB闪存驱动器等。 Windows Vista\Windows 7 将始终以便携模式启动程序端。
Program Files或其他系统目录(例如,Windows)
Windows 8及以上
不可能使用便携模式,因为UAC系统不能被禁用
另一个非系统目录 Windows 8及以上
写入到安装文件夹的权限
外部硬盘驱动器,USB闪存驱动器等。 Windows 8及以上 将始终以便携模式启动程序端。


  • 如果您使用Windows Vista或以上系统,并且程序端被安装在Program Files,则不推荐您使用便携模式。此模式提供用于便携设备和Windows XP的程序端操作。
  • 如果您已经更新了程序端,所有的数据已被复制到一个单独的用户数据文件夹,也不推荐切换到便携模式。
  • 在复制用户数据文件夹中的数据后,您应该手动将数据复制到安装文件夹,以便使用便携模式。在便携模式启动程序端不会从数据文件夹复制到安装文件夹。

为了在便携模式下启动程序端,使用 "/portable"键。为了更加方便,您可以在桌面上创建一个相应名称的额外程序端启动快捷方式,并添加直接到快捷方式的密钥:



结论

MetaTrader 4程序端数据存储系统已经作出变化,以符合由微软开发的Windows操作系统的要求。这个数据存储系统本来已经在MetaTrader 5实施,目前许多交易者们在成功地使用它。

MetaTrader 4程序端数据被自动传送到用户目录。大多数情况下无需用户的其他操作。有关复制操作的所有数据信息显示在MetaTrader 4日志中。

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

新MQL4中的离线图表 新MQL4中的离线图表
更新的MQL4具有存储历史数据的新格式,并提供相应的MqlRates结构,便于时间,开盘,最低,最高,收盘和交易量值的存储。多年来,交易者们已经开发出收集和存储他们在HST文件中的数据,用于生成离线图表的MQL4应用。我们可以向您保证,所有先前编译的EX4文件在新的MetaTrader 4程序端将以之前相同的方式工作。
MQL5.community 最活跃成员获颁 iPhones 大奖! MQL5.community 最活跃成员获颁 iPhones 大奖!
继我们决定奖励最为出色的 MQL5.com 参与者后,我们已经选出了确定每一位参与者对本社区发展所做贡献的关键准则。结果我们选出了下述优胜者,他们在网站上发布的文章数量最多 - investeo (11 篇)和 victorg (10 篇);以及将其代码提交到代码库的 &ndash; GODZILLA (340 个程序)、Integer (61 个程序)和 abolk (21 个程序)。
通过辅助指标减少内存消耗 通过辅助指标减少内存消耗
如果一个指标使用很多其他指标的值进行计算,则它会消耗很多内存。本文介绍在使用辅助指标时,减少内存消耗的几种方法。保存的内存允许在客户端中增大同时使用的货币对、指标和策略的数量。这样提高了交易投资组合的可靠性。对您的计算机的技术资源进行这样的简单考量就可转换为任您处置的资金资源。
作为创建自动化交易系统新方法的自动机编程 作为创建自动化交易系统新方法的自动机编程
本文会让我们以一种全新的视角,来进行 MQL4 与 MQL5 中 EA、指标及脚本的开发。将来,此编程范式会逐渐变成 EA 实施领域所有交易者的基本标准。利用这种自动机编程范式,MQL5 和 MetaTrader 5 开发人员也就具备了某种程度上创建新语言 - MQL6 - 和新平台 - MetaTrader 6 的能力。