English Русский Español Deutsch 日本語 Português
preview
从新手到专家:MQL5交易的必备之旅

从新手到专家:MQL5交易的必备之旅

MetaTrader 5测试者 | 24 二月 2025, 09:03
938 0
Clemence Benjamin
Clemence Benjamin

关键部分:

  1. 引言:我的MQL5之旅简述
  2. 揭开MQL5成功交易者的秘诀
  3. 人工智能在算法开发中的实现
  4. 结论

 

引言:我的MQL5之旅简述

2019 年,我加入MQL5社区时,只是一个具备手动交易技能的初学者,尽管我有扎实的计算机科学背景,但对算法交易的了解非常有限。我真希望自己能早点掌握算法交易的概念。最初,我忽视了它,继续进行手动交易。然而,三年后,我在从事电子技术工作时,尽管工作繁忙,仍希望继续交易。这种渴望促使我学习算法交易,以开发能够自动化交易或至少提供可操作信号的系统。

重返MQL5社区让我仿佛找到了一个充满可能性的家园。激励我继续阅读社区文章,每一篇都包含着宝贵的知识技能。许多文章引导读者逐步完成算法项目,从基础到复杂阶段逐步深入。在过去的两年里,我通过各种定制项目提升了我的MQL5技能。随着技术的快速发展和资源的不断丰富,学习速度也变得更快。我建议您仔细阅读全文,以免错过任何关键信息。

 

本文是为哪些人准备的?

  1. 绝对新手:帮助您开始入门。
  2. 中级和高级开发者:解锁新的潜力。

我将引导您创建一个符合你需求的可运行程序,并激励你开始行动。本文的目标是通过简化算法开发流程并结合新兴技术,让MQL5社区对于用户变得更加友好。

得益于易于获取的教育资源,算法交易环境相比几年前已经变得比较友好。以下是一些指导我关注焦点的问题,也希望它们能激励您:

  • 初学者如何高效地学习和掌握MQL5的基础知识?
  • MQL5学习者有哪些资源可以快速战胜特定的编码挑战?
  • 交易者如何利用MQL5发明新策略、优化并实现自动化?

我将探讨三个领域,帮助您作为绝对新手开启MQL5之旅,或者作为高级开发者提升您的技能。我想给你们的一条建议是:“钻研文字吧,阅读中隐藏着珍宝。”许多人因为不喜欢阅读而错失机会。互联网,尤其是MQL5社区,为职业发展、写作、开发和自由职业提供了无限的机会。我每天至少访问三次mql5.com,并且我已经将其与我的移动终端 ID(称为MetaQuotes ID)集成,以便在我的移动设备上接收重要的通知。正如威廉·莎士比亚所说:“闪光的未必都是金子。”真正的财富在于阅读文字,尽管文字可能不如图像那么吸引人,但即使是算法也是由宝贵的文本组成的。

  •  秘诀1:MQL5社区
  •  秘诀2:桌面版MetaTrader 5平台
  •  秘诀3:人工智能

这三大要素可以结合使用,使您成为一名更好的MQL5算法开发者。尽管这篇文章的目标是激励您开始行动,但我也会确保构建一个基础程序来实现这三大秘诀。

 

揭开MQL5成功交易者的秘诀

秘诀1:MQL5社区

MQL5是一个涵盖算法交易所有相关内容的综合性资源平台。它包含了从新手到进阶所需的一切工具。以下是MQL5社区中对开发者至关重要的几个组成部分:

  mql5.com

    • Documentation:提供关于MQL5编程的详细信息的综合性资源,包括函数、类和开发指南。
    • AlgoBook:帮助开发自己算法的算法书籍集合。
    • NeuroBook:专注于使用MQL5进行算法交易中神经网络和机器学习技术的专业书籍。
    • CodeBase:由MQL5社区提供的免费MQL5脚本、指标和EA的存储库,供交易者下载、使用和修改。
    • Forum:一个互动平台,用于讨论交易策略、编程问题以及分享与MQL5开发相关经验和解决方案。
    • Articles:一个文章库,包含教程、交易策略、编程技巧以及关于使用MQL5进行算法交易的各方面见解。
    • Market:一个线上商城,交易者可以在这里购买和出售MQL5交易应用程序(包括EA、指标和脚本)。
    • Signals:一项服务,允许交易者订阅由经验丰富的交易者提供的交易信号,从而实现交易的自动复制。
    • VPS:由MetaTrader提供虚拟专用服务器(VPS)服务,使交易者能够全天候不间断地运行他们的交易机器人和信号。
    • Freelance:一个平台,交易者可以在这里雇佣自由职业开发者,使用MQL5创建定制的交易应用程序、指标或脚本。
    • Quotes:金融工具的实时报价,为交易者提供做出明智交易决策所需的最新市场价格。
    •  Calendar:经济日历,列出可能影响金融市场和交易策略的重要经济事件和新闻。
    • WebTerminal:MetaTrader交易平台的在线版本,允许交易者无需安装任何软件,即可直接通过网页浏览器访问其账户并进行交易。
    • Search Box:一个工具,使用户能够在MQL5社区及其庞大的文档、文章和论坛讨论资料库中迅速找到特定的信息、资源或内容。

 

