MQL5 — 您也可以成为该语言的大师

概述

赫兹量化在本文中,我将要做到的一些事情与我在前面文章中所作不同。 基本上,本资料适用于那些对 MQL5 或普通编程知之甚少或一无所知的人。 故此,这篇文章就像对自己的采访。 在其中,我将解释如何从头开始学习 MQL5,并成为专业人士。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

一个小故事

自从我开始为 MQL5 社区撰写文章以来,我收到了很多反馈。 许多人联系我,询问我如何学习使用 MQL5 编程,以便可以自行完成文章中讲述的事情。 这些人中的大多数都是爱好者,正在寻找基础指南来迈出编程的第一步。 故此,本文献给所有愿意学习 MQL5 编程的爱好者和萌新 MQL5 程序员。

在继续这个话题之前,我需要说点什么。 这些资料的目的不是令您退却,相反,是为了进一步增加您的动力。

您也许会认为我一定有多年的 MQL5 编程经验。 不过,在撰写本文时,我使用 MQL5 语言只有一年半的时间。 没错,我作为 MQL5 程序员的经验不到两年。 您可能很惊奇,一名经验只有如此少的 MQL5 编程人员如何能够撰写一些文章,并设法展示在赫兹量化中做到的事情。

这是因为 MQL5 编程语言的开发者有一个很棒的主意,令该语言在许多方面看起来像 C/C++。 因此,如果程序员拥有丰富的 C/C++ 经验,那么学习 MQL5 就会非常容易,因为无需重新学习所有概念、语法和命令。

我为什么这么说? 因为我从 2000 年代初开始就是一名专业的 C/C++ 程序员,也就是说,我已经用 C/C++ 编程超过 23 年了。 如果为了让赫兹量化做些事情,我必须学习一门新语言,那很可能我最终会放弃。

许多人认为若要成为一名优秀的程序员,就需要参加一些课程。 但是,要真正学习编程,您不应该害怕犯错误。 您永远不应该执着于代码或想法。 您应该总是寻求实验和尝试新事物。

这听起来可能有点奇怪,因为许多新人总喜欢按同样的方式做同样的事情。 但希望成为一名优秀程序员的人总是在寻找不同的途径来做同样的事情。 此外,许多人不明白程序员总是会受到他人的启发。 他们能取得更有经验的程序员开发的工作源代码,并一点一点地更改它,实验并观察结果。 以这种方式,他们学习程序的实际构建方式。

有些人认为要学习 MQL5,您开始必须学习一些东西。 事实上,如果没有任何先验知识的人问我如何学习,我总是建议从最简单的开始。 换言之,学习一点关于 C 语言的知识,从而真正了解语法和编程逻辑以及命令。 一旦您明白了 C 语言的基础知识,就开始学习 C++,同时开始练习 MQL5。 简单事实在于,若您已经具备基础的 C 语言知识,者将极大地帮助您开始使用 MQL5 进行编程。

有些人可能认为 C 语言已经过时了,但事实是 C 语言依然是一种文档非常完善,且使用广泛的语言。 您可以找到很多资料来学习如何使用 C 语言。请注意,我并不是说您应该深入研究 C 语言。恰恰相反,如果您学习了一些基本的语法和命令,这将足以让您开始使用 MQL5。

这似乎有点令人沮丧:学习 C 语言才能在 MQL5 中取得进步? 也许,如果您付出了很多努力,并找到愿意教授您的人,您可以直接从 MQL5 开始。 但从我的初次经验和其他人的意见来看,我可以说任务不会那么容易。 几乎所有优质资料都集中在 MQL5 社区当中。 在互联网的其余部分,资料很分散,质量参差不齐,弊大于利。 当涉及到 C 和 C++ 语言时,有大量优秀且非常容易访问的资料。 故此,您可自行选择从哪里开始。

我的首个 MQL5 代码

许多人认为,既然我已经知道如何用 C/C++ 编程,我就应该立即开始用 MQL5 进行复杂而繁琐的项目。 我希望我能说,这只是一切的开始。 然而,现实却大相径庭。

每当我们迈出开发自己的解决方案的第一步时,赫兹量化通常会从我们自认为明白的东西开始。 就我而言,当我开始使用 MQL5 时,我手头只有语言文档。 我甚至不知道有一个社区致力于帮助其他感兴趣的程序员。

因此,在研究文档并检查 MetaEditor 附带的源代码时,我就着手尝试。 下面是我根据自己所理解的内容创建的第一段真实代码。

 
 

