
从新手到专家: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