秘诀2:桌面版MetaTrader 5平台

该平台是掌握算法交易的另一个重要资源。它集成了MQL5社区中的许多资源,并且是编写算法的起点。在制定策略时,我通常会先查看图表,识别过去市场数据中的重复模式,然后在纸上开发逻辑,最后编写算法。MetaTrader 5配备了MetaQuotes语言编辑器和策略测试器等工具,使其成为开发和学习的绝佳工具集。

让我简要地给你展示一个例子:

我来打开图表分析发生了什么。这里是一张尚未添加任何指标的GBP/USD图表。然后我在图表上添加50日指数移动平均线(EMA 50)和21日指数移动平均线(EMA 21),以观察它们与价格变化的互动。我观察潜在的交叉点,并用矩形工具将它们标记出来。从这张图中,我就可以开始为自动化交易制定策略。

GBPUSD 


设置MA21



设置MA50


GBPUSD MA交叉策略


MetaQuotes语言编辑器(MetaEditor):

模板:MetaEditor为脚本、EA和指标提供了预制的模板,为项目提供了坚实的起点,并帮助用户理解MQL5程序的结构和关键组件。

在实践中学习:20世纪初,教育理论家约翰·杜威(John Dewey)就强调了“在实践中学习”的重要性。。首先,使用这些模板新建简单的项目。修改并实验这些项目,以了解不同元素是如何相互作用的。这种实践方法巩固了您的基础知识,并与杜威的理念相契合,即主动学习能够增强理解和记忆。

 

秘诀3:人工智能

每天都有人发明许多人工智能模型,现在让我们简要探讨ChatGPT。它是一个对话式人工智能模型,旨在通过提供答案、激发灵感和提高生产力来帮助用户。当前免费使用,可以在写作、学习、头脑风暴等方面提供帮助。ChatGPT是由2015年成立的公司OpenAI开发的。

像ChatGP这样的人工智能模型是在大量数据上进行训练的,包括编程语言和文档。这个训练过程涉及分析模式、理解语法,并从各种语言的众多代码示例中学习最佳实践。因此,ChatGPT可以提供专家级别的指导,帮助您理解复杂的编程概念,并高效地解决编码问题。

 

人工智能在算法开发中的实现

这里,我将指导您如何通过工具的协作简化学习过程,并打破因不了解这些资源而造成的限制。开始使用ChatGPT时,我将流程分为两个部分:

  1. 使用ChatGPT理解MetaEditor模板
  2. 在AI辅助下开发脚本,命名为“我的第一个MQL5程序”

 

使用ChatGPT理解MetaEditor模板

在MetaTrader 5的桌面,点击工具并选择MetaQuotes 语言编辑器,或者直接按键盘上的F4键。将会打开MetaEditor的新窗口。点击文件并选择新建。以下是展示该过程的动态图片:

MetaEditor: MyFirstIndicator

我将文件命名为“MyFirstIndicator”,但这是可选择的;您可以根据自己的喜好来命名。当您完成这一步时,您会得到一个如下代码段所示的模板。

//+------------------------------------------------------------------+
//|                                             MyFirstIndicator.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

作为一名初学者,您可能会问自己:“这到底是什么?” 好的,让我展示一下如何轻松理解这一切,作为我们解锁秘诀目标的一部分。

  1. 前往chat.openai.com并开始一个对话。
  2. 从 MetaEditor中复制程序代码。
  3. 在ChatGPT中输入提示:“逐部分解这段MQL5 代码:”(粘贴您复制的代码),然后点击发送。

ChatGPT会回复一段详细的解释,说明代码的作用。继续阅读以发现更多。

作为回应,ChatGPT将程序拆分成了几个代码段,并以一种更吸引人的方式进行讲解,使得理解这个模板变得容易。以下是ChatGPT以斜体文字对程序的解释:

