文章 "MQL5 简介(第 7 部分):在 MQL5 中构建 EA 交易和使用 AI 生成代码的初级指南"

 

新文章 MQL5 简介(第 7 部分):在 MQL5 中构建 EA 交易和使用 AI 生成代码的初级指南已发布:

在我们的综合文章中,了解使用 MQL5 构建 EA 交易的终极初学者指南。逐步学习如何使用伪代码构建 EA,并利用 AI(人工智能)生成代码的强大功能。无论你是算法交易的新手,还是想提高自己的技能,本指南都为你提供了创建有效 EA 的清晰路径。

一下子学习 MQL5 的所有来龙去脉可能会让您不知所措,相反,把重点放在项目上可以使学习过程更加易于管理和令人愉快。首先要掌握变量、循环、条件、函数等基本概念,以及前面文章中讨论过的所有其他基本概念。在扎实掌握了这些基础知识之后,就可以开始探索自己感兴趣的项目,例如构建 EA 交易或自定义指标。 每个项目都会给你带来新的困难,让你学到无价的经验。通过基于项目的学习,你可以将理论知识应用到实际场景中,从而更好地掌握 MQL5 的复杂性。在参与各种项目的过程中,你将会逐步掌握处理 MQL5 编程复杂性所需的知识和能力。

接受这种学习方法,你就有能力以稳定和自信的方式提升自己,成为一名程序员。您不会被 MQL5 的庞大功能所吓倒,而是会一个项目一个项目地学习,逐步提高您的熟练程度。因此,接受基于项目的学习之旅吧;这是掌握 MQL5 最可靠的方法。 我决定在整个系列中使用基于项目的学习方法,因为它非常有效。我们不会让你一头扎进MQL5的复杂性中,而是专注于让你通过经验学习的实际项目。在现实世界的项目中工作将帮助你更好地理解这个主题,并培养有用的技能来改进你的交易策略。

我们将从基础的、对初学者友好的项目开始,逐步发展到更复杂的项目。通过遵循这种有条不紊的方法,您可以确保在进入更复杂的主题之前,对 MQL5 编程有扎实的理解。你会从每个项目中获得新的技能和想法,这将帮助你逐渐提高。我们将为本文所做的项目将作为 MQL5 中生成 EA 交易的顺序过程的一个实践示例。我们还将探讨在 MQL5 的背景下优化 AI 生成代码的优势。

作者:Israel Pelumi Abioye

 

很有启发性的信息,先生,非常感谢。

 
Clemence Benjamin #:

先生,这些信息很有启发性,非常感谢。

不客气
 

非常有用的课程。我期待着这一系列课程能继续下去,并提供更多项目 和更深入的进展,以进一步学习 MQL 编程。很难找到关于这种语言以及如何有效应用这种语言的循序渐进的介绍。

感谢您的出色工作

 
Oscar Hayman 项目 和更深入的进展,以进一步学习 MQL 编程。很难找到逐步介绍这种语言以及如何有效应用这种语言的内容。

感谢您的出色工作

你好,奥斯卡。感谢您的赞誉。
 
您好!首先感谢您提供这份指南。本周早些时候,我看到了这本指南,并仔细阅读了它,以寻找快速、简单地了解 MQL5 的方法,您的工作非常有用。我有一项非常具体的任务要做,现在我正在寻找完成任务的方法。我知道我的交易策略,我知道我想如何通过自动化来简化我的交易,我知道我的算法/机器人/EA 要做什么,我已经将整个过程分解为简单的步骤,因此我知道如何将其转换为 MQL5。我想自己编程(而不是花钱请人编写或请 GPT 帮我编写),因为我想知道如何在需要时随时更改代码。我会试着写下来,但似乎在很多场合我都会有一些具体的问题。有没有 MQL5 论坛?或者其他用户交流思想的平台?非常感谢
 
Rece_w_kieszeniach 交易策略,我知道我想如何通过自动化来简化我的交易,我知道我的算法/机器人/EA 要做什么,我已经将整个过程分解为简单的步骤,因此我知道如何将其转换为 MQL5。我想自己编程(而不是花钱请人编写或请 GPT 帮我编写),因为我想知道如何在需要时随时更改代码。我会试着写下来,但似乎在很多场合我都会有一些具体的问题。有没有 MQL5 论坛?或者其他用户交流思想的平台?非常感谢
好的,我看到了 MQL5 论坛,还有其他值得注意的吗?谢谢!
 
Rece_w_kieszeniach #:
我看到了 MQL5 论坛,还有其他论坛吗?谢谢!
您好,Rece,很高兴您觉得这篇文章对您有帮助。如果您想自己编写程序,MQL5 论坛仍然是回答您问题的最佳场所。如果您的 EA 有任何问题,请随时联系我。
 
我一直在关注你的系列文章,我必须说,你的解释非常棒,我期待着从这样基于项目 的文章中学到更多东西。
 
Oluwatosin Mary Babalola 项目 的文章中学到更多东西。

你好,Oluwatosin,我期待着与你分享下一部分内容。如果您对文章有任何疑问,请随时联系我。

 

为什么初学者指南会立即教他们错误地编码呢?

首先,当一个人开始写一些更复杂、更现实的东西时(但仍然使用相同的技术),效率问题就会显现出来。在每个 tick 中,相同字符串的StringToTime 转换都要调用三次。可以为人工智能进行清理--在全局变量 中进行一次转换:

input string Alarm1 = "00:00:00"; // 第一个警报的默认值
input string Alarm2 = "00:00:00"; // 第二次警报的默认值
input string Alarm3 = "00:00:00"; // 第三警报的默认值
input string Sound = "alert.wav"; // 默认声音文件

// 为持久值定义全局项
datetime first_Alarm, second_Alarm, third_Alarm;

int OnInit()
{
   // 初始化函数,启动 EA 时执行一次
   // 每个输入只进行一次转换
   first_Alarm = StringToTime(Alarm1);
   second_Alarm = StringToTime(Alarm2);
   third_Alarm = StringToTime(Alarm3);
   return 0; // 返回 0 表示初始化成功
}

void OnTick()
{
   // 获取当前当地时间
   datetime Time = TimeLocal();

   // 检查当前时间是否与任何警报时间一致
   if(first_Alarm == Time || second_Alarm == Time || third_Alarm == Time) // 这里还有一个逻辑错误(见下文)
   {
      // 达到任何闹钟时间时播放声音
      PlaySound(Sound);
   }
}

其次,无法保证刻度时间与给定的警报时间相匹配,代码很可能会在if 时间 中漏掉这些时间。即使我们在 OnTimer 处理程序中进行了检查,也不能保证我们能 "捕捉 "到必要的时刻,因为所有事件(OnTick、OnTimer 等)都来自队列,队列会尽快清空,但如果其他程序正在进行繁重的计算,可能会减慢速度。因此,必须彻底重写检查警报发生的条件,至少在没有额外变量的情况下是不可能的(将来建议在类下重写警报,当然不在本文中讨论)。