
MQL5 简介(第 7 部分):在 MQL5 中构建 EA 交易和使用 AI 生成代码的初级指南
概述
欢迎回到我们的 MQL5 之旅!在我们开始 MQL5 编程系列的第 7 部分时,准备好深入挖掘和探索现实世界示例的迷人领域。在本章中,我们将从理论转向实践,通过实际练习帮助我们将前面文章中学习到的想法付诸实践。
了解伪代码的意义将是我们研究的重要组成部分。伪代码是具体代码实现与抽象算法概念之间的纽带,在开始编码之前,它能让我们快速、轻松地以人类可以阅读的格式勾勒出我们的想法。在接下来的章节中,我们将了解伪代码的功能,以及它如何帮助将算法策略转化为可运行的代码。
人工智能在当今技术领域的快速发展引发了有关未来编码的讨论。有些人认为,AI 生成的代码可以取代对传统编码知识的需求。但没有什么比这更脱离现实了。本文旨在消除这种误解,并强调了解如何编码的重要性。我们将揭示如何将 AI 生成的代码无缝地整合到我们的编程项目中,使其补充而不是取代我们的技能。因此,让我们立即开始并充分利用 MQL5 编程。准备好将理论应用于现实世界,让我们一起创造奇迹吧!
在本文中,我们将讨论以下主题:
- 掌握 MQL5
- 伪代码
- 用 AI 生成 MQL5 代码
在上一篇文章中,我曾提到要加入一段关于数组函数的视频。这段视频也将提醒我们在哪里停了下来。
1.掌握 MQL5
一下子学习 MQL5 的所有来龙去脉可能会让您不知所措,相反,把重点放在项目上可以使学习过程更加易于管理和令人愉快。首先要掌握变量、循环、条件、函数等基本概念,以及前面文章中讨论过的所有其他基本概念。在扎实掌握了这些基础知识之后,就可以开始探索自己感兴趣的项目,例如构建 EA 交易或自定义指标。 每个项目都会给你带来新的困难,让你学到无价的经验。通过基于项目的学习,你可以将理论知识应用到实际场景中,从而更好地掌握 MQL5 的复杂性。在参与各种项目的过程中,你将会逐步掌握处理 MQL5 编程复杂性所需的知识和能力。
接受这种学习方法,你就有能力以稳定和自信的方式提升自己,成为一名程序员。您不会被 MQL5 的庞大功能所吓倒,而是会一个项目一个项目地学习,逐步提高您的熟练程度。因此,接受基于项目的学习之旅吧;这是掌握 MQL5 最可靠的方法。 我决定在整个系列中使用基于项目的学习方法,因为它非常有效。我们不会让你一头扎进MQL5的复杂性中,而是专注于让你通过经验学习的实际项目。在现实世界的项目中工作将帮助你更好地理解这个主题,并培养有用的技能来改进你的交易策略。
我们将从基础的、对初学者友好的项目开始,逐步发展到更复杂的项目。通过遵循这种有条不紊的方法,您可以确保在进入更复杂的主题之前,对 MQL5 编程有扎实的理解。你会从每个项目中获得新的技能和想法,这将帮助你逐渐提高。我们将为本文所做的项目将作为 MQL5 中生成 EA 交易的顺序过程的一个实践示例。我们还将探讨在 MQL5 的背景下优化 AI 生成代码的优势。
我们将要开发的初学者友好项目是 MQL5 中的提醒交易时钟。这个项目的独特之处在于它使用预先录制的语音消息,而不是 MQL5 提供的标准声音。您将学习如何创建一个提醒系统,让用户可以使用语音信息设置提醒,为您的交易体验增添个性化色彩。
在 MQL5 中创建 EA 交易的第一步是列出 EA 所需的所有必要组件。为了确保 EA 的创建有一个精确的目标和计划,这个规划阶段是必不可少的。要让 EA 分析市场数据并做出交易决策,首先要确定它将使用的交易策略。这包括规定进场和退出规则、风险管理程序以及任何其他特殊要求。
在编写 EA 交易时,了解您正在使用的 EA 类型非常重要。有些 EA 主要是利用预先确定的策略进行交易,而有些 EA 则具有风险管理、数据监控甚至发送交易提醒等多种功能,但实际上并不进行交易。了解您正在构建的 EA 类型将指导您的工作,并帮助您设计出有效和高效地实现其预期目的的 EA。 在本文结束时,读者不仅将拥有一个能够发送语音提醒的功能性 EA,还将获得有关 EA 开发过程和 AI 辅助交易策略潜力的宝贵经验。
2.伪代码
2.1.什么是伪代码?
伪代码是一种在开始编码之前定义你想做什么的方法。在开始编码之前,你可以使用伪代码来指定你的目标。这是一种用简单易懂的语言概述程序目标的方法,而不用担心编程语言语法。它通过帮助您组织程序将遵循的步骤和逻辑,使以后编写实际代码变得更加容易。
类比
假设你想使用计算机程序将两个数字相加。在编写实际代码之前,你坐下来列出所有需要采取的步骤。我们的计划方式类似于伪代码!它可以帮助您在开始编写任何代码之前概述程序的功能。
你的伪代码会是什么样子:
第一步:输入数字
- 请用户输入第一个和第二个数字。
第二步:数字加法并打印结果
- 将第一个数字与第二个数字相加,并打印出结果。
该伪码中的每一步都表示将两个数字相加时必须执行的特定操作。它有助于将过程分解成更小、更容易完成的任务,就像你按照食谱做饭一样。当以这种方式计划程序时,一步一步地编写程序会变得更容易,就像你按照指示解决数学问题一样。
为什么伪代码很重要?
尽管伪代码是编程的重要组成部分,但即使是经验丰富的程序员也经常忽略它。虽然很容易被编写代码的快感所吸引,看着你的程序栩栩如生,但用伪代码规划和概述你的想法可以显著加快开发速度。和许多开发人员一样,我也曾犯过在没有太多计划的情况下就开始编码的错误。然而,这种方法可能会导致误解、无效和时间损失。
根据我的经验,在开始编码之前先编写伪代码可以节省我几个小时的沮丧和调试时间。当你急于看到结果时,很容易低估组织和计划的重要性。话虽如此,不可否认,使用伪代码可以帮助你进行编程,因为它为你提供了清晰、方向和信心。
此外,伪代码在创建 EA 交易中发挥着重要作用,并使 MQL5 中使用 AI 生成的代码更容易理解。在使用复杂算法和 AI 工具时,伪代码是连接抽象概念和实际应用的桥梁。它可以帮助开发人员将高层次的想法转化为可操作的步骤,使将 AI 生成的代码整合到 MQL5 程序的过程更加直接和易用。通过使用伪代码来规划和概述 EA 的逻辑,可以确保代码结构合理、高效且易于维护。
了解伪代码的另一个好处是,它有助于在 MQL5 社区内获得自由职业的机会。通过伪代码向客户有效地传达您的编程计划和策略,您可以展示您的专业知识,并增加获得项目的机会,以构建针对其特定需求的 EA 交易。
2.2.如何编写伪代码
编写伪代码的第一步是将程序的目标划分为更小、更易完成的任务。接下来,用简单明了的术语解释每个过程步骤。避免陷入特定编程语言的语法中,而是专注于程序的一般逻辑和流程。
让我们来看看我们将要开发的 EA。例如,我们将开发一款交易闹钟,让您可以在特定时间设置提醒。这个项目的特别之处在于,你可以在设置提醒时选择你想要的声音。我们可以用下面的方式编写伪代码:
第一步是初始化 EA:
- 定义和配置所需的变量和设置。
第二步是设置提醒:
- 允许用户输入所需的提醒时间,并为每个提醒选择他们喜欢的声音。
- 将提醒时间和所选声音存储在相应的变量中。
第三步是监控交易时区,包括:
- 将当前时间与指定的提醒时间进行持续比较。
- 达到提醒时间时触发音频提醒。
第四步是发出音频提醒:
- 将设定的提醒时间通知交易者。
- 播放选定的声音文件,提醒交易者。
此伪代码中的每一步都表示 EA 将执行的特定任务或操作。在开始实际的编码过程之前,我们可以通过将程序的目标分解为更小的步骤并用简单的术语解释来有效地规划 EA 的逻辑和结构。
3.用人工智能生成 MQL5 代码
由于人工智能(AI)的出现,编码过程有了巨大的进步。新方法彻底改变了开发人员创建 EA 交易的方式。代码生成自动化已成为使用 AI 工具进行 MQL5 编程的一大优势。这些工具使用先进的算法,通过分析输入数据,将高级指令和伪代码转换为可执行的 MQL5 代码。人工智能通过自动化重复性任务和减少人工干预来缩短开发时间并提高代码生成生产率。
但即使取得了这些进展,AI 技术仍处于早期阶段,容易出现编码错误。必须认识到,AI 生成的代码可能并非完美无缺,可能需要修正。因此,要有效地使用 AI 生成的代码,开发人员仍需要对 MQL5 有基本或中等程度的了解。这就保证了 AI 所生成代码的正确性和可靠性,使其能够识别并修正系统所犯的错误。尽管 AI 加快了创建代码的过程,但开发人员仍然需要了解情况并保持警惕,以保证成品的质量。
3.1.如何生成准确的人工智能代码
具体步骤如下:
3.1.1 EA 伪代码
在使用 AI 生成 MQL5 代码之前,制作一份详尽的伪代码。将 EA 目标划分为更小、更可行的步骤,并概述每个步骤的条件和行动。
选择 AI 工具生成 MQL5 代码后,接下来的步骤是提供详尽的伪代码,概述您的 EA 交易的逻辑和功能。在这一阶段,伪代码的每个步骤都会促使您提出问题,并深入了解 EA 运行的具体情况。通过将伪代码分解为可操作的步骤,并解决每个步骤下出现的问题,您可以确保您的 EA 经过全面设计,并能有效执行您的交易策略。
第一步是初始化 EA:
- 定义和配置所需的变量和设置,包括:
这一步骤提出了如下问题:
- EA 的运行需要哪些变量?
- 变量应使用什么数据类型?
- 如何确定变量的默认值?是否有任何外部依赖关系或资源需要加载?
通过这些问题,我们可以确保有效执行初始化 EA 的第一步,配置必要的变量和设置,并正确加载录制的语音消息,以便在指定的交易时段播放。
第二步是设置提醒:
- 允许用户输入所需的提醒时间,并为每个提醒选择他们喜欢的声音。
- 将提醒时间和所选声音存储在相应的变量中。
这一步骤提出了如下问题:
- 提醒时间应采用什么格式?
- 用户如何选择他们喜欢的提示音?
- 选定的提醒时间和声音存储在哪里?
- 用户是否可以修改或删除现有提醒?
第三步是监控交易时区,包括:
- 将当前时间与指定的提醒时间进行持续比较。
- 达到提醒时间时触发音频提醒。
这一步骤提出了如下问题:
- EA 如何将当前时间与指定的提醒时间进行持续比较?
- 达到提醒时间后将采取什么措施?
- EA 检查提醒时间的频率是多少?
第四步是设置提醒:
- 第四步是发出音频提醒:
- 将设定的提醒时间通知交易者。
- 播放选定的声音文件,提醒交易者。
这一步骤提出了如下问题:
- 如何将录制的语音信息添加到我们的 MQL5 项目中?
- 如何播放选定的声音文件来提醒交易者?
这类问题对于创建 AI 代码的过程至关重要。通过仔细回应这些问题,我们为 AI 驱动的代码生成绘制了精确的路线图。这一程序可确保最终代码准确捕捉到我们项目的复杂性,为将AI 技术顺利融入我们的 EA 交易的创建中打开大门。
3.1.2.代码生成
根据给定的操作和条件,以从伪代码中得出的一些问题为指导,逐步生成 MQL5 代码。使用所选的 AI 工具来解读您没有答案的每个伪代码段,并将其转换为 MQL5 可执行代码。集中精力依次处理每个步骤,确保生成的代码适当反映预期的逻辑和功能。
我们必须明白,AI 生成的代码并不是我们使用的最终版本。相反,它们是指导性模型,向初学者演示如何在创建 EA 交易过程中实现特定目标。
作为初学者,你可以开始找出这些问题的一些答案,这样你就能更好地了解你的项目接下来应该采取的步骤。重要的是要明白,这也更多地是向 AI 介绍项目的具体情况,而不仅仅是向它提出问题并期望得到答案。您可以通过与 AI 互动并询问相关问题,积极提高人工智能对您项目的理解能力。这种交换有助于提高最终生成供您使用的代码的准确性。你与 AI 交流得越多,向它提供的项目背景信息越多,它就越有能力帮助你成功完成编码任务。
请注意:在向 AI 提出有关项目的问题之前,必须先对项目进行详细说明。这些说明是 AI 了解项目背景和目标的基础。
为了演示如何从 AI 中生成代码,让我们从第一步开始,使用其中一个问题:
EA 的运行需要哪些变量?
AI 的回应:
对于交易提醒项目而言,要使 EA 有效运行,有几个变量是必不可少的。其中可能包括:
- 提醒时间变量:用于存储用户定义的提醒时间的变量。这些可以是日期时间变量,代表交易日内应触发提醒的特定时间。
- 声音选择变量:用于存储用户为每个提醒选择的声音的变量。这可以是一个字符串变量,包含所选声音文件的文件路径或名称。
- 当前时间变量:用于保存当前时间的变量,该变量将不断与提醒时间进行比较,以触发提醒。
- 声音文件路径变量:用于存储用户可以选择的可用声音文件的文件路径的变量。
- 通知信息变量:用于存储提醒可能伴随的任何通知信息的变量。
- 其他配置变量:根据项目的具体要求,可能还需要其他变量,如控制 EA 行为或存储用户偏好的变量。
现在,有了这些理论上的答案,AI 的反应显然并不总是完美的。不过,通过事先对项目进行详细说明,我们让 AI 能够提供更全面的答案。这种详细的概述有助于 AI 理解问题的来龙去脉,并提供更有见地的回答。这种方法提高了AI 响应的质量,并促进了项目需求与 AI 能力之间更富有成效的互动。
为了得到更清晰的解释,您现在可以要求 AI 提供一个代码示例。这部分内容将进一步说明所讨论的理论概念如何转化为实际的代码执行,为项目的功能提供了实际演示。
AI 的回应:
// Define variables for alarm times datetime Alarm1; datetime Alarm2; datetime Alarm3; // Define variables for sound selection string Sound1 = "alert1.wav"; string Sound2 = "alert2.wav"; string Sound3 = "alert3.wav"; // Define variables for current time and notification message datetime CurrentTime; string NotificationMessage; // Define other configuration variables int NumberOfAlarms = 3;
在此示例中:
- Alarm1、Alarm2 和 Alarm3 是日期时间变量,用于存储用户定义的提醒时间。
- Sound1、Sound2 和 Sound3 是字符串变量,包含每个提醒所选声音文件的文件路径或名称。
- NotificationMessage 是一个字符串变量,用于存储任何通知信息。
- NumberOfAlarms 是一个整数变量,表示用户可设置的提醒总数。
通过对 AI 的解释,它提供了一些答案,但并不完美。不过,您可以从这些回复中提取一些问题,并要求 AI 根据您的要求对它们进行改进。
AI 提供的代码有助于确定项目所需的变量。不过,在我们的具体项目中,我们希望用户输入声音和提醒的参数。这就引出了几个与伪代码第二步有关的问题:
- 用户如何选择他们喜欢的提醒声音和时间?
- 选定的提醒时间和声音存储在哪里?
这些问题凸显了在 EA 中实现用户输入功能的必要性。用户应能为每个提醒选择自己喜欢的声音,并指定相应的提醒时间。选定的提醒时间和声音需要存储在 EA 的变量中,以便在需要时可以访问和使用。这可确保 EA 按照用户的偏好运行,并在指定时间有效触发指定声音的提醒。
AI 的回应:
要让用户为每个提醒选择自己喜欢的声音,可以使用 input 关键字定义一个变量,指定类型为 string。该变量将存储用户选择的声音文件的文件名。以下是修改代码的方法:
input string Alarm1 = "00:00:00"; input string Alarm2 = "00:00:00"; input string Alarm3 = "00:00:00"; input string Sound = ""; // User-selected sound filename
通过这种设置,用户可以输入他们希望用于提醒的声音的文件名。然后,您可以使用该声音变量在触发提醒时播放所选的声音。
由此可见,按照伪代码一步步进行操作是多么重要。首先,我们要确定哪些变量对 EA 按预期运行至关重要。这些变量构成了项目的基础。第二步是用户交互部分,用户可以选择输入自己喜欢的声音文件和所需的提醒时间。遵循这种有条不紊的流程,可确保有序地处理项目的每个方面,从而获得更透彻的理解。与 AI 的互动有助于完善和明确项目要求,从而实现更稳健的实现,尽管现阶段提供的代码可能不是最终版本。
我们现在继续进行第三步,即通过跟踪伪代码的进展来关注交易时区。这让我们思考以下问题:
- EA 如何跟踪设定提醒时间与当前时间之间的时间差?
- 到达提醒时间后,会发生什么?
通过回答这些问题,开发过程将得到指导,而 EA 将能够监控指定的提醒时间,并在需要时采取适当的行动。
AI 的回应:
为了不断比较当前时间和指定的提醒时间,我们可以使用一个循环,在交易平台的每个分时上运行。在这个循环中,我们将检查当前时间是否与用户设置的任何提醒时间一致。
// Inside the OnTick() function // Get the current time datetime currentTime = TimeLocal(); // Check if the current time matches any of the alarm times if(currentTime == StringToTime(Alarm1) || currentTime == StringToTime(Alarm2) || currentTime == StringToTime(Alarm3)) { // Trigger the audio alert PlaySound(Sound); }
在这段代码中:
- 我们使用 TimeLocal() 获取当前时间。
- 我们使用 StringToTime() 将当前时间与用户指定的每个提醒时间进行比较。
- 如果当前时间与任何提醒时间一致,我们就会使用 PlaySound(Sound) 播放所选声音,从而触发音频提醒。
随着我们经历伪代码中描述的各个阶段,AI 的反应越来越精确。这就突出了有条不紊地将项目划分为可行阶段的重要性。 AI 的每一步解释都与我们的项目目标更加吻合。它帮助我们更好地理解如何处理项目中比较困难的方面,以及如何处理开发过程本身。
事实证明,与 AI 反复接触是一个非常有用的过程。除了帮助我们完成项目,它还让我们进一步了解如何处理项目的复杂性。在与 AI 互动的过程中,我们对如何有效处理项目的多个方面有了更深入的了解。
当我们过渡到伪代码的第四步时,出现了需要考虑的新问题:
- 如何将录制的语音信息添加到我们的 MQL5 项目中?
- 如何播放选定的声音文件来提醒交易者?
要解决这些问题,需要将音频文件集成到我们的 MQL5 项目中,并实现在指定提醒时间触发播放所选声音文件的逻辑。让我们进一步探讨这些方面,以确保我们的提醒交易时钟发挥预期功能。
AI 的回应:
要在 MQL5 项目中添加语音信息,请按照以下步骤操作:
- 准备好兼容格式(如 WAV)的语音信息录音。
- 在 MetaTrader 5 安装目录中,您会发现一个名为 "Sounds" 的文件夹。打开该文件夹。
- 将声音文件(WAV 格式)复制到 "Sounds" 文件夹。如果声音文件的格式不同(如 MP3),则需要先将其转换为 WAV 格式,然后再复制到 "Sounds" 文件夹。
- 将声音文件复制到 "Sounds" 文件夹后,就可以在 MetaTrader 5 中使用了。在 MQL5 代码中使用 PlaySound() 等函数时,您可以通过文件名引用声音文件。
- 使用 PlaySound() 函数触发语音信息的播放。
- 例如,如果您将名为 "alert.wav" 的声音文件复制到 "Sounds" 文件夹中,就可以在 MQL5 代码中这样播放该声音文件:
PlaySound("alert.wav");
将 "alert.wav" 替换为声音文件的文件名。确保文件名完全匹配(包括大小写),以避免在 MQL5 代码中引用声音文件时出错。
就是这样!现在,您的声音文件应已成功添加到 MetaTrader 5 中,并可在您的 EA 交易或脚本中使用。
AI 做出的所有回应都为解决该项目提出的问题提供了方法。在我们的项目中,这种有条不紊的方法是与 AI 合作的最佳方式,而不是期望 AI 完成所有工作,因为这通常是不准确的。重要的是要认识到,人工智能(AI)不是来取代人类的;相反,它可以提供帮助和见解,从而提高人类的专业知识和创造力,让工作变得更轻松。您可以通过这种方式利用 AI 与他们合作,提高他们的工作效率和解决问题的能力,并更好地了解他们的项目。
3.1.3. 迭代测试
有了人工智能,我们现在可以更好地了解如何推进我们的项目,因此下一步就是进行逐步测试和调试。使用脚本分析代码性能并查找错误或问题是最有效的调试方法。通过将代码分割成更小的部分并分别进行测试,可以更成功地隔离问题并确保整个程序按预期运行。反复测试和调试代码对于提高代码质量、保证代码在实际情况下的可靠性和功能性至关重要。
现在,我们来测试一下用户输入的所有要求是如何实现的:
// Define input variables input string Alarm1 = "00:00:00"; // Default value for first alarm input string Alarm2 = "00:00:00"; // Default value for second alarm input string Alarm3 = "00:00:00"; // Default value for third alarm input string Sound = "alert.wav"; // Default sound file //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { // Initialization function, executed once when the EA is launched return 0; // Return 0 to indicate successful initialization } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { // Deinitialization function, executed before the EA is removed // Perform any cleanup or necessary actions here } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { // Convert alarm strings to datetime objects datetime first_Alarm = StringToTime(Alarm1); datetime second_Alarm = StringToTime(Alarm2); datetime third_Alarm = StringToTime(Alarm3); // Get current local time datetime Time = TimeLocal(); // Check if current time matches any of the alarm times if(first_Alarm == Time || second_Alarm == Time || third_Alarm == Time) { // Play sound if any alarm time is reached PlaySound(Sound); } }
解释:
该代码片段是一个测试平台,用于了解用户输入将如何在我们的程序中发挥作用。它定义了输入变量 Alarm1、Alarm2、Alarm3 和 Sound,允许用户指定提醒时间和选择声音。在初始化过程中,这些变量的值会打印到控制台,为用户输入提供可视化确认。占位函数 OnInit() 和 OnDeinit() 分别处理 EA 初始化和去初始化,而 OnTick() 则作为占位处理分时。
输出:
在确认代码正常运行后,我们可以继续测试程序的其他部分。例如,假设我们想使用脚本进行测试。我们可能需要测试的一个方面是打印本地时间。该测试将有助于确保我们的程序准确读取和显示当前时间,这对于在指定时间触发提醒至关重要。
示例:
void OnStart() { // Get the current local time datetime localTime = TimeLocal(); // Print the local time to the console Print("Current Local Time: ", localTime); }
解释:
此代码片段定义了 OnStart() 函数,当脚本开始在 MQL5 中运行时会触发该函数。它使用 TimeLocal() 函数获取当前的本地时间,然后使用 Print() 函数将时间和说明性信息打印到控制台。这样,开发人员就可以在测试和调试过程中快速验证时间读取和输出功能的准确性。
通过这段代码,我们成功地测试了从计算机中准确获取本地时间的能力。这可确保我们的程序能够有效地访问和利用本地时间数据,这对我们项目中各种基于时间的功能至关重要。同样,我们也应将这种测试和调试方法应用到其他代码中,确保每个组件在集成到更大的项目中之前都能发挥预期的功能。
我们从计算机中精确获取本地时间的能力已通过此代码成功测试。因为我们项目中的许多基于时间的功能都依赖于我们程序访问和使用本地时间数据的能力,这就保证了它能够做到这一点。在将每个部分整合到整个项目之前,我们都要确保每个部分都能按预期运行,因此,我们还应将这种测试和调试方法用于代码的其余部分。
既然代码的每一步都经过了测试,您可以要求 AI 将测试过的代码段整合到一个有意义的程序中。不过,在某些情况下,如果没有达到您的预期,您可以自行进行必要的调整。AI 不断提供指导和支持,简化了您的工作,节省了大量时间。AI 的回应:
// Define input variables input string Alarm1 = "00:00:00"; // Default value for first alarm input string Alarm2 = "00:00:00"; // Default value for second alarm input string Alarm3 = "00:00:00"; // Default value for third alarm input string Sound = "alert.wav"; // Default sound file //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { // Initialization function, executed once when the EA is launched return 0; // Return 0 to indicate successful initialization } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { // Deinitialization function, executed before the EA is removed // Perform any cleanup or necessary actions here } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { // Convert alarm strings to datetime objects datetime first_Alarm = StringToTime(Alarm1); datetime second_Alarm = StringToTime(Alarm2); datetime third_Alarm = StringToTime(Alarm3); // Get current local time datetime Time = TimeLocal(); // Check if current time matches any of the alarm times if(first_Alarm == Time || second_Alarm == Time || third_Alarm == Time) { // Play sound if any alarm time is reached PlaySound(Sound); } }
该代码块定义了 OnTick() 函数,在图表的每个分时上执行。它是 EA 功能的核心。它的作用是:
- 它使用 StringToTime() 函数将提醒时间字符串(Alarm1、Alarm2、Alarm3)转换为日期时间对象。
- 它使用 TimeLocal() 函数获取当前的本地时间,并将其存储在 Time 变量中。
- 它会检查当前时间是否与任何提醒时间一致。如果是,则使用 PlaySound() 函数播放指定的声音。
请注意:要编辑输入内容,请按 F7 按钮。
结论
总之,本文全面概述了基于项目的学习对 MQL5 的掌握。通过将复杂的概念分解为易于管理的项目,学员可以加深对 MQL5 编程的理解并提高其熟练程度。通过使用 AI 工具、迭代测试和逐步伪代码,开发人员可以高效地创建 EA 交易并改进其交易策略。请记住,学习 MQL5 是一场马拉松,而不是短跑,接受基于项目的学习是精通 MQL5 的第一步。因此,作为一名开发人员,要勇于承担项目,尝试编写代码,并不断学习和进步。
本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/14651