//+------------------------------------------------------------------+
//|                                             MyFirstIndicator.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+

  • 这部分是一个头部注释,包含了文件名、版权信息以及一个指向MetaQuotes网站的链接。在MQL5代码中,这是提供上下文和归属信息的典型做法。

#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

这些#property指令提供了关于指标的元数据:

  • #property copyright:表示版权持有者和年份。
  • #property link:提供一个网站链接(通常可以找到更多信息的网站)。
  • #property version:指定指标的版本。
  • #property indicator_chart_window:表示指标将在主图表窗口中绘制(而不是在单独的窗口中)。
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }

这部分定义了OnInit函数,该函数在指标初始化时被调用:

  • OnInit():该函数负责设置指标,例如分配缓冲区和初始化变量。
  • return(INIT_SUCCEEDED);:表示初始化成功。INIT_SUCCEEDED是MQL5中的一个预定义常量。
  • 目前,该函数没有执行任何操作,因为注释(//---)之间的主体部分是空的。

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

本节定义了OnCalculate函数,该函数会在每个tick上被调用以计算指标值:

  • OnCalculate:这是指标主体逻辑的实现部分。负责处理价格数据并计算指标值。
  • Rates_total:图表中的总柱数。
  • Prev_calculated:在上一次调用期间计算的柱数。
  • Time[]、open[]、high[]、low[]、close[]、tick_volume[]、volume[]、spread[]:这些数组分别包含每根柱的时间、开盘价、最高价、最低价、收盘价、tick交易量、实际交易量和点差。

目前,该函数尚未执行任何计算,因为主体部分为空。它只是返回rates_total,表示已处理的总柱数。这对于跟踪后续调用中处理的柱数非常重要。总的来说,这是MQL5中自定义指标的框架代码。它设置了基本结构和元数据,但尚未执行任何特定操作或计算。


在AI辅助下开发脚本,命名为“我的第一个MQL5程序”

首先,我们需要明确我们正在开发程序的目的。在这种情况下,我会建议通过一个脚本程序,告知我D1(日线)K线图是看涨(多头)还是看跌(空头)。接下来,前往ChatGPT并发送提示。这一次,我们希望提供一个脚本程序模板,存储在AI的内存中,然后要求对其进行修改以满足条件。

创建一个脚本


设置脚本的名称

首先,我们需要明确我们正在开发程序的目的。在这种情况下,我会建议通过一个脚本程序,告知我D1(日线)K线图是看涨(多头)还是看跌(空头)。按下“完成”后,我们得到这个程序模板,并将其复制到ChatGPT,以根据以下上下文完成我们的计划:

//+------------------------------------------------------------------+
//|                                          MyFirstMQL5 Program.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   
  }
//+------------------------------------------------------------------+
以下是ChatGPT提示后生成的代码段:
Create an MQL5 script from this template that tells day candle status on screen: //+------------------------------------------------------------------+
//|                                          MyFirstMQL5 Program.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   
  }
//+------------------------------------------------------------------+

 ChatGPT响应:

//+------------------------------------------------------------------+
//|                                          MyFirstMQL5 Program.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

// Input parameters for customizing the text display
input color TextColor = clrRed;               // Color of the text
input int FontSize = 20;                      // Font size
input ENUM_ANCHOR_POINT AnchorCorner = ANCHOR_LEFT_UPPER; // Text anchor point
input int X_Offset = 10;                      // X offset
input int Y_Offset = 10;                      // Y offset

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   // Get the opening price of the current day
   double openPrice = iOpen(_Symbol, PERIOD_D1, 0);
   
   // Get the closing price of the current day
   double closePrice = iClose(_Symbol, PERIOD_D1, 0);
   
   // Determine the candle status
   string candleStatus = (closePrice >= openPrice) ? "Bullish" : "Bearish";
   
   // Display the candle status on the screen
   DisplayCandleStatus(candleStatus);
  }

//+------------------------------------------------------------------+
//| Function to display the candle status on the screen              |
//+------------------------------------------------------------------+
void DisplayCandleStatus(string status)
  {
   string objName = "CandleStatusText";
   
   if(ObjectFind(0, objName) < 0)
     {
      // Create the text object if it doesn't exist
      ObjectCreate(0, objName, OBJ_LABEL, 0, 0, 0);
      ObjectSetInteger(0, objName, OBJPROP_CORNER, AnchorCorner);
      ObjectSetInteger(0, objName, OBJPROP_XDISTANCE, X_Offset);
      ObjectSetInteger(0, objName, OBJPROP_YDISTANCE, Y_Offset);
      ObjectSetInteger(0, objName, OBJPROP_FONTSIZE, FontSize);
      ObjectSetInteger(0, objName, OBJPROP_COLOR, TextColor);
     }
   
   // Update the text
   ObjectSetString(0, objName, OBJPROP_TEXT, "Day Candle: " + status);
  }