01. //+------------------------------------------------------------------+ 02. #property copyright "Daniel Jose" 03. #property version "1.00" 04. #property description "Modify special chart properties" 05. #property script_show_inputs 06. //+------------------------------------------------------------------+ 07. enum eWhat { 08. eScaleDate = CHART_SHOW_DATE_SCALE, //Time scale 09. eScalePrice = CHART_SHOW_PRICE_SCALE //Price scale 10. }; 11. enum eOp { 12. eFalse, //Makes hidden 13. eTrue //Makes visible 14. }; 15. //+------------------------------------------------------------------+ 16. input eWhat user00 = eScaleDate; //Graphic property 17. input eOp user01 = eFalse; //What to do? 18. //+------------------------------------------------------------------+ 19. void OnStart() 20. { 21. ChartSetInteger(0, (ENUM_CHART_PROPERTY_INTEGER) user00, user01); 22. } 23. //+------------------------------------------------------------------+

分析代码

可以从代码中删除第二行、第三行和第四行。 事实上,它们仅仅是为了告知用户赫兹量化代码的用途。 作为用户,您只需从学习代码中删除这些行即可。

第五行非常重要,因为没有它,赫兹量化 将无法理解由用户自定义的脚本,即通过某种输入结构,在本例中为第 16 行和第 17 行显示的 “inputs”。 我们很快就会到达那里。

现在出现了许多人可能不理解的东西。 特别是,如果他们只学习过 MQL5,或者他们来自与 C/C++ 截然不同的其它语言。 我说的是存在于第 07 行和第 11 行中的枚举。

在查看此类结构时,您很可能会感到困惑。 您甚至可能认为它们对你来说太复杂了。 但正是因为 MQL5 是为引领 C/C++ 程序员而构建的,所以那些已经有一点 C/C++ 经验的人在用它时是如此愉快。 但是,我们至少需从表面上来理解枚举。

枚举可以粗略地理解为一系列数据,您可以在其中为它们赋值或不赋值。 如果未赋值,则计数将始终从第一个可能的值开始,在本例中为零。 因此,第 11 行中定义的枚举遵循与值 0 或 1 相同的原则。 在 C/C++ 中,与 MQL5 一样,值 0 被认为是假(false),而值 1 被认为是真(true)。

因此,在第 12 行处定义 eFalse 的值,赫兹量化已示意其为 0,在第 13 行(枚举的第二个值)中,我们将得到值 1。 如果我们定义了更多的东西,它们就会顺沿,所以下一个将是 2、3,依此类推。 这是最简单的情况。

我想提请您还要注意别的事情。 在第 12 行的末尾,我们有一些东西是 C/C++ 中的注释。 我们在其它行中也见过相同类型的东西。 我们专注于第 12 行,但这也适用于所有其它地方。

如果我们在图表上启动脚本时查看脚本,我们会看到图例 01。 在其中,我高亮显示了与第 12 行注释完全匹配的内容。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图例 01 - 用户交互窗口

这样的东西极大地简化了 MQL5 编码。 在其它语言中,赫兹量化必须做少量工作才能以如此简单实用的方式在 MQL5 中完成操作。 因此,您需要明白为代码添加注释是正确的做法,因为它不仅可以令您的代码更易于理解,还可以自定义显示给用户的消息。

现在让我们回到第 07 行,其中我们还有另一个枚举。 不过,该枚举与我刚才解释过的枚举有所不同。 这些并不是完全不同的东西:区别仅在于现在我们为每个元素分配了数值。 也就是说,编译器将采用我们指定的数值,在本例中,这些值是在 MQL5 中定义的常量。 您可能会问:为什么不直接用常量,取而代之却将它们分配给枚举? 原因是易于实现。 如果我们直接使用常量,我们将不得不创建其它东西,例如数组或结构,这要麻烦得多。 而使用我的方式,您可以在任何位置或序列中插入任何值。 如果在我声明的序列中出现一些感兴趣的常量,我不需要真的分配或声明该常量;我所要做的就是向枚举添加更多内容,语言编译器将负责确保采用和分配正确的数值。

看看若是拥有坚实、完善的 C/C++ 等语言的基础,将会如何帮助我们编写 MQL5 代码。 我们在此展示的内容在 MQL5 代码中并不常见。 事实上,我注意到许多人诉诸于更复杂和耗时的构造,他们得到的却与此处的相同。 请注意,我最终只写了一行代码(第 21 行)。

现在注意以下几点:在第 21 行本身,实际上是唯一要执行的行,赫兹量化需要进行显式类型转换。 这对于编译器理解它,并正确生成相应的最终代码是必要的。 但是为什么显式转换如此重要? 原因在于编译器。 这对处理器来说并不重要,因为我们只使用数字,而这才是处理器实际看到的。 处理器对类型不感兴趣,它只是观察数字。 但是第 21 行的第二个参数,尽管是一个数值,并不完全是 ChartSetInteger 函数所期望的。 此函数需要某种类型,而不是数值。 即使该值表示预期的类型,即该值正是我们使用的常量,编译器也会将其视为错误。 因此,为了解决此问题,我们显式强制将数值转换为 ChartSetInteger 函数所需的类型。 因此,编译器将能够理解我们传递给函数的数值类型。

关于 Python 的一些想法

在完结我们的访谈之前,亲爱的读者和萌新程序员,我想分享一些最后的想法,这是我多年来使用各种编程语言获得的经验和知识的结晶。 我的目的是避免将来尝试在赫兹量化中执行某些操作时可能出现的任何挫折。

