
从新手到专家:MQL5交易的必备之旅
关键部分:
引言:我的MQL5之旅简述
2019 年,我加入MQL5社区时,只是一个具备手动交易技能的初学者,尽管我有扎实的计算机科学背景,但对算法交易的了解非常有限。我真希望自己能早点掌握算法交易的概念。最初,我忽视了它,继续进行手动交易。然而,三年后,我在从事电子技术工作时,尽管工作繁忙,仍希望继续交易。这种渴望促使我学习算法交易,以开发能够自动化交易或至少提供可操作信号的系统。
重返MQL5社区让我仿佛找到了一个充满可能性的家园。激励我继续阅读社区文章,每一篇都包含着宝贵的知识技能。许多文章引导读者逐步完成算法项目,从基础到复杂阶段逐步深入。在过去的两年里,我通过各种定制项目提升了我的MQL5技能。随着技术的快速发展和资源的不断丰富,学习速度也变得更快。我建议您仔细阅读全文,以免错过任何关键信息。
本文是为哪些人准备的?
- 绝对新手:帮助您开始入门。
- 中级和高级开发者:解锁新的潜力。
我将引导您创建一个符合你需求的可运行程序,并激励你开始行动。本文的目标是通过简化算法开发流程并结合新兴技术,让MQL5社区对于用户变得更加友好。
得益于易于获取的教育资源,算法交易环境相比几年前已经变得比较友好。以下是一些指导我关注焦点的问题,也希望它们能激励您:
- 初学者如何高效地学习和掌握MQL5的基础知识?
- MQL5学习者有哪些资源可以快速战胜特定的编码挑战?
- 交易者如何利用MQL5发明新策略、优化并实现自动化?
我将探讨三个领域,帮助您作为绝对新手开启MQL5之旅,或者作为高级开发者提升您的技能。我想给你们的一条建议是:“钻研文字吧,阅读中隐藏着珍宝。”许多人因为不喜欢阅读而错失机会。互联网,尤其是MQL5社区,为职业发展、写作、开发和自由职业提供了无限的机会。我每天至少访问三次mql5.com,并且我已经将其与我的移动终端 ID(称为MetaQuotes ID)集成,以便在我的移动设备上接收重要的通知。正如威廉·莎士比亚所说:“闪光的未必都是金子。”真正的财富在于阅读文字,尽管文字可能不如图像那么吸引人,但即使是算法也是由宝贵的文本组成的。
- 秘诀1:MQL5社区
- 秘诀2:桌面版MetaTrader 5平台
- 秘诀3:人工智能
这三大要素可以结合使用,使您成为一名更好的MQL5算法开发者。尽管这篇文章的目标是激励您开始行动,但我也会确保构建一个基础程序来实现这三大秘诀。
揭开MQL5成功交易者的秘诀
秘诀1:MQL5社区
MQL5是一个涵盖算法交易所有相关内容的综合性资源平台。它包含了从新手到进阶所需的一切工具。以下是MQL5社区中对开发者至关重要的几个组成部分:
- 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),以观察它们与价格变化的互动。我观察潜在的交叉点,并用矩形工具将它们标记出来。从这张图中,我就可以开始为自动化交易制定策略。
MetaQuotes语言编辑器(MetaEditor):
模板:MetaEditor为脚本、EA和指标提供了预制的模板,为项目提供了坚实的起点,并帮助用户理解MQL5程序的结构和关键组件。
在实践中学习:20世纪初,教育理论家约翰·杜威(John Dewey)就强调了“在实践中学习”的重要性。。首先,使用这些模板新建简单的项目。修改并实验这些项目,以了解不同元素是如何相互作用的。这种实践方法巩固了您的基础知识,并与杜威的理念相契合,即主动学习能够增强理解和记忆。
秘诀3:人工智能
每天都有人发明许多人工智能模型,现在让我们简要探讨ChatGPT。它是一个对话式人工智能模型,旨在通过提供答案、激发灵感和提高生产力来帮助用户。当前免费使用,可以在写作、学习、头脑风暴等方面提供帮助。ChatGPT是由2015年成立的公司OpenAI开发的。
像ChatGP这样的人工智能模型是在大量数据上进行训练的,包括编程语言和文档。这个训练过程涉及分析模式、理解语法,并从各种语言的众多代码示例中学习最佳实践。因此,ChatGPT可以提供专家级别的指导,帮助您理解复杂的编程概念,并高效地解决编码问题。
人工智能在算法开发中的实现
这里,我将指导您如何通过工具的协作简化学习过程,并打破因不了解这些资源而造成的限制。开始使用ChatGPT时,我将流程分为两个部分:
- 使用ChatGPT理解MetaEditor模板
- 在AI辅助下开发脚本,命名为“我的第一个MQL5程序”
使用ChatGPT理解MetaEditor模板
在MetaTrader 5的桌面,点击工具并选择MetaQuotes 语言编辑器,或者直接按键盘上的F4键。将会打开MetaEditor的新窗口。点击文件并选择新建。以下是展示该过程的动态图片:
我将文件命名为“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); } //+------------------------------------------------------------------+
作为一名初学者,您可能会问自己:“这到底是什么?” 好的,让我展示一下如何轻松理解这一切,作为我们解锁秘诀目标的一部分。
- 前往chat.openai.com并开始一个对话。
- 从 MetaEditor中复制程序代码。
- 在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线是多头(看涨)还是空头(看跌)。
程序在没有进一步编辑的情况下被成功编译。脚本确认D1K线是看涨的。
结论
精通MQL5是一段融合学习、实验以及借助先进工具(如人工智能)的旅程。通过掌握基础知识,利用社区资源,在AI的协助下应对动态挑战,优化策略,并运用自动化,您可以充分释放自己作为交易者的潜力。这三大秘诀只是开始;持续学习和适应将确保您在算法交易的动态世界中保持领先。抓住MQL5所提供的机会,见证您的交易成功腾飞。
AI可以做很多事情,而其极限在于你的思维以及你与之沟通想法的技巧。并非所有由AI创建的程序每次都能高效执行;有时,您需要在调试方面多下功夫,并重新查阅社区文档和MQL5书籍进行深入研究。还有很多内容可以分享,但让我们留到下次再说。至少您现在有了一个伙伴。祝你开发顺利!文件名 | 说明 |
---|---|
'MyFirstIndicator.mq5' | MQL5指标模版。 |
MyFirstMQL5 Program.mq5 | 脚本算法。 |
MyFirstMQL5 Program.ex5 | 编译脚本程序以备使用。 |
本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/15320
注意: 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.


发表了文章《从新手到专家:MQL5 交易之道精要》:
作者:Clemence Benjamin