
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
注意: MetaQuotes Ltd.将保留所有关于这些材料的权利。全部或部分复制或者转载这些材料将被禁止。
This article was written by a user of the site and reflects their personal views. MetaQuotes Ltd is not responsible for the accuracy of the information presented, nor for any consequences resulting from the use of the solutions, strategies or recommendations described.




好文章(系列文章)!
有太多的作者深入探讨沉重而巧妙的主题,但却没有为初学者解释基础知识的材料。 关于基础知识的信息很少,对于 MQL4 来说已经过时。
期待您的下一篇文章,再次感谢。
亲爱的Lou1973、
非常感谢您的赞誉!我很高兴听到你喜欢这篇文章。您的鼓励对我意义重大,我很高兴能在接下来的系列文章中继续分享更多见解。敬请期待更多有价值的内容,如果您有任何具体的话题,欢迎随时联系我。
致以最诚挚的问候、
阿比奥耶-以色列-佩卢米
太棒了!这是一篇对初学者非常有用的文章。我迫不及待地想读接下来的部分,我相信不止我一个人!
非常感谢,JMB!我很高兴听到你认为这篇文章很有用。您的鼓励对我意义重大,我很高兴能在接下来的文章中与您分享更多见解。敬请期待更多精彩内容,如果您有任何想要了解的特定主题,请随时告诉我!
致以最诚挚的问候、
阿比奥耶-以色列-佩卢米
我很喜欢你的作品,非常感谢你在这些文章中所做的努力,如果你找不到你要找的东西或需要上下文,这些文章真的能帮你理清基本思路!