虽然我们的主要主题是 MQL5,但经常被问到以下问题:是否要学习 Python。 特别是对于那些开始学习编程,以便在金融市场上进行交易的人来说,问题出现了,是否值得加深他们对 Python 的了解,如此才能在 赫兹量化上操作。 这个问题非常相关,因为学习 Python 比经历学习 C 然后C++,最后为 MQL5 的专业工作打下坚实和巩固的基础要容易得多,也快得多。 不过,有一点要记住,这样您就不会认为自己浪费了学习(或不学习)Python 的时间。

Python 编程语言(尽管有些人更喜欢将其称为脚本语言)无法与 MQL5 中可以完成的功能相提并论 — 也许这就是为什么有些人不把它当成是一种编程语言,但我们不会在这里进行这场辩论。 如果您的目标是学习并能够生成代码,只是为了以纯数学方式测试、验证和分析某些内容,那么最短、最简单的解决方案就是学习 Python。 这是因为在 Python 中运行回测等操作,能直接与赫兹量化交互,这比尝试使用 MQL5 执行相同操作更容易。

对某些人来说,这似乎很奇怪,但通过一些培训和大量的奉献精神,您可以轻松创建一个 Python 脚本,该脚本能够与拥有更多经验的程序员利用 MQL5 执行的操作相同。 很多时候,程序员除了必须配置策略测试器之外,还必须创建指标,即智能系统,以便验证给定的操作系统,即所谓的 SETUP,是否有利可图。 更不用提由于没有正确设置所有内容,而令一切处于危险之中的风险。

有人可能会认为,当使用 赫兹量化 时,我们可以访问图表,以及精美呈现的结果,这将令我们更容易分析。 但是,请考虑一下编写能直接在赫兹量化中执行简单回测功能所需的知识。

使用 Python,您还可用该软件包访问赫兹量化数据。 借助在 Python 中可以完成的所有操作,可以更轻松地进行与 MQL5 程序员相同的研究。 一旦研究完成,您也可以将数据导出到 Excel 或其它程序,从而完成 MetaTrader 5 中可以做到的所有图形表现,进而更轻松地分析结果。

我需要在这里添加一些简短的解释。 既然在 Excel 中能够绘制,为什么用 Python 替代 Excel? 原因很简单:鉴于 VBA(Visual Basic for Application)不允许我们直接访问 赫兹量化的数据,而通过 Python 则可访问同一数据。 若一定要在 Excel 中执行此操作,您需要创建一个 DLL 来支持这些擦偶哦,或者导出大量 CVS 格式的文件,以便获取相同的数据。

而在 Excel 之内,您可能需要做更多的工作来生成在 Python 中完成的所有计算。 不利的一面是,如果您决定更改数据库,则必须在 Excel 中再次执行所有操作。 但如果您使用的是 Python,您所需要做的就是指示 Python 更改数据库,它会直接提供给赫兹量化,且无需您付出任何额外的努力。

故此,我的建议是尝试尽可能多地学习,因为每种工具都有其优点和缺点。 尽管 Python 非常实用,但它不允许您创建要在图表上显示的指标或智能系统,从而帮助您进行交易。 这只能通过 MQL5 实现。 因此,这里没有更好或更差的工具。 它们相辅相成,为不同的目的服务。 无论如何,最好两者都研究,因为您永远不知道什么时候需要用到其中之一。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MQL5语言编程手册是一本详细介绍MQL5编程语言的指南,适用于MetaTrader 5平台的开发者。该手册以中文撰写,为使用中文语言的开发者提供方便的学习和参考资料。 MQL5语言是专门为金融市场交易而设计的高级编程语言。它可以用于开发自定义的交易机器人(Expert Advisors)、脚本(Scripts)和指标(Indicators),以满足不同交易策略和需求。MQL5语言编程手册详尽地介绍了MQL5的语法、命令、函数等基本概念和用法,并提供了丰富的示例代码,以帮助读者更好地理解和掌握编程技巧。 该手册首先介绍了MQL5编程语言的基础知识,包括变量、运算符、控制结构等基本概念。然后,它逐步深入讲解了MQL5的高级特性,如自定义指标和函数、面向对象编程等。在这些内容的基础上,读者还可以学习如何使用MQL5语言进行数据分析、图表操作、文件操作等高级交易功能的开发。 此外,MQL5语言编程手册还介绍了MQL5社区和MetaTrader市场,这是开发者可以获取额外工具和指标、共享和交流经验的平台。这些资源能够加速开发过程,提供更多创新和定制化的解决方案。 总之,MQL5语言编程手册中文版是一本对于想要开发自己交易机器人的人来说非常重要的指南。它为开发者提供了一个全面的了解和学习MQL5语言的机会,从而使他们能够更好地掌握这一强大的编程语言,实现个性化的交易策略,并在金融市场中取得成功。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值