第一章 MQL5 和开发环境简介
在 MetaTrader 5 中,MQL5 升级后最重要的变化之一是它支持面向对象编程 (OOP) 的概念。在 MQL4(MetaTrader 4 的语言)刚出现时,人们通常将其与 C 编程语言相提并论,而现在将 MQL5 比作 C++ 则更合理。公平地说,所有最初只在 MQL5 中可用的 OOP 工具如今都已被移植到了 MQL4 中,这一点不容忽视。然而,对编程几乎一无所知的用户仍然认为 OOP 太复杂了。
从某种意义上说,本书的目标就是化繁为简。本书并非是要取代终端自带的《MQL5 语言参考》(也可以在 mql5.com 网站上获得),而是作为补充。
在本书中,我们将采取循序渐进的方式,向您介绍 MQL5 中的所有组件和编程技术,确保每个知识模块都清晰明了,就像任何强大的工具一样,只有正确合理地使用,OOP 技术会逐渐释放其特别显著的潜力,因此,MQL 程序的开发者将能够选择适合于特定任务的优选编程风格,即不仅是面向对象的,也包括“旧式”程序风格,以及将其组合使用。
交易终端的用户可以简单分为“程序员”(至少已经有一种语言编程经验)和“非程序员”(纯交易员,只是对使用 MQL5 的终端的定制能力感兴趣)。前者可以选择跳过本书说明语言基本概念的第一章和第二章,立即开始学习 MetaTrader 5 中嵌入的特定 API(应用程序编程接口)。对于后者,建议采用渐进式的阅读方法。
在“程序员”这一类别中,懂 C++ 的人最具优势,因为 MQL5 和 C++ 是相似的。然而,这一“优点”也有它不利的一面。问题是 MQL5 与 C++ 并不完全相同(尤其是与最近的标准相比)。因此,凭借“有利方面”尝试编写某种结构时常常因编译器的意外错误而中断。考虑到语言的特定元素,我们将尽力指出这些差异。
技术分析、执行交易指令或与外部数据源集成,终端用户可以通过用户界面和 MQL5 的嵌入式软件工具使用所有这些功能。
由于 MQL5 程序必须执行不同的功能,因此 MetaTrader 5 中支持一些专门的程序类型。这是许多软件系统中的标准技术。例如,在 Windows 中,除了常见的窗口程序,还有命令行驱动的程序和服务。
MQL5 中提供了以下程序类型:
- 指标 - 旨在以图形方式显示由给定公式计算的数据数组的程序,通常基于一系列报价;
- EA 交易 - 用于完全或部分自动化执行交易的程序;
- 脚本 - 旨在一次执行一个操作的程序;
- 服务 - 用于执行永久后台操作的程序。
我们将在下文详细讨论每种类型的用途和特性。需要注意的是,它们都是在 MQL5 中创建的,并且有很多共性。所以我们将从共性特征开始学习,逐渐了解每种类型的特异性。
MetaTrader 的基本技术特征在于在客户终端中施加整个控制,而在客户终端中发起的命令被发送到服务器。换句话说,基于 MQL 的应用程序只能在客户终端内工作,它们中的大多数需要与服务器实时连接才能正常工作。服务器上没有安装任何应用程序。服务器只处理从客户终端收到的订单,并返回交易环境的变化。这些变化也适用于 MQL5 程序。
大多数类型的 MQL5 程序都是在图表环境中执行的,也就是说,要启动一个程序,您应该将它拖放到所需的图表上。只有一种特殊类型例外,即服务:服务是在后台运行的,不会附加到图表。
我们回想一下,所有 MQL5 程序都在 MetaTrader 5 的工作文件夹中,在名为 /MQL5/<type> 的嵌套文件夹下,其中 <type> 分别是:
- 指标
- EA 交易
- 脚本
- 服务
基于 MetaTrader 5 安装方式,工作文件夹的路径可能不同(特别是在 Windows 中以用户权限受限方式安装、正常模式或便携模式下)。例如,它可以是:
C:/Program Files/MetaTrader 5/ |
或者
C:/Users/<username>/AppData/Roaming/MetaQuotes/Terminal/<instance_id>/ |
用户可以通过执行文件 -> 打开数据目录命令(终端和编辑器中都可以找到该命令)来获得该文件夹的确切位置。此外,创建一个新程序时,由于使用了编辑器中嵌入的 MQL 向导,您无需考虑查找正确的文件夹。通过文件 -> 新建命令即可调用向导,并允许选择所需的 MQL5 程序类型。完成母版后,包含源代码模板的相关文本文件将在必要时自动创建,然后打开进行编辑。
在 MQL5 文件夹中,除了上述文件夹之外,还有其他嵌套文件夹,它们也与 MQL5 编程直接相关,我们将在后面提到。
本书中的例子也可以在 公共项目 \MQL5\Shared Projects\MQL5Book 中找到。 |