English Русский Español Deutsch 日本語 Português
视频:简单自动交易 — 如何利用 MQL5 创建简单的智能交易系统

视频:简单自动交易 — 如何利用 MQL5 创建简单的智能交易系统

MetaTrader 5EA交易 | 8 八月 2022, 15:57
1 861 0
Raimund Bauer
Raimund Bauer

第 1 部分 – 如何创建一个简单的智能交易系统


所谓的智能交易系统就是我们现在所要寻找的。 智能交易系统是一个自动化应用程序,可以在 MetaTrader 中运作,并可自行开仓和平仓。

在本视频中,我们将学习如何按照最基本的形式创建智能交易系统。 在本视频中,我们将学习如何按照最基本的形式创建智能交易系统。 之后,从模板“继续”中单击“文件/新建/智能交易系统(模板)”,我将此版本称为 “SimpleExpertAdvisor”。然后,单击“继续”、“继续”、和“完成”,然后我们就完成了!

这个版本对于人类是可读的,当我们编译它时,我们为 MetaTrader 创建了一个可读版本。它在此已可运行,所以我们打开一个新的图表窗口,并将新文件拖到图表上。 但它目前缺乏逻辑,我们将在接下来的视频中添加逻辑。


第 2 部分 – 什么是函数


MQL5 使用函数来完成自动化处理,我们的智能交易系统模板中已经含带了一些函数。 “OnInit” 函数是智能交易系统的初始化函数,当您将智能交易系统放在图表上时,它只运行一次。 它会有一个返回值,因此您可以检验 “OnInit” 函数是否成功。

它将返回某个值,其会告诉我们“初始化”过程是否正常。 我们还有一个名为 “OnDeinit” 的函数,在退出智能交易系统之前负责善后清理。 它不返回任何东西,这就是 “void” 的意思,“void” 在函数无需返回数值时使用。

在这种情况下,原因很简单:“OnDeinit” 是我们的程序运行的最后一道关卡,程序之后就关闭了,我们无论返回什么都没用了。 还有就是 “OnTick” 函数。 每当图表上的价格发生变化时,此函数都会运行。 大多数编码逻辑都是在 “OnTick” 函数里触发的,每当图表上的价格发生一次变化时,在函数体的这两个括号之间的所有内容都将执行。 我们现在可以减掉模板的其余部分。

为了简化我们的示例,我们只需要 “OnTick” 函数,它调用另一个函数,并显示本地时间。 当我们打算在图表上查看一些东西时,我们会用到 “Comment” 函数。 这将在图表的左上角显示用户的期许值。 它采用圆括号中的所谓参数,譬如可以是 “Hello” 这样的文本,这已经是一个完整的智能交易系统了。

我们现在可以编译它,单击此处的按钮,返回 MetaTrader,并将 “SimpleExpertAdvisor” 拖拽到图表上。 当我点击“确定”按钮进行确认时,它将显示我们在这里设置的文本 “Hello”。 但 “Comment” 函数可以做更多的事情。

我们想显示本地时间,所以让我们说“本地时间是”。用逗号分隔,我们可以传递多个参数,在我们的例子中是 “TimeLocal”。我们重新编译代码,现在智能交易系统会说 “本地时是”,且在我们的图表上立即显示本地时间。

在本视频中,您学到了内置函数,如 “OnTick” 函数,该函数会在价格变动时调用。 您还学到了如何调用 “Comment” 函数输出文本和计算值。 例如,您只需几行 MQL5 代码就能令 MetaTrader 5 打印出“本地时间”,然后是图表上计算出的时间。


第 3 部分 – 如何使用策略测试器

我们打算在本视频中教授如何使用策略测试器。 这是一个策略测试,也被称为“回溯测试”。我们基于历史数据运行该智能交易系统,看它是否能赚钱。 我们看看如何做到这一点。 上次,我们曾制作过一个简单模板,打印文本 “Hello MQL5”。 现在,我们打算用这个简单示例做一个策略测试或回溯测试。

