
MQL5 简介(第 1 部分):算法交易新手指南
概述
如果没有任何编程经验,学习 MQL5 可能会很困难,但并非不可能。要理解 MQL5 这种为算法交易创建的专门语言,必须同时具备编程和金融市场专业知识。在我即将发表的文章中,我的目标是为没有编程背景但有兴趣学习 MQL5 的个人架起一座桥梁,文章内容将针对分解编程概念进行定制,让初学者也能学习 MQL5。
我将以初学者易于理解的方式,分解变量、数据类型、循环和条件语句等概念,为编程基础打下坚实的基础。文章将采用循序渐进的方法,指导读者了解 MQL5 的基础知识。我会从简单的脚本开始,逐步引入更复杂的主题,确保学习曲线平稳。
伴随着实例学习往往更有效,我将通过实际案例和场景来说明 MQL5 在算法交易中的应用。为了加深理解,文章将鼓励互动学习。我们将鼓励读者练习编写代码、使用示例进行实验,并以动手的方式应用所学知识。从本质上讲,这些文章旨在帮助没有编程背景的个人自信地驾驭 MQL5 的世界,在算法交易领域中培养循序渐进和愉快的学习体验。
在本文中,我们将讨论以下主题:
- 编程入门
- MQL5 程序类型
- MetaEditor 集成开发环境
- MQL5 语言基础
- 预定义变量
- 常用函数
- 控制流语句
- 数组和循环
- 创建 EA 交易
- 策略测试器
1. 编程入门
您有没有想过,您最喜欢的游戏和软件是如何制作出来的?您最喜欢的游戏角色是如何听从您的指令的?所有这些都是通过编程实现的,您可以把编程看作是为实现人机交流而编写的一套代码。
什么是编程语言?"编程"一词的意思是以设定规则或指令实现特定目标的过程。另一方面,"语言"一词是指一种交流系统,使个人能够向计算机表达想法、情感和思想。计算机不懂人类语言,我们该如何传达我们的指令集以实现我们的目标呢?编程语言是人类与计算机之间的中介,帮助人类与计算机进行交流。
1.1.编程语言的类型
正如人类有不同的语言,编程语言也有所不同,这些语言可分为两种:
- 高级编程语言:这些语言更接近人类语言,容易让人理解。例如 MQL4、MQL5、Pythons 和 JavaScript
- 低级编程语言:它更接近机器代码,对人类的编写和理解更具挑战性。这些语言包括汇编语言,与计算机硬件的关系更为密切。
根据用途分类
- 通用编程语言:设计这些语言的目的是为了实现广泛的功能。例如 Pythons、Java 和 C++。
- 特定领域语言:这些都是执行特定任务的编程语言。例如,MQL5 可用于开发交易机器人。
1.3.编程中的重要术语
- 集成开发环境(Integrated Development Environment,IDE):为程序员提供软件开发综合设施的软件应用程序。这是一个中央平台,开发人员可以在这里编写、测试、调试和部署自己的软件。例如 Visual Studio Code、Code Blocks 和 Meta Editor 5。随着本文的深入,我们将更多地关注 Meta Editor 5,它是 MQL5 中使用的集成开发环境。
- 调试器:该工具允许开发人员在运行时逐步查看代码、设置断点和检查变量,从而帮助查找和修复代码中的错误。
- 编译器/解释器:许多 IDE 都内置了直接在环境中编译和运行代码的工具。它们可以执行代码、检查错误并显示输出结果
- 数据类型:编程语言可以处理的不同类别的数据,例如整数、浮点数、字符串和布尔值。随着本文的深入,将有一节专门对此进行解释。
- 句法:定义编程语言中符号和文字组合的规则集。每种编程语言都有自己独特的语法,它们有助于代码的执行。
- 算法:为解决特定问题或执行任务而设计的一套定义明确的指令。
- 函数:执行特定任务的代码块。它可重复使用,并可在程序中多次调用。
- 库:预先写好的代码、函数和例程的集合,可用于执行特定任务,帮助程序员避免重复劳动。
- 条件语句:if-else 或 switch-case 等结构允许程序根据某些条件做出决定。这意味着,如果某个条件为真,计算机就应该执行某个代码。
- 循环:一种控制结构,用于重复运行代码块,直到满足特定条件。常见类型包括 for 循环、while 循环和 do-while 循环。例如,while 循环会在满足特定条件时持续执行代码块。
- 变量:用于存储数据的容器。它有一个名称,可以保存不同的值,这些值在程序执行过程中会发生变化。
请注意:随着本文的深入,我将进一步讨论其中的一些重要术语。
MQL5(MetaQuotes Language 5)是一种高级的特定领域编程语言。MQL5 是一种特定领域编程语言,因为它只执行与交易有关的任务。例如,自动交易策略、开发交易机器人和技术指标。
在 MQL5 编程语言中,可以开发各种类型的程序,以实现交易自动化、分析市场以及提升整体交易体验。以下是一些常见的 MQL5 程序类型:
- EA 交易(Expert Advisors,EA):EA 是用于自动执行交易策略的 MQL5 程序类型。它帮助根据预定义规则执行交易。EA 与图表绑定,在执行命令前会等待预定义事件的发生,无论需要多长时间。
- 脚本:脚本与 EA 有相似之处,但它们是不同的。脚本就像一次性程序,激活后会立即执行,如果符合预定义的条件,就会执行程序,如果不符合,就会处理其它情况。
- 自定义指标:与 EA 不同的是,自定义指标不能执行交易,它们是根据您预先定义的规则来指示市场上发生的特定事件的程序。
- 库:预先写好的代码、函数和例程的集合,可用于执行特定任务,帮助程序员避免重复劳动。
- 包含文件:在编程中,包含文件(include)是一个单独的文件,其中包含您希望在程序的多个部分重复使用的代码或声明。"#include" 指令用于在主程序文件中包含另一个文件的内容。包含文件通常用于组织和模块化代码,促进代码的重用和可维护性。
3.MetaEditor IDE
MetaEditor 5 是用于 MQL5 编程语言的 IDE。IDE 就像一个环境或页面,您可以在其中编写、调试、编译和测试代码。MetaEditor 5 在下载时始终与 MetaTrader 5 一起提供。
- 要访问 Meta Editor,请点击 MetaTrader 5 中的 IDE 按钮。
- 导航器部分 (Ctrl+D) 显示所有类型的 MQL5 程序。点击任何一个程序,就会显示你编写的所有代码。
- 要打开编写代码的页面,请单击新建 (Ctrl+N) 按钮,您需要选择要开发的 MQL5 程序类型,在选择要开发的程序类型后,点击 MQL 向导部分的 "下一步 >" 按钮。
- 将显示输入详细信息的页面,完成后单击 MQL 向导部分的 "完成 "按钮。
- 祝贺您!您只需拥有一个完全就绪的 MetaEditor,就可以开始编写代码了。
- 本部分显示您之前输入的详细信息。
-
OnStart() 是一个在脚本程序中调用的函数,它会确保大括号 {} 中的代码在脚本程序激活后立即执行一次。
-
让我们编写第一段代码,创建一个脚本,在激活时提示 "Hello MQL5"。
void OnStart() { Alert("Hello MQL5"); }
请注意:随着文章的深入,我们将进一步解释
- 编译器会检查代码是否正确,并就如何修改代码提出建议。完成代码编写后,单击 "编译" 按钮,检查 "描述" 部分是否有错误和警告。
请注意:如果代码有错误,在您更正之前,代码将无法运行。代码可以在不纠正警告的情况下运行,但最好解决警告的问题,以避免程序出现问题。
- 要测试程序,请点击播放按钮。
-
然后,程序将在 MetaTrader 5 中运行。
到目前为止,我们已经开始了一段简短而重要的旅程,了解了编程和 MetaEditor 环境的基础。我们为理解 MQL5 算法语言奠定了基础,并探索了 MetaEditor 提供的创意空间。MetaEditor 不仅仅是一个工具,它还是将想法转化为可执行策略的入口。请耐心等待,我们将为您揭开 MQL5 的神秘面纱,指导您掌握金融市场编程。你的算法交易之旅刚刚开始。
4.MQL5 语言基础
在开发 MQL5 程序之前,我们有必要了解组成程序的一些基本知识,例如数据类型、函数、变量、注释和 MQL5 句法。
4.1.句法
句法是指规定用特定语言编写的程序应如何组织结构的一系列规则。这就像编程语言的语法。正如人类语言有造句规则一样,编程语言也有创建正确和可理解代码的规则。
下面是句法的几个关键方面:
4.1.1.语句结束
MQL5 中的每条语句通常以分号(';')结束。这会通知编译器一条语句已经结束,下一条语句即将开始。
示例:
void OnStart() { Alert("Hello MQL5"); // the semicolon means the end of the code line }
4.1.2.注释
MQL5 中的注释对于在代码中提供解释和文档至关重要。可以把注释想象成一个标签,添加到一行代码中,以便日后引用或解释代码的目的。下面是如何在各种情况下使用注释的详细示例:
单行注释:单行注释前面加"//"。它们用于简要说明。
示例:
void OnStart() { Print("Hello MQL5"); // This line of code will print “Hello MQL5” when run }
请注意:编译器会完全忽略在 // 之后编写的任何内容。
多行注释
多行注释包含在"/* */"内。它们适用于更广泛的解释。这对于写出你的计划或开发程序时需要遵循的步骤非常有用。
示例:
void OnStart() { /* In many programming languages, including MQL5 a semicolon “;” is used to indicate the end of a statement. It is a crucial element for the compiler to understand the structure of the program. */ }
编译器会完全忽略 /* 和 */ 之间的所有内容。
注释对代码的可读性和可理解性起着至关重要的作用。它们不仅有助于你自己的理解,也有助于任何可能阅读或合作编写你的代码的人。应该多使用注释来提高 MQL5 程序的清晰度。
4.1.3.标识符
在程序设计中,标识符是对代码中的变量、函数或其他用户定义项的命名。标识符对代码的可读性和可理解性起着至关重要的作用。以下是有关 MQL5 中标识符的一些要点:
命名规则
标识符必须遵循特定的命名规则。它们应以字母(A-Z 或 a-z)开头,后面可以是字母、数字 (0-9) 或下划线 (_)。
大小写敏感性
MQL5 区分大小写,即大写字母和小写字母是不同的。因此,"myVariable" 和 "MyVariable" 会被视为不同的标识符。
示例:
int myage = 25; int MyAge = 25; // myage is a different identifier from MyAge.
有意义的名字
为标识符选择有意义的描述性名称。这样可以提高代码的可读性,使他人(或未来的自己)更容易理解变量或函数的目的。
保留字
避免使用保留字作为标识符。保留字在编程语言中具有特殊含义,不能用于其他目的。例如提醒、打印和注释。了解更多有关保留字的信息。
示例:
int Age = 25; Print(Age); /* Int is the data type is an integer because 25 is a whole number. Age is the identifier Print is a reserved word in MQL5 and it serves a special function. This means it can't be used as an identifier */
4.2.基本数据类型
在编程中,数据类型就像一个容器,可以容纳不同种类的信息。想象一下,你有一些盒子来存放东西:有些盒子可以存放数字,有些可以存放文字,还有些可以存放更复杂的东西。例如:
整数 (int)
把它想象成一个只能装整数的盒子。它可以存储 1、5 或 10 等数字,但不能存储带小数点的数字。
示例:
int myInteger = 10;
双精度浮点数(double)
这种类型表示带小数点的数字。
示例:
double myDouble = 3.14;
字符
在 MQL5 中,字符是一种用于表示单个字符(如字母、数字或符号)的数据类型。它用关键字 "char" 表示。
示例:
// Declaring a character variable char myChar = 'A'; // Printing the character to the console Print(myChar);
字符串类型
字符串(string)是字符序列,通常用于文本。
示例:
string myString = "Hello, MQL5!"; Alert(myString);
布尔类型
布尔值(bool)表示真或假(true 或 false)。
示例:
bool iam25 = true;
数组
MQL5 中的数组允许您在一个变量名下存储多个相同数据类型的值。它们提供了一种处理数据集的便捷方式。以下是 MQL5 中数组的主要方面:
1.数组声明:声明一个数组时,先指定其数据类型和名称,然后用方括号"[]"表示数组。示例:
Integer array declaration int numbers[5];
2.初始化:您可以在声明数组时通过提供一个用大括号"{}"括起来的值列表来初始化数组。
示例:
// Initializing an integer array int numbers[] = {1, 2, 3, 4, 5};
3.访问元素:数组元素的访问使用索引,从 0 开始。例如,在数组 "numbers" 中,"numbers[0]"是第一个元素。MQL5 中的数组可用于获取烛形的收盘价或开盘价。
示例:
// Accessing elements of an array int firstNumber = numbers[0]; // Accesses the first element
注意:这只是一些数据类型,我们只介绍了一些基础知识。这样做的目的是通过清晰的示例引导您理解每个概念,避免过多的细节,使您的学习之旅轻松愉快。
结论
总之,我们已经开始了一段探索编程基础和 MQL5 特定世界的旅程。从编程入门开始,我们深入研究了 MQL5 程序的类型,了解了 MetaEditor IDE 在创建交易算法中的重要作用。我们对 MQL5 语言基础的探索为构建更复杂的程序奠定了基础。请记住,这仅仅是个开始,随着我们的不断进步,使用 MQL5 进行编码的力量将逐渐显现,使您能够创建稳健高效的交易策略。请继续关注更多关于算法交易和 MQL5 编程领域的见解和文章!
本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/13738