//+------------------------------------------------------------------+


测试

以下是我在测试过程中遵循的步骤:

  • 复制代码:从ChatGPT接收到修改后的脚本后,复制代码。
  • 打开MetaEditor:在您的计算机上启动MetaEditor。
  • 创建新脚本:
    • 点击“文件”>“新建”>“脚本”。
    • 输入脚本名称,然后点击“下一步”和“完成”。
  • 粘贴代码:将新脚本文件中自动生成的代码替换为从ChatGPT接收到的修改后的代码。
  • 编译脚本:
    • 点击MetaEditor工具栏上的“编译”按钮。
    • 如果没有错误,您的脚本将被成功编译。
  • 检查输出结果:
    • 在“导航器”标签页中,查看“脚本”部分,找到您编译后的脚本文件。
    • 将脚本拖放到MetaTrader 5中的图表上,以查看结果。

  • 审核结果:观察图表,验证脚本是否正确识别出D1K线是多头(看涨)还是空头(看跌)。

在MetaEditor中编译


程序在没有进一步编辑的情况下被成功编译。脚本确认D1K线是看涨的。

脚本现已被添加到脚本文件夹中。 Boom 500指数D1



结论

精通MQL5是一段融合学习、实验以及借助先进工具(如人工智能)的旅程。通过掌握基础知识,利用社区资源,在AI的协助下应对动态挑战,优化策略,并运用自动化,您可以充分释放自己作为交易者的潜力。这三大秘诀只是开始;持续学习和适应将确保您在算法交易的动态世界中保持领先。抓住MQL5所提供的机会,见证您的交易成功腾飞。

AI可以做很多事情,而其极限在于你的思维以及你与之沟通想法的技巧。并非所有由AI创建的程序每次都能高效执行;有时,您需要在调试方面多下功夫,并重新查阅社区文档和MQL5书籍进行深入研究。还有很多内容可以分享,但让我们留到下次再说。至少您现在有了一个伙伴。祝你开发顺利!
文件名 说明
'MyFirstIndicator.mq5' MQL5指标模版。
MyFirstMQL5 Program.mq5 脚本算法。
MyFirstMQL5 Program.ex5 编译脚本程序以备使用。


本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/15320

使用MQL5实现布林带交易策略:逐步指南 使用MQL5实现布林带交易策略:逐步指南
使用MQL5实现基于布林带交易策略的自动化交易算法的逐步指南。这是一个基于创建EA的详细教程,对交易者非常有帮助。
将您自己的 LLM 集成到 EA 中(第 3 部分):使用 CPU 训练自己的 LLM 将您自己的 LLM 集成到 EA 中(第 3 部分):使用 CPU 训练自己的 LLM
在人工智能飞速发展的今天,大语言模型(LLM)是人工智能的重要组成部分,所以我们应该思考如何将强大的 LLM 融入到我们的算法交易中。对于大多数人来说,很难根据他们的需求微调这些强大的模型,在本地部署它们,然后将它们应用于算法交易。本系列文章将采取循序渐进的方法来实现这一目标。
神经网络变得简单(第 93 部分):频域和时域中的自适应预测(终篇) 神经网络变得简单(第 93 部分):频域和时域中的自适应预测(终篇)
在本文中,我们继续实现 ATFNet 模型的方式,其在时间序列预测内可自适应地结合 2 个模块(频域和时域)的结果。
基于套接字(Sockets)的Twitter情绪分析 基于套接字(Sockets)的Twitter情绪分析
这种创新的交易机器人将 MetaTrader 5 与 Python 结合,利用实时社交媒体情绪分析为自动化交易决策提供支持。通过分析与特定金融工具相关的 Twitter 情绪,该机器人将社交媒体趋势转化为可操作的交易信号。它采用客户端-服务器架构,并通过套接字通信实现无缝交互,将 MT5 的交易能力与 Python 的数据处理能力完美结合。该系统展示了将量化金融与自然语言处理相结合的潜力,提供了一种利用替代数据源的尖端算法交易方法。尽管显示出巨大潜力,但该机器人也突显了未来改进的方向,包括采用更先进的情绪分析技术以及改进风险管理策略。