为此,我们点击“查看/策略测试器”,或按 CTRL + R。现在,您应该在这里看到这个“策略测试器”。 我们可以选择一个文件,我们将选取上次制作的简单智能交易系统(SimpleExpertAdvisor),并开始。

我们将要用到的货币对是澳元兑加元(AUDCAD),时间帧 1 分钟,我们还要选择一个自定义区间,在本例中是 2017 年。 MetaTrader 5 的好处之一是您不再需要下载历史数据。 如果您选择的时间段缺少历史数据,它会自动下载。

所有这些都是在后台发生的。 此设置是为了品质。 它被称为 OHLC,代表“开盘价、最高价、最低价、和收盘价”。如果您把鼠标移到蜡烛上,您会看到它的开盘价、最高价、最低价、收盘价。

这就是它看起来的样子。 很多人不知道一支蜡烛的每一次即时报价变化其实是同时发生的多次价格变化合并而来。 即使您在此选择“每一次即时报价”,如果这里的大蜡烛是 24 小时/天的蜡烛,除了开盘价、最高价、最低价、和收盘价之外,这 24 小时内的所有价格变化都将随机计算,即使这里的大蜡烛是 24 小时/天。

如果您想了解更多有关其工作原理的信息,只需打开“帮助”文件,并阅读指导即可。 我从不使用前向测试,因为我认为没有人可以预测未来。 有一个执行设置可以模拟慢速网络,所以我也不准备用它。

您的测试账户中需要有一定额度的资金。 您可以将其设置为美元、欧元、或您喜欢的任何其它货币,以及任何额度。 还有就是杠杆。 如果杠杆很高,您就可以用一个小账户支配更多的资金进行交易。

我们将在稍后的视频中讨论优化。 现在,只需单击“开始”,您就会在图表上看到文本 “Hello MQL5”。 这太简单了,难以令人兴奋,所以我们来修改它,并使用函数 “TimeLocal”

重新编译代码,当我们重新启动测试时,我们将看到系统输出了一个本地时间,它会在每次价格变化时计算。 在本视频中,您学习了如何使用策略测试器,以及如何输出本地时间。 您只用了几行 MQL5 代码就做到了这些。

 

第 4 部分 – 什么是数据类型?


我们将在本视频中谈论数据类型,以及它们是什么。 在这个策略测试中,我们看到当地时间有一个特定的格式。 当您计算一些数值时,使用正确类型的数据是很重要的,所以我们来看看如何做到这一点。

单击小图标或按 F4 开始。 现在您应该看到 MetaEditor,其中您打算从模板里单击“文件/新建智能交易系统(模板)”,“继续”,然后我将此文件命名为 “SimpleDataTypes”,单击“继续”、“继续”和“完成”。 现在,您可以删除 “OnTick” 函数上方的所有内容和此处的两个注释行。

我们从最明显的数据类型开始,即文本。 我们用数据类型 “string” 将文本分配给名为 “text” 的字符串变量,但字符串变量不能用来进行任何计算。 若要解决任何问题,必须使用正确的数值。

例如,为了获得账户余额,我们用到了一个 “double” 数据类型,它是一个浮点类型,还有 “AccountInfoDouble” 函数和这个表达式,都是大写的。 如此应会为我们提供正确的数值,所以我们用 “Comment” 函数来显示 “Text”,后跟计算值。 我们单击此处的“编译”按钮,或按 F7。

操作应该不会有任何问题,如果有,您可以单击此处的小图标,或按 F4 返回到 MetaTrader。 在上一个视频中,我们学习了如何使用这个策略测试器,所以我们单击“文件/策略测试器”,选择新文件 “SimpleDataTypes”,然后开始一个新的测试。 您现在应该看到该值为 100,000.0。

我们在此改变它,并开始一个新的测试,这次您将看到小数点后面的数字,这就是为什么我们在处理浮点类型值时要用 “double”。 您已经从上一个视频中知晓了 “TimeLocal” 函数。 它返回一个类型为 “datetime” 的变量

我们为这个测试生成一个输出,重新编译代码,停止上一个测试,然后开始一个新的测试。 现在您可以看到输出是一种特殊的格式,因此只要在我们需要时间和日期的时候,我们都希望使用 “datetime”。 您可以针对整数选用 “integer” 类型。

在本例中,我们调用 “AccountInfoInteger” 获得帐号。我们会用此常量登录帐户(ACCOUNT LOGIN)。 我们看看它像什么样子。

如果您希望语只句为真或假,则使用 “bool” 类型。 我们看看这个输出是什么样子: "The value is: true."。这是一些常见的数据类型。 如果您单击“帮助”或按 F1 键,您应该可以找到有关 MQL5 当中数据类型的参考文章。 还有一数可用类型,也可以使用复杂的数据类型。

我建议编写一些像这样的小测试程序。 在这个短视频中,您看到了如何只用几行自己编写的 MQL5 代码,就能将不同类型的数据直接输出到图表上。


第 5 部分 – 如何进行计算


在该视频中,我们将讨论简单的数学。 当您使用像这样的智能交易系统进行自动交易时,您肯定需要进行一些数学运算。

例如,在我的例子中,我计算了最大允许持仓量,您可以看到还计算出货币对利润。 我们来学习如何做一些基本的计算! 为此,单击此处的小图标,或按 F4 打开 MetaEditor 窗口。

然后,从模板中单击“文件/新建/智能交易系统(模板)”,“继续”,将文件命名为 “SimpleCalculations”,单击“继续”、“继续”、和“完成”。 现在,您可以在这里删除 “OnTick” 函数上方的所有内容,我们还可以删除两行注释。 首先,我们需要两个 “int” 变量。 "a" 已赋值为 5,"b" 已赋值为 3。

我们调用 “Comment” 函数来为我们展示 “a” 加 “b” 得到什么。 我们点击这里的“编译”按钮。 我们没有遇到任何错误,所以现在可以单击此处,或按 F4 返回 MetaTrader。

当我们进入 MetaTrader 中的“视图/策略测试器”时,我们选择新的 “SimpleCalculations.ex5” 文件,打开可视化模式,然后开始测试。 此处的输出是:结果是 8,因为 5+3=8,所以我们尝试下一个:“a” - “b”,重新编译,然后开始新的测试。 这一次,结果是 2,因为 5 - 3 = 2。

我们把这两个数字相乘:5 x 3 = 15,所以我们要重新编译。 尝试 "a" 除以 "b",您怎么认为? 哦,答案是 1! 我们用的是整数型变量,所以 5/3 = 1,这就是为什么答案是 1。

那么,我们于此没有任何浮点类型值,这是令大多数人抓狂的地方,因为结果与他们期望的不匹配。 我们用 “double” 作为数据类型,重新编译,现在结果是 1.6667,这个结果更好。

如果您测试 “a” 加 “a” 再乘以 “b”,您认为会发生什么? "a" 等于 5,那么 "a" 加 "a" 等于 10。 "b" 等于 3,那么 3 的 10 倍等于 30。

我们按此相加,答案是 20! 这是因为乘法或除法总是优先计算。 如果您想改变这一点,您需要用到括号,因为括号内的内容是在乘法或除法之前计算的,我们这次的结果是 30!

如果您按 F1 键,并打开 MQL5 参考,您将发现许多其它数学函数。 我建议您编写一些像这样的小程序来计算它们是如何工作的,因为您将来会进行更复杂的计算,这会令它变得更难以摸清为何这样有效?以及这是为什么。

在这个短视频中,您已经学会了如何进行非常基本的数学计算,并且您只用几行 MQL5 代码就完成了。

 

第 6 部分 – 如何检查 if 条件


在本视频中,我们将了解某个条件语句 if 是否为真。 当您利用某个像智能交易系统这样的自动化程序时,您需要检查一些条件是真或假,比如 Stochastic 指标值是在虚线之上还是之下,或者价格是在移动平均线之上或之下。

现在我们将学习如何做到这一点。 请单击此小图标,或按 F4 打开 MetaEditor。 在此,您要从模板中单击“文件/新建/智能交易系统(模板)”,然后单击“继续”、“继续”、和“完成”。

