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

北京什么白癜风医院最好 http://www.xxzywj.com/m/

概述

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

编辑

切换为居中

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

一个小故事

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

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

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

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

我为什么这么说?因为我从年代初开始就是一名专业的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.#propertycopyright"DanielJose"03.#propertyversion"1.00"04.#propertydescription"Modifyspecialchartproperties"05.#propertyscript_show_inputs06.//+------------------------------------------------------------------+07.enumeWhat{08.eScaleDate=CHART_SHOW_DATE_SCALE,//Timescale09.eScalePrice=CHART_SHOW_PRICE_SCALE//Pricescale10.};11.enumeOp{12.eFalse,//Makeshidden13.eTrue//Makesvisible14.};15.//+------------------------------------------------------------------+16.inputeWhatuser00=eScaleDate;//Graphicproperty17.inputeOpuser01=eFalse;//Whattodo?18.//+------------------------------------------------------------------+19.voidOnStart()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行注释完全匹配的内容。

编辑

切换为居中

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

图例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或其它程序,从而完成MetaTrader5中可以做到的所有图形表现,进而更轻松地分析结果。

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

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

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




转载请注明:http://www.aierlanlan.com/rzdk/7243.html

  • 上一篇文章:
  •   
  • 下一篇文章: