处理本地项目的一般规则

可以使用 New project 或者 New project from source file 命令从 MetaEditor 主菜单或者 Navigator 上下文菜单创建本地项目(mqproj 文件)。在后一种情况下,必须首先在 Navigator 中选择文件,或者在 Open 对话框中选择文件。因此,指定的 mq5 文件将立即包含在项目中。提到的第一个命令启动 MQL 向导,你应该在其中选择程序类型或空项目选项(可以稍后再将源文件添加到项目中)。按照向导的常规步骤选择项目的 MQL 程序类型。

该项目包含几个逻辑部分,类似于包含所有组件的树(层次结构)。它们显示在 Navigator 的左面板中,在一个单独的 Project 选项卡中。

导航器和指标项目特性

导航器和指标项目特性

创建项目后,或稍后通过双击树形结构的根节点,将在窗口的右侧打开一个用于设置 MQL 程序特性的面板。特性集根据程序类型而异。

大多数特性对应于源代码中的 #property 指令。这些特性优先:如果在项目和源代码中都指定了它们,将使用项目中的值。

一些开发人员可能喜欢在对话框中交互地设置特性,而不是在源代码中硬编码。此外,你可以在不同的项目中使用同一个 mq5 文件,并使用不同的设置构建 MQL 程序的版本(无需更改源代码)。

有些特性仅在项目中可用。例如,这包括启用/禁用编译优化和内置的被零除检查。

在项目编译期间,系统自动分析依赖项,即包含的头文件、资源等。依赖关系出现在项目层次结构的不同分支中。特别是,使用尖括号 (<filename>) 的 #include 指令中包含的标准 MQL5/Include 文件夹中的头文件属于 Dependencies,而使用双引号包含的自定义头文件 (#include "filename") 属于 Headers 部分。

此外,用户可以将与完成的软件产品相关的文件添加到项目中,这些文件可能是其正常操作或演示所需要的(例如,具有经过训练的神经网络模型的文件),但不直接嵌入源代码中。出于这些目的,你可以使用 Settings and Files 分支。它的上下文菜单包含将单个文件或整个目录添加到项目中的命令。

特别是,我们将进一步考虑不仅包括客户端 MQL 程序,还包括服务器部分的项目示例。

New fileNew folder 将一个新元素添加到包含项目文件的文件夹中:这样的元素总是相对于项目本身进行搜索(在 mqproj 文件中,它们以 relative_to_project 特性(值为 true)进行标记,详见后文)。

Add an existing fileAdd an existing folder 命令从 MQL5 文件夹内的现有目录结构中选择一个或多个元素,mqproj 文件内的这些元素相对于根 MQL5 被引用(relative_to_project 特性为 false)。

relative_to_project 特性只是 MetaTrader 5 开发人员定义的少数几个以 JSON 格式表示项目的特性之一。注意,编辑项目(层次结构和特性)之后就会构建 JSON 格式的 mqproj 文件。

这是上图中项目文件的样子。

{
  "platform"    :"mt5",
  "program_type":"indicator",
  "copyright"   :"Copyright (c) 2015-2022, Marketeer",
  "link"        :"https:\/\/www.mql5.com\/en\/users\/marketeer",
  "version"     :"1.0",
  "description" :"Create 2 trend lines on highs and lows using Hough transform.",
  "optimize"    :"1",
  "fpzerocheck" :"1",
  "tester_no_cache":"0",
  "tester_everytick_calculate":"0",
  "unicode_character_set":"0",
  "static_libraries":"0",
  
  "indicator":
  {
    "window":"0"
  },
  
  "files":
  [
    {
      "path":"HoughChannel.mq5",
      "compile":true,
      "relative_to_project":true
    },
    {
      "path":"MQL5\\Include\\MQL5Book\\HoughTransform.mqh",
      "compile":false,
      "relative_to_project":false
    }
  ]
}

我们将在接下来的章节中更详细地讨论 JSON 格式的技术特性,因为我们将在我们的演示项目中应用它。

请务必注意,项目引用的所有文件并不都存储在 mqproj 文件中,因此,复制到新位置或仅将项目文件移动到另一台计算机不会恢复它。为了能够迁移一个项目,须为其建立一个共享项目,并将项目的所有内容上传到云中。但是,这可能需要重组本地文件系统结构,因为所有组件都必须在共享项目文件夹中,而 mqproj 格式没有这样的要求 。