现在,您可以删除“OnTick”函数上方的所有内容,我们也可以删除两行注释。 我们从定义两个整数型变量开始:“a” 是 5,“b” 应该是 3。 如果 “a” 大于 5,我希望看到文本 "a is greater than 5";如果不是的话,我可以使用 “else” 语句,因此每当条件不为真时,我希望看到文本 “Conditions not true”。请单击 “Compile”,或按 F7,这里没有遇到错误...

哦,我得到了一个警告,因为我忘记了 “Comment” 语句,但现在一切都好了,所以我们单击此按钮,或按 F4 返回 MetaTrader。 在 MetaTrader 中,我们单击“查看”,然后单击“策略测试器”。您也可以 按CTRL + R。在此,我们要选择文件 “SimpleIfCondition.ex5”。

请打开可视化模式,并开始测试。 现在我们得到消息 “Conditions not true”,因为 “a” 不大于 5,所以我们添加另一个 “if” 语句来检查 “a” 是否等于 5。 现在,我们重新编译代码,停止测试,然后开始新的测试。

这一次,结果显示 “a equals 5”。 如果我们在这里添加另一个 “if” 语句来检查 “b” 是否等于 3,会发生什么? 我们重新编译代码,并运行另一个测试。

现在,我们在屏幕上只看到 “b equals 3”。 本例中的语句被忽略,那么我们可以使用两个 “if” 语句。 在第一个里,我们将检查 “a” 是否为 5,在第二个里我们将查看 “b” 是否为 3。

结果将是 “a is 5 and b is 3”。我们重新编译代码,下次测试时,我们将在屏幕上看到 “a = 5 and b = 3”。

到目前为止,一切都很好,但是如果您在这里添加一些东西,比如 “c = a + b”,然后您单击“编译”,就会得到两处错误。 这是因为每当在 “if” 语句后面有多行时,您需要使用一对花括号“{}”。 我们重新编译代码,现在它可以工作了,在上一次测试中,您将看到消息 “c = 8”。

这是一个非常简单的例子。 有许多其它方法可以检查条件是否为真,但在这段短视频中,您学习了如何使用 “if” 语句和几行 MQL5 代码来检查条件是否为真。


第 7 部分 – 如何使用 switch 和 case 语句


在本视频中,我们将学习如何通过使用 “switch” 和 “case” 语句来改变智能交易系统的操作途径。 这是一个自动智能交易系统。 现在,它没什么作用;它只说“客户想要 RSI。”

我们需要搞清楚如何使用 “switch” 和 “case” 命令更改此值。 单击此处的小图标,或按 F4 键。 现在您应该看到 MetaEditor 窗口。

在该窗口中,从模板单击“文件/新建/专家顾问(模板)”,“继续”,我将此文件命名为 “SimpleSwitchCase”,单击“继续”、“继续”、和“完成”。 我们现在可以去掉 “OnTick” 函数上面的所有内容,和这里的两个注释。 我们首先使用一个名为 “choice” 的整数型变量,该变量的值应为 5。

我们还在 “OnTick” 函数内部使用一个名为 “entry” 的字符串变量。 我们不给它赋值,因为我们想基于此处所选,再来定义 entry 变量。 这是通过 “switch” 语句完成的。

我们需要遍历不同选项以供我们选择,那么如果客户选择了选项 5,我们会说 “the customer wants RSII”。我们在这里使用加号和等号,稍后我会解释原因。 现在,我们只想中断。

一旦这段代码运行,“switch - case”循环就会因为这个 “break” 语句而结束。 我们再加一个。 如果我们选择了选项 4,entry 应该是 “the customer wants Bollinger Bands”。

再有,我们使用 “break” 语句退出将 “switch 和 case” 构造。 我们再加一个。 如果我们的 “choice” 变量值为 3,我们希望我们的 “entry” 语句说 “customer wants MACD”。

这里也可以使用像 1+1 这样的表达式,来替代数字,但是 case 语句不适用于变量,如果用了,就会出现错误。 我们还要添加一个 “default” 选项。 如果所有其它选项都不为真,“default” 将触发,在这种情况下,我们希望 “entry” 语句说 “the customer doesn't know”。

