项目

通常,软件产品是在标准生命周期内开发的:

  • 收集和增加需求
  • 设计
  • 开发
  • 测试
  • 利用

由于功能的不断改进和扩展,通常有必要将源文件、资源和第三方库(这里我们不仅指二进制格式的库,更广义地说,是指任何一组文件,例如头文件)系统化。甚至单个程序被集成到一个体现应用理念的公共产品中。

项目的结构和生命周期

项目的结构和生命周期

例如,在开发交易机器人时,通常需要连接现成的或定制的指标,使用外部机器学习算法意味着编写用于导出报价数据的脚本和用于重新导入训练好的模型的脚本,与通过互联网进行数据交换相关的程序(例如,交易信号)可能需要 Web 服务器及其他编程语言的设置(至少调试和测试需要),即便并非为了部署公共服务。

几个相互关联的产品的整体复合体,连同它们的“依赖项”(这是指所使用的资源和库,它们被独立编写或取自第三方资源),形成了一个软件项目。

当一个程序超过一定规模时,如果没有专门的项目管理工具,那么就很难对其进行方便有效的开发。这一点也完全适用于基于 MQL5 的程序,因为许多交易者使用复杂的交易系统。

MetaEditor 支持类似于其他软件包的项目概念。目前,这一功能还处于开发的初期,到本书发行时,它可能会有所更改。

在 MQL5 中处理项目时,请记住平台中的术语“项目”是指两个不同的实体:

  • Mqproj 文件形式的本地项目
  • MQL5 云存储中的文件夹

本地项目允许你系统化并收集构建特定 MQL 程序所需的有关源代码、资源和设置的所有信息。此类项目只保存在你的计算机上,可以引用不同文件夹中的文件。

扩展名为 mqproj 的文件具有广泛使用的通用 JSON(JavaScript 对象表示法)文本格式。它方便、简单,非常适合说明任何主题领域的数据:所有信息都被分组到具有命名特性的对象或数组中,支持不同类型的值。这些特征使得 JSON 在概念上非常接近 OOP 语言;此外,它源自面向对象的 JavaScript,这一点很容易从名字中看出。

云存储的运行基于一个版本控制系统和一个名为 SVN (Subversion) 的软件。此处,项目是本地目录 MQL5/Shared Projects 中的顶层文件夹,另一个文件夹被分配到该文件夹,该文件夹具有相同的名称,但位于 MQL5 存储服务器上。在项目文件夹中,你可以组织子文件夹的层级。顾名思义,网络项目可以与其他开发人员共享,一般为公开项目(内容可以由在 mql5.com 上注册的任何人下载)。

该系统提供云中的文件夹映射和本地驱动器上的文件夹映射之间的按需同步(使用特殊的用户命令),反之亦然。既可以将其他人的项目更改“拉入”你的电脑,也可以将你的编辑“推送”到云端。完整的文件夹映射和选择性文件都可以同步,这当然包括 mq5 文件、mqh 头文件、多媒体、设置(set 文件)以及 mqproj 文件。有关云存储的更多信息,请参阅 MetaEditor 和 SVN 系统的文档。

值得注意的是,mqproj 文件的存在并不意味着在其基础上创建任何云项目,就像创建共享文件夹并不强制你使用 mqproj 项目一样。

在撰写本文时,mqproj 文件只能描述一个(而不是多个程序)的结构。然而,由于在开发复杂项目时这种需求很常见,所以将来可能会将这种功能添加到 MetaEditor 中。

在本章中,我们将描述创建和组织 mqproj 项目的主要函数,并给出一组例子。