English Русский Español Deutsch 日本語 Português
preview
MQL5 简介(第 1 部分):算法交易新手指南

MQL5 简介(第 1 部分):算法交易新手指南

MetaTrader 5测试者 | 17 七月 2024, 09:48
220 0
Israel Pelumi Abioye
Israel Pelumi Abioye

概述

如果没有任何编程经验,学习 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 循环会在满足特定条件时持续执行代码块。
  • 变量:用于存储数据的容器。它有一个名称,可以保存不同的值,这些值在程序执行过程中会发生变化。

请注意:随着本文的深入,我将进一步讨论其中的一些重要术语。


 2.MQL5 程序

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 按钮。

    图 1.从 MetaTrade 5 中打开 MetaEditor

  • 导航器部分 (Ctrl+D) 显示所有类型的 MQL5 程序。点击任何一个程序,就会显示你编写的所有代码。

    图 2.导航器部分

  • 要打开编写代码的页面,请单击新建 (Ctrl+N) 按钮,您需要选择要开发的 MQL5 程序类型,在选择要开发的程序类型后,点击 MQL 向导部分的 "下一步 >" 按钮。

    图 3.选择要开发的 MQL5 程序类型

  • 将显示输入详细信息的页面,完成后单击 MQL 向导部分的 "完成 "按钮。

    图 4.输入必要信息

  • 祝贺您!您只需拥有一个完全就绪的 MetaEditor,就可以开始编写代码了。

    图 5.MetaEditor 5


  • 本部分显示您之前输入的详细信息。

    图 6.详情。

  • OnStart() 是一个在脚本程序中调用的函数,它会确保大括号 {} 中的代码在脚本程序激活后立即执行一次。

    图 7.OnStart()

  • 让我们编写第一段代码,创建一个脚本,在激活时提示 "Hello MQL5"。

    void OnStart()
      {
    
       Alert("Hello MQL5");
    
      }


请注意:随着文章的深入,我们将进一步解释


  • 编译器会检查代码是否正确,并就如何修改代码提出建议。完成代码编写后,单击 "编译" 按钮,检查 "描述" 部分是否有错误和警告。

    图 8.编译器.


请注意:如果代码有错误,在您更正之前,代码将无法运行。代码可以在不纠正警告的情况下运行,但最好解决警告的问题,以避免程序出现问题。

  • 要测试程序,请点击播放按钮。

    图 9.测试代码


  • 然后,程序将在 MetaTrader 5 中运行。

    图 10.在 MT5 上运行代码。


到目前为止,我们已经开始了一段简短而重要的旅程,了解了编程和 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

软件开发和 MQL5 中的设计范式(第 3 部分):行为范式 1 软件开发和 MQL5 中的设计范式(第 3 部分):行为范式 1
来自设计范式文献的一篇新文章,我们将看到类型其一,即行为范式,从而理解我们如何有效地在所创建对象之间构建通信方法。通过完成这些行为范式,我们就能够理解创建和构建可重用、可扩展、经过测试的软件。
Python、ONNX 和 MetaTrader 5:利用 RobustScaler 和 PolynomialFeatures 数据预处理创建 RandomForest 模型 Python、ONNX 和 MetaTrader 5:利用 RobustScaler 和 PolynomialFeatures 数据预处理创建 RandomForest 模型
在本文中,我们将用 Python 创建一个随机森林(random forest)模型,训练该模型,并将其保存为带有数据预处理功能的 ONNX 管道。之后,我们将在 MetaTrader 5 终端中使用该模型。
神经网络变得简单(第 66 部分):离线学习中的探索问题 神经网络变得简单(第 66 部分):离线学习中的探索问题
使用准备好的训练数据集中的数据对模型进行离线训练,这种方法虽然有一定的优势,但其不利的一面是,环境信息被大大压缩到训练数据集的大小。这反过来又限制了探索的可能性。在本文中,我们将探讨一种方法,这种方法可以用尽可能多样化的数据来填充训练数据集。
利用 Python 和 MQL5 构建您的第一个玻璃盒模型 利用 Python 和 MQL5 构建您的第一个玻璃盒模型
如果我们想从机器学习这些先进技术中获得任何价值,那么很难解释和理解为什么我们的模型偏离我们的期望至关重要。如果对模型内部工作原理的没有全面了解,我们可能无法发现破坏模型性能的错误,我们可能会在无法预测的参照特征上浪费时间,从长远来看,我们有可能没有充分利用这些模型的功能。幸运的是,有一个复杂且维护良好的多合一解决方案,令我们能够准确地看到我们的模型在引擎盖下正在做什么。