我们在这里添加两个花括号。 然后,我们想调用 “Comment” 函数为 “entry” 生成输出。在您完成后,单击此处的“编译”按钮。

这应该可以在没有任何错误或警告的情况下工作,如果是这样的话,我们可以单击此处的小按钮,或按 F4 返回 MetaTrader。 单击 MetaTrader中 的“查看/策略测试器”,或按 CTRL + R。在此,我们要选择新文件 “SimpleSwitchCase.ex5”。

请打开可视化选项,并开始测试。 下面是我们所做的:“The customer wants RSII”,所以我们将 “choice” 改为 “3”,重新编译代码,然后运行另一个测试。 这一次,我们得到了 “The customer wants MACD”,因为 “choice” 3 与 “MACD” 相同。我们将其改为 11,重新编译代码,看看会发生什么。

这一次,它说 “the customer doesn't know”,因为 11 不在我们的选项列表中,所以这是 default 值。 好了,这些 “switch” 和 “case” 语句是必须有的,若可能的话,您可以删除 “break” 语句。 我们针对前两个 “case” 语句试试此操作,将 “choice” 设置回 5,重新编译代码,然后运行另一个测试。

这一次,我们得到的信息是 "the customer wants RSI,"、"the customer wants Bollinger Bands," 和 "the customer wants MACD."。这是因为我们的 “switch-case” 构造的前三部分已经处理完毕。因此,请记住,如果您在这里省略 “break” 操作符,我们的小智能交易系统将不会退出循环,而是将继续检查下一个条件。

现在,您学会习了如何在这个短视频中使用 “switch” 和 “case” 语句。 您只需要几行 MQL5 代码就可以做到这一点。

 

第 8 部分 – 如何使用 while 循环


在本视频中,我们将学习如何使用 “while” 语句来等待某些事情发生,比如现在。 我们一直等到延迟计数器达到 500000,所以我们学习如何在 MQL5 中使用 “while” 循环。 为此,请单击此处的小按钮,或按 MetaTrader 中的 F4。

现在您应该可以看到 MetaEditor 窗口。 在此窗口中,单击模板中的“文件/新建/智能交易系统(模板)”,然后将文件命名为 “SimpleWhileLoop”。 最后,单击“继续”、“继续”、和“完成”。 “OnTick” 函数上方的所有内容和两个注释行都可以删除。 因此,我们从制作一个延迟计数器(DelayCounter)开始。

我们将使用整数型变量,因为我们只需要整数。 我们将为它赋值 1,然后在 “OnTick” 函数中递增它。 我们说,我们的最小值是 500,000,我们只想在延迟计数器高于这个值时做一些事情。

现在,我们可以调用 “OnTick” 函数中的 “while” 语句来检查延迟计数器是否仍低于最小值。 如果是,我们想做两件事。 首先,我们希望创建一个输出,显示文本 “DelayCounter:”,后跟计算出的当前延迟计数器的值。

然后,我们想为延迟计数器递增 1,并写 “DelayCounter” 等于 “DelayCounter” + 1。 我们单击“查看/策略测试器”,或按 CTRL + R 打开策略测试器。在此,我们选择新文件 “SimpleWhileLoop.ex5”。

请打开可视化模式,并开始测试。 现在您能看到我们的计数器正在工作,当它达到 500,000 时,它会移动,所以一切都很好。 然而,有一个问题:如果您想在 while 循环之外递增延迟计数器,我们仍然可以编译代码而不出错,但是当我们开始下一个测试时,却什么都不会发生。

为什么整个策略测试器都停止工作了? 如果高亮显示 “while” 语句并按 F1 键,您应该会看到“帮助”文件,但由于所有内容仍处于冻结状态,因此不会发生任何事情。 这是因为我们在这里做了一个无限循环。

