Today I will show you how to code a simple high / low breakout trading bot for Metatrader 5. In this first part we will calculate the high and low level. Th...
编译完代码后,我们切换到MetaTrader进行测试。我们设置了视觉测试,指定了时间范围和周期。使用默认输入,我们运行测试并观察高值和低值。通过使用“仅开仓价格”模式,我们可以看到当最高价或最低价被交叉时所建的仓位。在下一步中,我们将 EA 的报价模式更改为仅对开放报价采取操作。这为创建稳定的系统提供了更可靠、更快速的测试环境。
此外,我们更新了“CheckInputs”函数以包含“Index Filter”输入并验证其值。我们还创建了一个名为“CheckIndexFilter”的新函数,用于检查是否应根据索引和过滤器设置过滤极值点。为了完成实现,我们编译代码并进行可视化测试。我们根据索引过滤器验证是否仅当极值点位于定义范围内时才建仓。在接下来的部分中,我们计划修改 EA 的报价模式以更好地满足我们的要求。我们将切换到开放报价模式,允许 EA 专门在开放报价上运行,从而增强系统可靠性和效率。
将报价模式修改为打开报价模式后,我们继续对 EA 进行进一步增强。我们要做的改进之一是添加时间过滤器。为了实现时间过滤器,我们引入了两个新输入:“开始时间”和“结束时间”。这些输入使我们能够指定允许交易的时间范围。例如,如果我们将开始时间设置为 8 点,结束时间为 18 点,则 EA 将仅在上午 8 点到下午 6 点之间建仓。为了合并时间过滤器,我们更新了“CheckInputs”函数以验证新输入并确保开始时间小于结束时间。我们还修改了“OnTick”函数,以便在开仓前检查当前时间是否与指定范围相符。
时间过滤器就位后,我们编译代码并运行可视化测试,以验证仓位仅在指定时间范围内开仓。接下来,我们继续进行另一个增强功能:添加扩展过滤器。点差过滤器允许我们定义最大允许点差,超过该点差 EA 将不会开仓。为了实现传播过滤器,我们引入了一个名为“最大传播”的新输入。在“OnTick”功能中,我们包括一项检查,以确保在开仓前当前点差在允许的范围内。
Today I will show you how to code a simple high / low breakout trading bot for Metatrader 5. In this second part we will code the trade logic to open positi...
Today I will show you how to code a simple high / low breakout trading bot for Metatrader 5. In this third part we will code a trailing stop loss and add a ...
嘿,我是 Toby,在这段视频中,我正在我的频道上启动一个新的 EA 编码项目。我们将重点关注烛台模式并创建一个可以交易各种模式(例如十字星、晨星、新星等)的 EA。 EA 还将有一个面板来显示不同的条件。我已经使用 EA 进行了一些初步测试,结果非常有趣,尤其是针对不同的交易品种。我相信这种方法可以带来高效的策略。让我们深入了解一下吧!
在开始编写 EA 代码之前,我们先讨论一下总体策略思想。了解我们在进步过程中要创造什么目标至关重要。为了说明这个概念,我创建了一个简单的图表。我们的 EA 将专门与每个柱的开盘价配合。例如,让我们考虑当前柱(索引 0)和前一个柱(索引 1)。我们希望创建一个可以交易各种图表模式或烛台模式的 EA,例如十字星、晨星、晚星、新星等等。
此外,我不仅要考虑每个烛台的开盘价、最高价、最低价和收盘价,还要考虑其他因素,例如范围大小或主体大小。例如,我们可以通过将主体大小除以烛台的总范围来计算主体大小。此计算可以帮助我们识别十字线。我们甚至可以设置特定值,例如要求正文尺寸大于 50 磅。通过这些选项,我们可以使用单个 EA 创建和测试各种模式。这将是一次激动人心的旅程!
Today I will show you how to code a candlestick pattern trading bot for Metatrader 5. In this first part we will create the conditions for the candlestick pa...
我想提的另一件事是我最近为 MQL5 设置了 Visual Studio Code。如果您有兴趣使用 Visual Studio Code 进行编码项目,请在评论中告诉我,我将制作一个有关它的视频。
现在,让我们继续编写 EA 代码。在上一个视频中,我们停止了条件一的输入。现在,我们将创建另一个条件并为条件二添加输入。我们将复制条件一的部分并将其重命名为条件二,对输入变量进行必要的更改。目前,我们将保持简单,只包含两个条件,但将来我们可以添加更多条件。进行这些更改后,我们将编译代码以确保没有错误或警告。
Today I will show you how to code a candlestick pattern trading bot for Metatrader 5. This is a step by step coding tutorial for mql5.As an algo trader I dev...
Today I will show you how to code a candlestick pattern trading bot for Metatrader 5. This is a step by step coding tutorial for mql5. With this EA you can t...
Today I will show you how to code a candlestick pattern trading bot for Metatrader 5. This is a step by step coding tutorial for mql5. With this EA you can t...
嗨,这是托比。在本视频中,我将演示如何使用 MQL5 编写用于 EA 优化的自定义标准。我们将使用 Hilo 支架 EA 作为示例。目标是创建一个自定义标准,在对优化结果进行排名时同时考虑利润因素和交易数量。
首先,在编码环境(例如 Visual Studio Code)中打开 EA 并使用新名称保存。接下来,向您的 EA 添加一个名为“OnTester”的预定义函数。该函数将计算自定义标准并返回其值。您可以使用“TestStatistics”功能来获取交易数量和盈利系数。将这两个值相乘即可计算自定义标准。
编译代码以确保没有错误。现在,切换到 MetaTrader 并执行优化。选择您的 EA 并选择“自定义最大”作为最佳搜索条件以使用您的自定义条件。开始优化并等待结果。您将看到自定义标准是根据交易数量乘以利润系数计算得出的。
In this video I show you step by step how to code a custom criteria for the Metatrader 5 strategy tester. With a custom criterion, you can create your own ra...
现在,让我们切换到 Visual Studio Code 开始编写 EA 代码。我们将使用默认的 MetaEditor 在 YouTube 文件夹中创建一个新文件,并将其命名为“Stochastic EA”。然后,我们将在 Visual Studio Code 中打开该文件并进行一些格式调整以提高可读性。
我们将把代码组织成几个部分,并从包含开始。我们只需要包含一个文件“trades.mqh”,其中包含 CTrade 类。之后,我们将定义 EA 的输入。我们将有一个用于输入幻数和手数等输入的一般部分,然后是一个用于止损、止盈和根据相反信号平仓交易的交易部分。然后,我们将有一个专门用于随机指标的输入部分,包括 K 周期和上限。
Today I will show you how to code a stochastic trading bot for Metatrader 5. In this video we will create a fully working stochastic Expert Advisor for Metat...
Today I will show you how to code a stochastic trading bot for Metatrader 5. In this video we will improve our stochastic Expert Advisor for Metatrader 5. We...
MQL5 中令人惊叹的高/低突破交易机器人! |第1部分
MQL5 中令人惊叹的高/低突破交易机器人! |第1部分
托比,在这个视频中,我想介绍一个新项目,其中涉及利用高点和低点来创建有利可图的突破策略。主要思想是确定当前交易品种的最高和最低价格,并使用这些水平来确定潜在的突破点。让我们看一下图表以了解其工作原理。
首先,我们观察最后 n 个柱并确定最高和最低价格。如果价格突破高位,我们采取买入立场。相反,如果价格跌破低位,我们就建立卖出头寸。这是一个简单的概念,但我们将通过添加止损和止盈水平(以点数为单位)来增强它。此外,我们将实施过滤器来完善策略并避免在每个高点和低点进行交易。
让我们等待一个交易机会来展示这个概念。在这里,当价格跌破低位时,我们建立了卖出头寸,并以盈利结束了交易。这是我们战略的基础,我们可以通过合并其他组件来进一步改进它。
现在,让我们切换到元编辑器并开始编码。我们将在 YouTube 文件夹中创建一个新文件并将其命名为“Toby's Breakout EA”。在该文件中,我们将为 EA 定义必要的输入。其中包括幻数、手数、要考虑的柱数、止损和止盈。我们将设置适当的默认值并提供注释来解释每个输入。
接下来,我们将继续执行 onInit 函数,在其中我们将检查用户输入以确保它们有效。我们将创建一个名为 checkInputs 的单独函数来处理此验证。如果任何输入不正确,我们将显示一条错误消息并阻止 EA 启动。
在 onInit 函数中,我们还将使用提供的输入设置交易对象的幻数。这将使我们能够过滤和管理我们的 EA 稍后打开的头寸。
现在,让我们检查一下 onTick 函数。我们将首先保存当前刻度和先前的刻度值。这将帮助我们跟踪价格走势并确定是否跨越任何重要水平。我们将使用 SymbolInfoTick 函数检索当前价格变动,如果发生任何错误,我们将显示错误消息并停止 EA。
之后,我们将添加三个自定义函数:countOpenPositions、normalizePrice 和 closePositions。这些功能将帮助我们管理头寸、计算未平仓头寸数量、标准化价格以及在必要时平仓。
回到 onTick 函数,我们首先计算买入和卖出的未平仓头寸。如果在此过程中发生错误,我们将停止 EA 而不显示错误消息,因为它已在自定义函数中处理。然后我们将检查是否有任何未平仓买入头寸以及高价位是否不为零。这确保我们已经设定了高水平并且没有现有的买入头寸。
从这里,我们可以继续编写突破策略的逻辑。我们将对卖出头寸和低位进行类似的检查。这些 if 语句将帮助我们根据各自水平的突破来确定是买入还是卖出。
一旦我们有了基本结构,我们就可以通过添加更多组件和过滤器来进一步增强策略。这可以包括额外的输入参数和条件,以完善交易信号并提高整体性能。
这涵盖了最初的编码过程。通过遵循这些步骤,我们可以创建一个基于高点和低点的突破 EA,这可以作为进一步开发和优化的起点。
算法:
该算法根据与预定义高低水平相关的买价和卖价不断检查潜在的进入和退出点。当条件满足时开仓,当价格朝相反方向变动时平仓。
高/低突破交易机器人 mql5 |第2部分
高/低突破交易机器人 mql5 |第2部分
在这段视频中,我们继续研究带有高低涂层的黑色奥迪。作为上一课的后续内容,我们现在将合并交易逻辑并引入一些附加组件。首先,我们将计算仓位的止损。如果止损输入为零,我们将变量“SL”设置为零,表示没有止损。否则,我们将其设置为当前买入价减去输入止损乘以点数。
接下来,我们计算止盈。如果止盈输入为零,我们将变量“TP”设置为零。否则,我们将其设置为当前要价加上输入止盈乘以点数。为了确保一致的价格值,我们使用“标准化价格”功能标准化止损和止盈。
交易逻辑就位后,我们使用之前使用 cTrade 类声明的交易对象来开仓。对于买入头寸,我们使用当前交易品种,输入手数作为手数,当前买入价作为价格,止损变量作为止损,止盈变量作为止盈。同样,对于卖出头寸,我们使用当前的卖价作为价格。为了将该职位与其他职位区分开来,我们添加了一条注释,表明它属于我们的“高低记录 EA”专家顾问。
编译完代码后,我们切换到MetaTrader进行测试。我们设置了视觉测试,指定了时间范围和周期。使用默认输入,我们运行测试并观察高值和低值。通过使用“仅开仓价格”模式,我们可以看到当最高价或最低价被交叉时所建的仓位。在下一步中,我们将 EA 的报价模式更改为仅对开放报价采取操作。这为创建稳定的系统提供了更可靠、更快速的测试环境。
展望未来,我们实施指数过滤器,以防止在回溯期开始或结束时在极值点进行交易。我们引入了一个名为“索引过滤器”的输入,它表示回溯期内应过滤的柱线百分比。例如,如果回溯周期为 50 个柱,并且索引过滤器设置为 10,则前 5 个或后 5 个柱内的极值点将被过滤掉。为了可视化这个范围,我们在图表上绘制一个矩形。我们添加必要的全局变量,设置它们的初始值,并在“OnTick”函数中进行更改,以使用“I Highest”和“I Lowest”函数计算最高和最低指数。
此外,我们更新了“CheckInputs”函数以包含“Index Filter”输入并验证其值。我们还创建了一个名为“CheckIndexFilter”的新函数,用于检查是否应根据索引和过滤器设置过滤极值点。为了完成实现,我们编译代码并进行可视化测试。我们根据索引过滤器验证是否仅当极值点位于定义范围内时才建仓。在接下来的部分中,我们计划修改 EA 的报价模式以更好地满足我们的要求。我们将切换到开放报价模式,允许 EA 专门在开放报价上运行,从而增强系统可靠性和效率。
将报价模式修改为打开报价模式后,我们继续对 EA 进行进一步增强。我们要做的改进之一是添加时间过滤器。为了实现时间过滤器,我们引入了两个新输入:“开始时间”和“结束时间”。这些输入使我们能够指定允许交易的时间范围。例如,如果我们将开始时间设置为 8 点,结束时间为 18 点,则 EA 将仅在上午 8 点到下午 6 点之间建仓。为了合并时间过滤器,我们更新了“CheckInputs”函数以验证新输入并确保开始时间小于结束时间。我们还修改了“OnTick”函数,以便在开仓前检查当前时间是否与指定范围相符。
时间过滤器就位后,我们编译代码并运行可视化测试,以验证仓位仅在指定时间范围内开仓。接下来,我们继续进行另一个增强功能:添加扩展过滤器。点差过滤器允许我们定义最大允许点差,超过该点差 EA 将不会开仓。为了实现传播过滤器,我们引入了一个名为“最大传播”的新输入。在“OnTick”功能中,我们包括一项检查,以确保在开仓前当前点差在允许的范围内。
我们还更新了“CheckInputs”函数来验证“Max Spread”输入并确保其为正值。实现价差过滤器后,我们编译代码并执行可视化测试,以确认仅当价差低于指定最大值时才建仓。最后,我们引入了一项功能来跟踪并在图表上显示已建仓位的数量。我们创建一个名为“Position Count”的新全局变量并将其初始化为零。在“OnTick”函数中,每次开仓时我们都会增加持仓计数。
为了在图表上显示持仓计数,我们利用“ObjectSetText”函数创建一个显示当前计数的文本对象。我们使用每个价格变动的最新计数值更新文本对象。代码编译完成后,我们会运行可视化测试来观察图表上显示的持仓数量,并确保其准确反映已建仓位的数量。
通过实施这些增强功能,我们显着改进了 EA 的功能和性能。时间过滤器、点差过滤器和仓位计数显示为交易过程提供了更好的控制和可视性。
在下一个视频中,我们将探索其他优化和微调技术,以进一步增强 EA 的性能。
惊人的高/低突破交易机器人 mql5 |第三部分
惊人的高/低突破交易机器人 mql5 |第三部分
在今天的视频中,Toby 继续开发 MK5 的高低突破 EA。他向该策略引入了两个新组件,并在最后进行了多次回测。
Toby 首先编译 EA 以确保其处于工作状态。然后,他添加了追踪止损的输入,以增强该策略作为突破和趋势跟踪系统的有效性。输入是一个可以激活或停用的布尔变量。 Toby 还创建了一个名为“updateStopLoss”的函数来计算和更新每个仓位的止损值。
为了实现追踪止损,Toby 从另一个 EA 复制了“updatePosition”函数并进行了相应修改。他添加了一个止损距离参数,并根据该输入调整新止损值的计算。他还结合了一个名为“normalizedPrice”的函数来确保止损值标准化。进行这些更改后,Toby 再次编译代码以确保没有错误。
接下来,Toby 转到“OnTick”函数,他在其中集成了“updateStopLoss”函数。他添加了一个 if 语句来检查追踪止损是否处于活动状态,如果是,则调用“updateStopLoss”函数来追踪止损值。他还确保该函数适用于买入和卖出头寸。
编译代码后,Toby 继续将下一个组件(大小过滤器)添加到策略中。大小过滤器允许过滤掉高值和低值相距太远的通道,表明范围较大。 Toby 以点为单位添加大小过滤器的输入,并相应地调整代码以检查通道大小是否超出指定限制。他还将尺寸过滤器融入到高线和低线的可视化中。
然后,托比使用策略测试器进行视觉测试,以确认追踪止损和尺寸过滤器均正常工作。他根据尺寸过滤条件观察止损行为和线条颜色变化。
在视频的最后部分,Toby 进行回测来评估 EA 在过去 10 年的表现。他将优化标准设置为恢复系数,并使用特定的符号和时间范围。托比计划用剩下的几年作为样本外测试。
Toby 对高低突破 EA 进行了多项改进,包括添加追踪止损和尺寸过滤器。他还演示了如何进行回测来评估 EA 的性能。
让我们用 mql5 编写终极烛台图案 EA! |第1部分
让我们用 mql5 编写终极烛台图案 EA! |第1部分
嘿,我是 Toby,在这段视频中,我正在我的频道上启动一个新的 EA 编码项目。我们将重点关注烛台模式并创建一个可以交易各种模式(例如十字星、晨星、新星等)的 EA。 EA 还将有一个面板来显示不同的条件。我已经使用 EA 进行了一些初步测试,结果非常有趣,尤其是针对不同的交易品种。我相信这种方法可以带来高效的策略。让我们深入了解一下吧!
在开始编写 EA 代码之前,我们先讨论一下总体策略思想。了解我们在进步过程中要创造什么目标至关重要。为了说明这个概念,我创建了一个简单的图表。我们的 EA 将专门与每个柱的开盘价配合。例如,让我们考虑当前柱(索引 0)和前一个柱(索引 1)。我们希望创建一个可以交易各种图表模式或烛台模式的 EA,例如十字星、晨星、晚星、新星等等。
为了实现这一目标,我们将定义不同的条件。例如,我们可以设置一个条件,即柱 2 的最高价必须高于柱 1 的最高价。另一个条件可能是柱 3 的开盘价必须低于柱 3 的收盘价,这表明柱 3 的收盘价必须低于柱 3 的收盘价。看涨蜡烛。通过组合这些条件,我们可以在下一个柱线开盘时触发买入交易。我们可以将类似的条件反过来应用于卖出信号。
此外,我不仅要考虑每个烛台的开盘价、最高价、最低价和收盘价,还要考虑其他因素,例如范围大小或主体大小。例如,我们可以通过将主体大小除以烛台的总范围来计算主体大小。此计算可以帮助我们识别十字线。我们甚至可以设置特定值,例如要求正文尺寸大于 50 磅。通过这些选项,我们可以使用单个 EA 创建和测试各种模式。这将是一次激动人心的旅程!
现在,让我们继续使用 MetaEditor 并开始编码。但在我们开始之前,我希望得到您的反馈。如果您觉得这些视频有帮助并且想今晚睡个好觉,请点赞。另外,我正在考虑在深色模式和默认白色背景之间切换。我将创建一个民意调查,让您根据您的偏好进行投票。如果您可以在黑暗模式下正确阅读所有内容,请在评论中告诉我。
好吧,让我们开始编码吧!在 MetaEditor 中,我将在 YouTube 文件夹下创建一个新 EA。我将其命名为“蜡烛形态 EA”。我们将从一个干净的模板开始,删除不必要的注释并组织代码结构。编译并确保没有错误后,我们将继续进行下一步。
我们将在输入部分定义一些关键参数,例如幻数,它应该是该 EA 的唯一标识符,以避免与同一 MetaTrader 实例上运行的其他 EA 发生冲突。让我们为其分配一个随机数。
这涵盖了初始设置和输入参数。我们现在准备好进入下一部分。敬请关注!
mql5 中的烛台模式 EA! |第2部分
mql5 中的烛台模式 EA! |第2部分
在今天的视频中,我是 Toby,我们将继续在 MetaTrader 5 中编写简单的烛台模式 EA 交易 (EA)。我们现在处于本编码系列的第二部分,所以如果您错过了我讲的第一部分更详细地解释了该策略思想,您可以在此处找到该视频的链接。在我们开始编码之前,我想分享一下我最近在 YouTube 上进行的一项关于录制视频的首选颜色主题的民意调查的结果。在 140 票中,大多数人(90 人)喜欢深色背景,而 50 人喜欢白色背景。我个人认为深色背景对眼睛更舒服,并且也用它来记录我自己的 EA。
我想提的另一件事是我最近为 MQL5 设置了 Visual Studio Code。如果您有兴趣使用 Visual Studio Code 进行编码项目,请在评论中告诉我,我将制作一个有关它的视频。
现在,让我们继续编写 EA 代码。在上一个视频中,我们停止了条件一的输入。现在,我们将创建另一个条件并为条件二添加输入。我们将复制条件一的部分并将其重命名为条件二,对输入变量进行必要的更改。目前,我们将保持简单,只包含两个条件,但将来我们可以添加更多条件。进行这些更改后,我们将编译代码以确保没有错误或警告。
一些观众要求增加字体大小以提高可读性。虽然我更喜欢在屏幕上看到更多代码,但我理解需要更大的字体大小。但是,目前我们将坚持使用当前的字体大小。如果有必要的话,我可以在以后进行调整。
接下来,我们将输入链接到我们在全局变量部分创建的条件数组。我们将创建一个名为“setInputs”的自定义函数来完成此任务。在检查输入之前将调用此函数。编写完setInputs函数的代码后,我们将再次编译代码以验证其正确性。
接下来,我们将检查输入以确保它们符合所需的标准。我们将为每个输入使用 if 语句来执行必要的检查。如果发现任何输入无效,我们将向用户显示警报,并从 checkInputs 函数返回 false。我们首先检查幻数,确保它不低于或等于零。然后我们将继续检查手数、止损和止盈输入。此外,我们需要添加对条件数组的检查,稍后我们将解决这个问题。
为了使代码更加模块化,我们将使用 setInputs 函数来设置交易对象的幻数。这在寻找头寸或处理与贸易相关的操作时将非常有用。进行此更改后,我们将再次编译代码以确认其准确性。
现在,让我们转到 onTick 函数,EA 的主要操作发生在此处。首先,我们将使用 isNewBar 函数检查当前报价是否为柱开盘报价。如果它返回 false,表明它不是柱开盘价格变动,我们将简单地返回并等待下一个价格变动。
接下来,我们将获取当前交易品种的报价。这将提供对出价、要价和其他报价相关信息的访问。我们将使用 SymbolInfoTick 函数并将结果存储在变量中。如果此操作失败,我们将显示一条消息指示失败并从 onTick 函数返回。
接下来,我们将使用 countOpenPositions 函数来计算未平仓头寸。这将为我们提供当前未平仓买入和卖出头寸的数量。如果此操作失败,我们将显示一条错误消息,指示失败并从 onTick 函数返回。
获得未平仓头寸数量后,我们将检查是否有任何未平仓头寸。如果有,我们将显示一条消息,指示未平仓头寸的数量。否则,我们将继续下一步。
现在,我们将使用 for 循环遍历每个未平仓头寸。在循环内,我们将使用 PositionGetTicket 函数检索位置信息。我们将把票号存储在一个变量中,并显示一条带有票号的消息以用于调试目的。
接下来,我们将使用 PositionGetInteger 函数和 POSITION_TYPE 属性检查头寸的类型(买入或卖出)。如果该仓位是买入仓位,我们将执行买入仓位所需的代码。同样,如果仓位是卖出仓位,我们将执行卖出仓位的代码。
对于买入仓位,我们将检查当前买入价是否低于该仓位的止损水平。如果是,我们将显示一条消息,指示已达到止损水平,并使用 PositionClose 函数平仓。
同样,对于卖出头寸,我们将检查当前卖价是否高于头寸的止损水平。如果是,我们将显示一条消息,指示已达到止损水平并平仓。
关闭所有必要的头寸后,我们将继续下一步,即检查我们的条件以确定是否应该开立新头寸。为此,我们将使用 checkConditions 函数。如果 checkConditions 函数返回 true,表明满足所有条件,我们将执行必要的代码来开立新仓位。否则,我们将继续下一个刻度。
在开立新仓位的代码中,我们将设置交易量、止损、止盈和其他必要参数。我们将使用 OrderSend 函数发送交易请求并开仓。如果交易请求成功,我们将显示一条消息,指示已成功建仓。否则,我们将显示一条错误消息。
最后,我们将编译代码以确保没有错误或警告,如果一切顺利,我们将准备在演示或真实账户上测试我们的 EA。
本视频到此结束。在下一部分中,我们将通过添加其他功能并完善我们的策略来继续构建我们的 EA。如果您有任何问题或建议,请在下面的评论中留下。感谢您的观看,我们将在下一个视频中见到您!
mql5 中令人敬畏的烛台图案 EA! |第三部分
mql5 中令人敬畏的烛台图案 EA! |第三部分
在此视频中,Toby 进行了自我介绍,并宣布重点将是继续在 MetaTrader5 中开发烛台模式 Expert Advisor (EA)。目标是编写进行第一次回测并获得结果所需的核心逻辑。托比鼓励观众查看该系列的前几部分(如果还没有的话)。
Toby 打开元编辑器并从上一个视频中中断的地方开始编码。他解释说,他们已经实现了建立买入和卖出头寸的代码,但现在他们需要添加条件检查。为此,Toby 计划创建一个自定义函数,可以调用该函数来检查买卖交易的条件。
在开始编码过程之前,托比希望确保现有代码中没有错误。他编译代码以检查错误或警告。
接下来,Toby 继续编写名为“检查条件”的自定义函数的逻辑。该函数将使用 for 循环遍历每个条件。在循环内,他们将调用另一个名为“检查一个条件”的自定义函数来评估每个单独的条件。
Toby 创建了“检查一个条件”函数,该函数采用买入/卖出交易的参数以及要检查的条件的索引。在此函数内,执行各种检查,例如确定条件是否处于活动状态。如果条件无效,该函数将返回 true,表明它不相关。
为了检查条件,Toby 需要获取条形数据。他声明了一个 mql rates 类型的变量,这是一个包含开盘价、最高价、最低价和收盘价的预定义结构。他们将速率数组设置为系列,并使用复制速率函数来检索条件所需的数据。
成功获取条形图数据后,Toby 继续设置变量 A 和 B 的值,这些值将用于比较和评估条件。这些值是根据条件的模式确定的,例如开盘价、最高价、最低价、收盘价、范围、主体、比率或值。考虑到是买入还是卖出交易,相应地分配这些值。
设置值后,Toby 会编译代码以检查是否有任何错误或错误。
Toby 对模式 B 条件重复该过程,对变量和案例进行必要的调整。
最后,托比通过确保代码中没有错误并强调理解代码逻辑的重要性来结束视频。
令人惊讶的结果! mql5 中的烛台模式 EA! |第 4 部分
令人惊讶的结果! mql5 中的烛台模式 EA! |第 4 部分
嗨,我是托比。在今天的视频中,我们将继续编写烛台模式专家顾问 (EA) 代码。我们对此视频有一些具体目标。首先,我们将为 EA 添加一个面板,它将显示各种条件及其相应的买入/卖出信号。我们还将执行额外的输入检查以确保 EA 的功能。最后,我们将进行一些回测并与您分享一些有趣的结果。那么让我们开始吧。
在我们继续之前,如果您还没有观看此烛台模式编码系列的前几部分,我建议您首先查看它们。您可以在说明中找到链接。
在本视频中,我们将首先为我们的 EA 创建一个图形面板。该面板将包含代表不同条件的线条,并带有表示买入和卖出信号的十字线。如果满足条件,EA 将按照指定方向进行交易。此外,我们将实施输入检查以促进策略测试器的优化。
要开始对面板进行编码,我们将打开 MetaEditor 并导航到包含文件夹。在包含文件夹中,我们将创建一个名为 YouTube 的新文件夹。在 YouTube 文件夹中,我们将创建图形面板文件。我们将清除文件的默认内容并包含面板所需的文件。
接下来,我们将为面板定义必要的标签。每个标签将代表一个特定元素,例如数字、条件、买入、卖出等。我们还将创建标签数组来为每个条件显示多行。
定义标签后,我们将继续编写 Panel 类的代码。这个类将从 CAppDialog 类继承,允许我们访问它的成员。我们将为面板的标签和一些方法创建一个私有部分,包括构造函数、析构函数、onInit、update 和bannerChartEvent。
构造函数将初始化面板,而析构函数将处理其清理。 onInit 方法将从 EA 的 onInit 函数调用并创建面板。 update 方法将在每次更新时调用以更新面板的内容。最后,bannerChartEvent方法将处理与面板相关的事件。
在 createPanel 方法中,我们将使用所需参数(例如图表 ID、名称、子窗口和坐标)创建实际面板。我们将确保面板创建成功,如果成功则返回 true,否则返回 false。
面板类编码完成后,我们会将其包含在我们的 Expert Advisor 文件中。我们将创建面板对象的实例,并在设置幻数后调用其 onInit 方法。如果面板创建失败,我们将返回相应的错误消息。
这就是我们的烛台模式编码系列的这一部分。在下一个视频中,我们将继续向 EA 添加功能并执行进一步的测试。请继续关注更多有趣的结果。
在 mql5 中编写自定义标准
在 mql5 中编写自定义标准
嗨,这是托比。在本视频中,我将演示如何使用 MQL5 编写用于 EA 优化的自定义标准。我们将使用 Hilo 支架 EA 作为示例。目标是创建一个自定义标准,在对优化结果进行排名时同时考虑利润因素和交易数量。
首先,在编码环境(例如 Visual Studio Code)中打开 EA 并使用新名称保存。接下来,向您的 EA 添加一个名为“OnTester”的预定义函数。该函数将计算自定义标准并返回其值。您可以使用“TestStatistics”功能来获取交易数量和盈利系数。将这两个值相乘即可计算自定义标准。
编译代码以确保没有错误。现在,切换到 MetaTrader 并执行优化。选择您的 EA 并选择“自定义最大”作为最佳搜索条件以使用您的自定义条件。开始优化并等待结果。您将看到自定义标准是根据交易数量乘以利润系数计算得出的。
如果您想调整利润因子的权重,您可以在代码中使用“MathPower”函数。例如,您可以将利润系数提高到 4 次方以赋予其更大的权重。重新编译并再次运行优化以查看更新后的排名。
此外,您可以在代码中添加 if 语句以排除少于 100 笔交易的组合。如果交易数量低于 100,您可以返回零值。这确保了仅考虑具有足够数量交易的组合。
通过执行这些步骤,您可以创建自己的自定义标准来排名并为您的 EA 交易选择最佳优化结果。请记住在进行任何更改之前使用新名称保存修改后的 EA。如果您觉得该视频有帮助,请点赞,并随时在评论中分享您对未来视频的要求或想法。谢谢您,我们下一个视频见!
MQL5 中的随机交易机器人! |第1部分
MQL5 中的随机交易机器人! |第1部分
在本视频中,我将演示如何在 MetaTrader 5 中编写简单的随机 EA。在视频结束时,我们还将执行回溯测试来评估该策略在过去 10 年的表现。
让我们首先了解总体策略思想。我们将使用众所周知的随机指标。当随机指标穿越较低水平时,EA 将执行买入交易,而当随机指标穿越较高水平时,EA 将执行卖出交易。在查看图表时,必须记住我们的大脑倾向于关注有利可图的交易,因此对策略进行编码和回测以评估其有效性至关重要。
现在,让我们切换到 Visual Studio Code 开始编写 EA 代码。我们将使用默认的 MetaEditor 在 YouTube 文件夹中创建一个新文件,并将其命名为“Stochastic EA”。然后,我们将在 Visual Studio Code 中打开该文件并进行一些格式调整以提高可读性。
我们将把代码组织成几个部分,并从包含开始。我们只需要包含一个文件“trades.mqh”,其中包含 CTrade 类。之后,我们将定义 EA 的输入。我们将有一个用于输入幻数和手数等输入的一般部分,然后是一个用于止损、止盈和根据相反信号平仓交易的交易部分。然后,我们将有一个专门用于随机指标的输入部分,包括 K 周期和上限。
定义输入后,我们将进入全局变量部分,在这里我们将声明随机指标句柄、缓冲区、当前价格变动和交易对象的变量。在全局变量之后,我们将实现 onInit 函数。我们将首先使用 checkInputs 函数检查用户输入,这将确保输入值在允许的范围内。如果任何输入不正确,我们将返回“初始化参数不正确”。
接下来,我们将使用用户提供的输入值设置交易对象的幻数。然后,我们将使用内置随机函数创建指标句柄,指定交易品种、周期、K 周期、D 周期(设置为 1 表示无信号线)、减速值、MA 方法 (SMA) 和价格字段(低高)。我们将检查指标句柄的创建是否成功。如果它返回无效句柄,我们将显示一条警报消息并返回“初始化失败”。最后,我们将使用 arraySetAsSeries 函数设置缓冲区以指示它是一个时间序列。
接下来,我们将定义 checkInputs 函数,它将验证每个输入的有效性。我们将检查幻数和手数是否在允许的范围内,如果不在则返回 false。此外,我们可以添加进一步的检查,例如确保手数不大于 10。完成 onInit 函数和 checkInputs 函数后,我们现在可以编译代码并继续视频中的后续步骤。
该函数旨在执行多个步骤。首先,它检索当前报价并将其存储在全局变量“CT”中。然后,它继续使用“CopyBuffer”函数获取指标值。该函数检查错误,如果成功,则将值存储在“主”缓冲区中。如果出现错误,它会打印一条消息并退出该函数。下一步涉及计算未平仓头寸的数量。这是使用“CountOpenPositions”函数完成的,计数存储在两个整数变量“CountBuy”和“CountSell”中。如果计算位置时出现错误,则会打印一条消息并退出该函数。
然后该函数检查买入或卖出交易。如果没有未平仓的买入头寸(CountBuy 为零),它会检查指标值以确定是否应建立买入交易。开启买入交易的条件是当前指标值低于指定的下限水平并且之前的指标值高于该下限水平。如果满足这些条件,则会打印一条指示建立买入仓位的消息。同样,如果没有未平仓卖出头寸(CountSell 为零),该函数会检查卖出交易。开仓卖出交易的条件是指标值高于指定的上限并且之前的指标值低于上限。如果满足这些条件,则会打印一条指示建立卖出头寸的消息。
执行交易逻辑后,如果输入参数“ClosedSignal”设置为 true,则该函数将关闭所有卖出头寸。它使用参数值为2的“ClosePositions”函数来平掉所有卖出头寸。如果平仓时出现错误,该函数将退出并打印一条消息。接下来,该函数根据输入参数计算止损和止盈值。如果输入止损值为零,则止损设置为零;否则,根据当前报价和输入的止损值计算。计算止盈值遵循相同的过程。
在开仓之前,该函数使用“NormalizePrice”函数标准化止损和止盈价格。如果标准化过程中出现错误,该函数将退出。最后,该函数使用交易对象的“PositionOpen”方法建仓。根据类型(买入或卖出)、交易量、价格、止损和止盈值开仓。还包括订单评论。
该函数经过编译以确保没有错误,然后可以使用历史数据在 MetaTrader 中对其进行测试,以查看是否根据指定条件发生所需的交易开仓和平仓。建仓后,该函数使用“GetLastError”函数检查错误。如果出现错误,它会打印一条消息并退出。
最后,该函数分别用当前报价和信号类型(买入或卖出)更新全局变量“LastTick”和“LastSignal”。这样做是为了跟踪最后处理的报价和信号以供将来计算。
此函数检索当前价格变动、获取指标值、计算未平仓头寸数量、检查交易机会、根据指定条件开仓、根据需要平仓卖出头寸、计算止损和止盈值、标准化价格、开仓、处理错误并更新全局变量。
要在 MetaTrader 5 环境中使用此功能,您需要将其集成到专家顾问或脚本中,并根据您的交易策略自定义输入参数和指标值。此外,您可能需要实现其他功能来管理头寸、处理错误和执行其他交易操作。
请注意,所提供的解释是基于所提供信息的一般理解,实际实施可能会根据所使用的具体交易平台和编程语言而有所不同。
MetaTrader 5 的随机 EA |第2部分
MetaTrader 5 的随机 EA |第2部分
在这段视频中,托比介绍了自己作为主持人,并提到他们将讨论一个简单的过滤器,以使用随机指标改进交易策略。 Toby 提到该过滤器不仅可以应用于随机指标,还可以应用于其他指标。
Toby 解释说,在编码教程的第一部分中,他们涵盖了 EA(EA 交易)和指标的核心逻辑。在这一部分中,他们计划添加不同的入场信号和过滤器来增强策略。在深入编码之前,托比强调了理解目标的重要性。他们解释了想要添加到 EA 的组件,包括基于退出指标下部和上部区域的第二种类型的入场信号以及反转信号的选项。
Toby 随后建议切换到 Visual Studio Code,这是他们推荐用于 MQL5 编码的编辑器。他们提到他们将要处理的代码是第一部分中创建的 EA。编译以确保其正常工作后,他们继续进行编码。
第一步是使用不同模式的枚举(枚举)添加信号模式的输入。他们创建了名为“信号模式”的枚举,其中包含“正常退出交叉”、“正常进入交叉”、“反转退出交叉”和“反转进入交叉”等选项。托比解释了每个选项的含义以及它如何影响交易策略。
添加枚举后,Toby 将其添加为代码中的输入,并将默认选项指定为“退出交叉法线”。他们还确保编译代码以检查是否有任何错误。
接下来,Toby 计划使用 OnTick() 函数中的信号模式来检查新信号。为了简化代码并避免复杂的 if 语句,Toby 决定编写一个名为“检查信号”的单独函数来处理信号逻辑。他们解释说,该函数将返回一个布尔值,指示是否应该打开交易。
Toby 创建了“检查信号”函数,该函数采用两个参数:一个布尔参数,用于指定是否检查买入或卖出信号;以及一个整数参数,用于表示未平仓头寸的数量。他们添加注释来解释函数和参数的用途。他们还添加了一个检查,如果仓位已经打开,则返回 false。
接下来,Toby 添加代码以根据所选信号模式检查交叉。他们为每个交叉选项创建布尔变量,例如“上出口交叉”、“上入口交叉”、“下出口交叉”和“下入口交叉”。他们参考随机指标缓冲区的值来解释每个交叉条件背后的逻辑。
添加交叉检查后,Toby 编译代码以确保没有错误。他们还添加了缺少的 if 语句并修复了编译错误。
“检查信号”函数和交叉检查到位后,Toby 返回到 OnTick() 函数,并通过调用“检查信号”函数来替换用于检查买入和卖出头寸的现有 if 语句。他们将适当的参数和未平仓头寸计数传递给函数,并在开仓前检查它是否返回 true。
再次编译代码后,Toby 切换到 MetaTrader 来测试 EA 的逻辑。他们选择 EA,选择仅开盘价模式,并启用可视模式进行测试。他们为每个信号模式配置输入参数并运行视觉测试。 Toby 解释说,彻底测试 EA 以确保其按预期运行非常重要。
根据视觉测试结果,托比得出结论,所有信号模式都工作正常。他们建议在本教程的下一部分中继续添加过滤器。
目前,我们检索值“一”和“二”来检查信号。但是,我想修改它,以便我们从缓冲区的索引 0 开始。此外,我们应该检索检查信号的三个值。如果我们的检查清除条过滤器处于活动状态,我们可能需要其他值。为了实现这些更改,我们需要修改代码。
首先,让我们向上滚动到检索指标值的位置。在“untick”函数中,我们有“获取指标值”行,我们需要进行一些更改。第一个参数代表指标的缓冲区编号。我们只对索引 0 处的主线感兴趣。因此保持不变。但是,起始位置当前设置为索引 1,并且我们检索两个值。我们想要将起始位置更改为索引 0 并检索至少三个值。因此,我们修改代码以从索引 0 开始并检索三个值:零、一和二。
如果我们的检查清除条过滤器处于活动状态,我们需要检索其他指标值来检查过滤器。我们需要检索“三”加上我们输入的清除条值。例如,如果输入清除条值设置为 5,则我们总共需要 8 个值。因此,我们相应地修改代码以检索从索引 0 开始到所需数量的值。
进行这些更改后,我们需要将检索到的值存储在名为“Main”的缓冲区中。此外,我们应该检查该函数是否成功检索请求的值,该值是我们输入的清除条值的三加上。我们修改代码以包含此检查。
接下来,我们需要更新检查信号的代码。我们现在需要在索引 1 和 2 处访问它以进行交叉检查,而不是在索引 0 处访问 Main 缓冲区。我们将索引 0 的所有实例替换为 1,将索引 1 的所有实例替换为 2。
现在我们有了正确的指标值,我们可以继续进行 for 循环。我们应该编译代码以确保没有错误。
在 for 循环中,我们要检查从索引 3 开始的清除条形过滤器。这是信号交叉检查后的位置。我们继续这个循环,直到我们的计数器低于三加清除柱值。例如,如果清除柱值设置为 5,则计数器将为 8。这意味着我们检查索引 7,即循环中的最后一个值。此循环的目的是确保这些条形图中的上部线没有交叉。我们更新代码以反映这些更改。
在for循环中,我们首先检查上层。我们将缓冲区 Main[i-1] 中的值与输入上层进行比较。如果它更大并且缓冲区 Main[i] 中的值小于或等于输入上层,则我们有交叉。我们还检查另一个方向上交叉的相反条件。我们相应地修改代码。
在 for 循环之后,我们添加另一个 if-else 语句。如果我们输入的清除条反转为 true,我们将返回 true,因为我们希望在过滤器反转时进行交叉。否则,我们返回 false。
最后,我们添加一个类似的 if-else 语句来进行较低级别的检查。我们复制现有的 if 语句并对较低级别的检查进行必要的更改。
进行这些更改后,我们再次编译代码以确保没有错误。现在,我们可以在 OnTick 函数中使用检查清除柱函数。
在 OnTick 函数中,我们在检查信号的 if 语句中添加检查清除柱函数。
让我们继续优化过程。我们选择了欧元/美元符号和从 2019 年开始的时间范围。我们将仅使用开盘价和快速通用算法。我们的优化目标是为我们的clearbars 过滤器找到最佳参数。
在开始优化之前,我们先定义一下要优化的参数。在这种情况下,我们将优化clearbars过滤器的回溯期,这决定了过滤器要考虑的条形数量。我们将测试从 5 到 20 的值,增量为 5。此外,我们将优化过滤器的上限和下限阈值,测试值从 50 到 150,增量为 25。
现在,让我们运行优化并分析结果。我们将查看净利润、总交易量和利润系数来评估每个参数组合的表现。根据这些指标,我们可以确定产生最高利润的最佳参数值。
运行优化后,我们可以检查结果并确定表现最佳的参数值。我们可能会发现,回顾期为 10、上限阈值为 100、下限阈值为 75 时,净利润和利润因子最高。
一旦我们确定了最佳参数值,我们就可以使用它们在更大的数据集上回测我们的策略或将其部署到真实交易账户上。
请记住,优化结果基于历史数据,可能无法保证未来的性能。持续监控和评估策略的表现并根据需要调整参数非常重要。
通过优化的参数,我们可以进一步完善我们的策略并探索其他改进的可能性。我们可以考虑添加额外的过滤器或条件来增强策略的有效性。
总之,优化过程帮助我们找到 Clearbars 过滤器的最佳参数值,从而提高策略的性能并有可能提高盈利能力。它是制定和完善交易策略的宝贵工具。