当第一次即时报价出现,并且该表达式为真时,“while” 语句将开始一个无限循环。 我们想在此刻递增延迟计数器,但因为这个操作我们放在了 “while” 循环之外,所以这永远不会发生,故这个表达式总是为真。 这就是我不喜欢经常使用 “while” 的原因之一;而您可以使用 “if” 检查大多数条件。

我们重新编译代码,重新启动测试,现在我们可以看到延迟计数器正在工作,因为 “if ”语句只会在每次即时报价出现时运行一次。 好了,那么如果您想使用 “while” 语句,您需要确保会有条件来终止您的 “while” 循环的执行,否则您的 “while” 循环会永远运行。 所以,我们再试一次,这一回,它的计数应该像回事。

在这个短视频中,您学到了如何使用 “while” 语句,以及如何避免无限循环。 您自己业已用几行 MQL5 代码完成了这项工作。


第 9 部分 – 如何使用 for 循环


在本视频中,我们将学习如何使用 “for” 循环来更改 “counter” 的值。这个循环能一直计数,直到 10000,那么我们就来查一查如何做到这一点。 若要开始,请单击此处的小图标,或在 MetaTrader 中按 F4。

现在您应该可以看到 MetaEditor 窗口。 在此,您要单击模板中的“文件/新建/智能交易系统(模板)”,然后单击“继续”,我将此文件命名为 “SimpleForLoop”、“继续”、“继续”、和“完成”。

现在,您可以删除 “OnTick” 函数上方的所有内容。 我们还要去掉这两行注释。 我们首先定义一个 “counter” 变量。

这是一个称为 “counter” 的整数型(int)变量,其初始值为 1。 我们还要设置一个结束值(endvalue),在我们的例子中是 10000。 在 “OnTick” 函数内部,我们希望使用 “for” 循环。

如果您以前从未见过 “for” 循环,这可能看起来很奇怪,但事实并非如此。 此处,第一个表达式是起始值,在我们的例子中是 “counter” 值1。 第二个表达式负责检查条件。

在我们的例子中,我们要检查 “counter” 的值是否小于 “endvalue”。在第三个表达式中,我们对 “counter” 做了一些处理。在我们的示例中,我们将其加 1,这就是 “counter++” 的意思。

我们也可以说 “counter” 等于 “counter” 加 1。 只要该条件成立,这些花括号内的任何内容都将运行。 在我们的例子中,我们只是打印文本:“the counter So far, so good”。

请点击此处的“编译”按钮,如果您在此没有遇到任何错误,您可以点击这里的小符号,或按 F4 返回 MetaTrader。 在 MetaTrader 中,我们单击 “查看/策略测试器”,或按 CTRL + R,选择新文件 “SimpleForLoop.ex5”,在此处打开可视化,然后开始测试。 在“日志”选项卡中,您应该能够看到 “counter” 正在工作。

这个数字一路上升到 9999,到目前为止还不错。 您也可以倒计数。 如此,我们需要把这些值切换一下。 现在,“counter” 应从 10000 开始,“endvalue” 则应该是 1。

我们将从 “counter” 值开始,然后从中递减减去1 进行倒计数,直要 “counter” 大于 “endvalue”。我们把这些放在一起,再次开始测试,这次添加倒计数。 好了,这个以 “Counter = 2” 结尾,是因为在第二个表达式中,我们要检查 “counter” 是否大于 “endvalue”。

我们也可以说“大于或等于”,所以我们来重新编译。 最后一个值这次应该是 1。 您还可以使用 “for” 循环令 “counter” 按其它数字递增或递减。

譬如我们选 10。 最后一次编译,这次您可以看到我们的倒计数正在进行,我们的步长是 10。

在这个短视频中,您已经学到了如何使用 “for” 循环来计数、递增或递减 “counter” 值,并且您自己用几行 MQL5 代码对其进行了编码。


第 10 部分 – 如何编写一个简单函数代码


在本视频中,我们将使用 MQL5 创建一个自定义函数,该函数将在每次价格变化时令计数器值倍增。 为此,请单击 MetaTrader 中的小按钮,或按键盘上的 F4。 现在您应该可以看到 MetaEditor 窗口。 从模板单击“文件/新建/智能交易系统(模板)”,“继续”,我将此文件命名为 “SimpleFunction”,单击“继续”、“继续”、和“完成”。

现在,您可以删除 “OnTick” 函数上方的所有内容,和两个注释行。 我们首先为 “counter” 创建一个静态(static)变量。“静态(static)”是一个您以前可能从未见过的词。 在这种情况下,我们使用“static(静态)”来生成一个局部变量,该变量将仅存在于我们的函数中。

我们希望将变量传递给另一个名为 “DoubleTheValue”(数值倍增)的函数,但它还不存在,因此我们需要编制它。 在圆括号内,我们将传递当前 “counter” 的值。 并且,我们想调用 Comment 函数来输出 counter 值。

DoubleTheValue 函数仍然需要创建。 为了编制自定义函数,首先定义函数将要返回的内容。 在我们的例子中,函数将返回一个整数值。

这是自定义函数的名称,我称之为 “DoubleTheValue”,这是函数将作为参数使用的名称。 我们传递的是 “counter”,它是一个整数(int)。 我在自定义函数中将其称为 “CounterValue”,但您不必取相同的名称。

我们的函数需要两个花括号,当我这次尝试编译它时,我们得到了另一个错误,因为我们的函数不会返回任何东西。 因此,我们首先把传递来的数值加倍,我们称之为 “CounterValue”。 为此,我们取 “CounterValue”,并将其乘以 2。

结果存储在一个名为 “DoubleValue” 的新变量中,我们可以使用 “return” 运算符将该数值发送回调用程序。 这是通过由 “return DoubleValue;” 语句完成的。 因此,我们再次编译代码,并确保没有错误。

在 MetaTrader 中,单击“查看/策略测试器”,或按 CTRL+ R,选择新文件 “SimpleFunction.ex5”,选中“可视化”框,然后运行测试。 现在您应该看到,每当新的即时报价出现时,counter 值都会翻倍,因此每当价格发生变化时,都会调用我们的自定义函数。 这是一个非常简单的示例,因为我们只传递了一个值并,执行了一个操作。

然而,您可以按照同样的逻辑来做更复杂的事情。 例如,您可以遍历所有持仓,计算货币对的盈利,并用 “return” 运算符将数值返回主函数。

在这个短视频中,您学习了如何在 MQL5 中创建自定义函数,并能自己用几行代码对其进行编码。


结束语

MQL5 并不需要很复杂。 我希望,这第一部分将帮助您入门,并让您更好地理解自动化交易的简单程度。 当然,有更多的内容可用,您需要向自己的系统添加更多高级部件,但现在您应该知道 MQL5 编程是否适合您......


本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/10954

从头开始开发智能交易系统(第 16 部分):访问 web 上的数据(II) 从头开始开发智能交易系统(第 16 部分):访问 web 上的数据(II)
掌握如何从网络向智能交易系统输入数据并非那么轻而易举。 如果不了解 MetaTrader 5 提供的所有可能性,就很难做到这一点。
神经网络变得轻松(第十四部分):数据聚类 神经网络变得轻松(第十四部分):数据聚类
我的上一篇文章已经发表一年多了。 这令我有了大量时间考虑修改思路和发展新方法。 在这篇新文章中,我想转移一下以前使用的监督学习方法。 这次我们将深入研究无监督学习算法。 特别是,我们将考虑一种聚类算法 — k-均值。
神经网络变得轻松(第十五部分):利用 MQL5 进行数据聚类 神经网络变得轻松(第十五部分):利用 MQL5 进行数据聚类
我们继续研究聚类方法。 在本文中,我们将创建一个新的 CKmeans 类来实现最常见的聚类方法之一:k-均值。 在测试期间,该模型成功地识别了大约 500 种形态。
从头开始开发智能交易系统(第 15 部分):访问 web 上的数据(I) 从头开始开发智能交易系统(第 15 部分):访问 web 上的数据(I)
如何通过 MetaTrader 5 访问在线数据? 互联网上有很多网站,提供海量信息。 您需要知道的是,在哪里查找、以及如何才能最好地利用这些信息。