编程教程 - 页 5

 

范围突破 EA mql5 编程 |第 4/4 部分


范围突破 EA mql5 编程 |第 4/4 部分

Toby 很高兴地宣布,今天我们将结束 MetaTrader 5 的突破型 EA 交易 (EA)。该视频标志着我们突破型 EA 综合系列的最后一部分。如果您还没有机会观看以前的视频,我将在说明中提供链接,以便您可以观看。

在前面的部分中,我们介绍了范围计算、买入和卖出突破检查以及平仓逻辑等重要方面。现在,在这个总结视频中,我们还有一些功能要添加到我们的 EA 中。具体来说,我们将根据范围的百分比纳入止损和止盈功能。此外,我们将引入一周中的某一天过滤器并实施突破模式,允许用户在每个范围的一个或两个突破之间切换。

让我们直接进入编码过程。到目前为止,这就是我们开发的代码。我们的首要任务是输入止损和止盈百分比。我们将它们定义为整数,因为它们以百分比表示。让我们将默认止损输入设置为 150,将止盈输入设置为 200。我们还将更新注释以反映这些更改。为了确保用户提供有效的输入,我们需要执行输入检查。我们将在 on init 函数中添加一个额外的 if 语句来验证止损和止盈输入。如果止损输入低于零或大于1000,我们将显示一条错误消息。相同的验证过程适用于止盈输入。这些检查将有助于保护 EA 免受错误输入的影响。

接下来,让我们计算每个仓位的止损和止盈值。对于买入头寸,止损将按照低于当前价格的范围的百分比计算。我们将使用买入价并将其乘以输入止损值除以 100。为了确保标准化价格,我们将应用 NormalizeDouble 函数。同样,对于卖出头寸,止损将按当前价格上方范围的百分比计算。我们将使用要价并将计算出的止损值添加到其中。这将确定适当的止损水平。

对于止盈计算,我们将遵循相同的逻辑。对于买入头寸,止盈将是当前价格之上的范围,而对于卖出头寸,止盈将是当前价格之下的范围。计算出止损和止盈值后,我们会将它们合并到未平仓合约中。我们不会使用静态值零,而是将其替换为计算出的止损和止盈值。此调整可确保 EA 准确设置每个仓位的止损和止盈水平。

为了提供灵活性,我们将引入禁用止损和止盈功能的功能。如果用户为任一输入输入零,则表明他们想要关闭该功能。我们将添加 if 语句来检查这些条件并相应地调整计算。现在,让我们讨论可选的关闭时间功能。通过输入 -1 作为平仓时间输入,EA 将仅根据止损和止盈水平平仓。此修改允许用户选择是否要包含特定的平仓时间或仅依赖止损和止盈参数。

为了实现这一点,我们将更新 on tick 函数中的关闭时间检查。如果平仓时间小于零,表明已关闭,我们将跳过基于时间的平仓检查,仅依靠止损和止盈条件。此外,我们将对绘制对象函数中的范围可视化进行调整。如果没有设置收盘时间,范围线将一直延伸到当前蜡烛,表明突破模式处于活动状态,直到达到止损或止盈水平。另一方面,如果设置了收盘时间,则范围线将仅延伸至该特定蜡烛,这表明突破模式在指定时间之前一直处于活动状态。

为了增强 EA 的多功能性,我们将引入一周中的某一天过滤器。此过滤器允许用户指定他们希望 EA 处于活动状态的日期。我们将为星期几过滤器添加一个输入参数,用户可以从预定义列表中选择多天。默认情况下,将选择一周中的所有天。为了实现星期过滤器,我们将修改 on tick 函数。我们将引入一个 if 语句来检查当前日期是否包含在用户选择的过滤器中。如果不包括该日,EA 将跳过开仓逻辑并继续进行下一个价格变动。

最后,我们将实现在每个范围的一个或两个突破之间切换的选项。目前,EA 在每次突破范围时开立一个仓位。然而,一些交易者可能更愿意灵活地开立两个头寸,以实现更强劲的突破。为了适应这一点,我们将引入一个输入参数,允许用户为每个范围选择一个或两个突破。

为了实现该功能,我们将调整建仓逻辑。如果用户在每个范围内选择两次突破,则 EA 将在初始突破的相反方向上开设一个额外头寸。这样,看涨和看跌突破都可以在同一范围内捕获。随着所有这些新功能的实施,我们的突破专家顾问将为交易者提供增强的功能和灵活性。基于范围百分比的止损和止盈功能将有助于管理风险和获取利润。一周中的某一天过滤器将允许用户指定活跃交易日,而突破模式可以根据他们的交易策略定制为每个范围一次或两次突破。

我们希望您发现这个关于突破专家顾问的综合系列很有帮助且内容丰富。如果您有任何疑问或需要进一步帮助,请随时与我们联系。交易愉快!

Range Breakout EA mql5 Programming | Part 4/4
Range Breakout EA mql5 Programming | Part 4/4
  • 2022.10.14
  • www.youtube.com
I will show you how to code a Time Range Breakout EA for Metatrader 5. If you are new to mql5, just follow my steps and we will create a time range breakout...
 

布林线 EA MT5 编程



布林线 EA MT5 编程

在此视频中,Toby 介绍了为 Twitter 上的保龄球活动创建自定义专家顾问的分步过程。他首先解释了该策略:当蜡烛开盘高于布林带上轨时卖出,设置止损和止盈水平,如果布林带中线被交叉,则退出交易。同样的逻辑也适用于购买。

然后,Toby 切换到 MetaEditor,使用模板创建新的专家顾问。他清理了模板并添加了 EA 的输入参数,例如幻数、手数、周期、偏差、止损和止盈。他为这些参数设置默认值并编译代码。

接下来,Toby 定义 EA 的全局变量,包括布林带指标的句柄以及上限、均值和下限的缓冲区。他还为当前报价和交易创建变量。

继续到 OnInit 函数,Toby 检查用户输入是否有效。如果任何输入无效,他会显示一条错误消息并返回。他为交易对象设置幻数并为布林线指标创建指标句柄。如果句柄创建失败,他会显示一条错误消息并返回。然后,他将缓冲区设置为系列并编译代码。

在 OnTick 函数中,Toby 使用自定义函数检查当前价格变动是否为柱形开盘价格变动。如果不是开盘价,他就会返回。如果是柱开盘价格变动,他会使用 SymbolInfoTick 函数检索当前价格变动并将其存储在 currentTick 变量中。然后,他使用 CopyBuffer 函数检索最新的指标值并将它们存储在各自的缓冲区中。如果复制的值的数量不等于3,则表明有错误,则显示错误消息并返回。

此时,Toby 已完成编写 EA 交易程序的初始步骤。他编译代码并在 MetaTrader 中使用可视回测来验证指标值并确保代码正常运行。

接下来,我们需要实现基于布林带策略生成交易信号的逻辑。我们首先检查蜡烛开盘价是否高于上轨线,表明卖出信号。如果满足此条件,我们将执行带有止损和止盈水平的卖出交易。同样,我们将检查蜡烛开盘价是否低于买入信号的下限,并以相同的退出条件执行买入交易。

下面是代码的解释:

  • 我们首先使用 isNewBar() 函数检查当前价格变动是否为开盘价格变动。如果返回 false,我们将跳过当前报价的交易信号生成。

  • 然后,我们从各自的缓冲区中检索最新的指标值:upperBand、baseLine 和 lowerBand。

  • 接下来,我们检查前一根蜡烛的开盘价是否高于上限 (open[1] > upperBand)。如果此条件成立,我们将通过使用交易对象的 Sell() 方法打开卖出交易来生成卖出信号。我们使用相应的方法设置手数、止损和止盈水平。

  • 同样,我们检查前一根蜡烛的开盘价是否低于下轨线 (open[1] < lowerBand)。如果为 true,我们将通过使用交易对象的 Buy() 方法打开买入交易来生成买入信号。我们再次设置手数、止损和止盈水平。

  • 最后,如果有未平仓交易,我们检查当前蜡烛的收盘价是否穿过中线(基线)。如果此条件成立,我们将使用交易对象的 Close() 方法关闭交易。

请记住编译代码并在 MetaTrader 中对其进行测试,以确保其按预期工作。

在给定的代码中,正在执行多项任务。下面是每个步骤的详细解释:

  1. 初始化变量:

    • 将买入头寸和卖出头寸的数量设置为零。
    • 将当前单元格设置为零。
  2. 计算未平仓头寸:

    • 循环遍历所有当前未平仓头寸。
    • 获取各个位置的工单,检查操作是否成功。
    • 如果成功,获得该位置的幻数。
    • 如果幻数与输入幻数匹配,则增加买入或卖出头寸的相应计数器。
  3. 检查是否可以开新仓:

    • 检查是否没有未平仓的买入仓位。
    • 检查当前价格是否低于或等于布林带下限。
    • 检查买入仓位的开仓时间是否与当前柱的开仓时间不同。
  4. 计算止损和止盈:

    • 通过从当前价格减去输入止损(以点为单位)来计算止损。
    • 通过将输入止盈(以点为单位)添加到当前价格来计算止盈。
    • 如果输入止盈为零,则将止盈变量设置为零。
  5. 标准化止损和止盈:

    • 定义一个函数,根据价格变动大小标准化止损和获利。
    • 获取当前交易品种的刻度大小。
    • 通过将止损和止盈值除以价格变动大小来标准化它们。
  6. 开设新的买入头寸:

    • 使用 Trade 对象以指定参数(包括标准化止损和止盈)建立买入头寸。
  7. 检查上限交叉以开立卖出头寸:

    • 检查是否没有未平仓的卖出头寸。
    • 检查当前价格是否高于或等于布林带上限。
    • 检查卖出仓位的开仓时间是否与当前柱的开仓时间不同。
    • 使用当前买入价计算卖出头寸的止损和止盈。
    • 标准化止损和止盈值。
    • 使用指定参数(包括标准化止损和止盈)建立卖出头寸。
  8. 如果布林带中线被交叉,则平仓:

    • 计算未平仓的买入和卖出头寸。
    • 如果买入仓位数量大于零且当前买入价高于缓冲区上限,则平仓所有买入仓位。
    • 如果卖出头寸数量大于零并且当前卖价低于或等于下缓冲,则平掉所有卖出头寸。
  9. 定义平仓函数:

    • 复制已有的统计持仓量的代码,修改为根据输入参数平仓(0为所有持仓,1为买入持仓,2为卖出持仓)。

该代码执行各种检查和计算,以根据特定条件计算和管理未平仓头寸、开立新头寸和平仓。

Bollinger bands EA MT5 Programming
Bollinger bands EA MT5 Programming
  • 2022.11.28
  • www.youtube.com
Today I will show you how to code a simple Bollinger bands EA for Metatrader 5. If you are new to mql5, just follow my steps and we will create a fully work...
 

如何在 mql5 中创建图形面板 |第 1/2 部分


如何在 mql5 中创建图形面板 |第 1/2 部分

Toby 将演示如何在 MQL5 中创建一个简单的图形面板来显示信息并添加一个按钮来更改图表的背景颜色。他提到可以为任何 EA 交易创建该面板,但他将使用时间范围突破 EA 为例。托比表示,该视频主题是用户在评论中请求的,并鼓励观看者为未来的视频建议主题。

Toby 打开元编辑器并加载时间范围突破 EA 的文件。他将其保存为名为“时间范围 EA 面板”的新专家顾问并进行编译。他解释说,他将把面板作为一个单独的类写入包含文件中,使其易于在任何专家顾问中使用。 Toby 创建一个名为“图形面板”的新包含文件,并定义面板大小、字体大小和字体颜色的输入。

他包含了控件文件夹中的“dialog.mqh”文件,这将允许他使用该类中的函数。 Toby 定义了一个名为“CGraphicalPanel”的类,该类继承自“CAppDialog”类。他为类的方法添加了一个私有部分,为构造函数、析构函数、初始化函数和图表事件处理程序添加了一个公共部分。他还包括类方法的注释部分。

接下来,托比在类定义之后编写类方法的主体。他指定属于该类的方法,并编写构造函数、析构函数、初始化函数和图表事件处理程序。他添加了注释来描述每种方法的目的。 Toby 编译代码以检查错误或警告。

Toby 实现了创建面板函数,该函数使用 CFDialog 类创建对话框面板。他根据输入的参数设置面板的名称、子窗口、位置和大小。如果面板创建失败,他会打印一条消息并返回 false。他还添加了图表刷新功能来更新图表。 Toby 再次编译代码以确保其没有错误。

在 EA 文件中,Toby 包含了图形面板包含文件,并在全局变量部分中创建了一个名为“panel”的面板类对象。他在 onInit 函数中初始化面板,并添加图表事件处理程序以将图表事件传递到面板。 Toby 编写图表事件处理程序的主体,使用适当的参数调用面板的图表事件函数。

最后,Toby 在 onDeinit 函数中添加了一个销毁面板函数,该函数销毁面板并指定原因。他再次编译代码并在 MetaTrader 中进行测试。 Toby 演示了将 EA 交易拖放到图表上,显示面板的功能。他还使用面板的按钮关闭专家顾问。

嘿,我是 Toby,今天我将向您展示如何在 MQL5 中创建图形面板。这实际上是本教程的第二部分。在第一部分中,我们在左侧创建了一个简单的面板,如果您错过了它,可以在说明中找到链接。在今天的视频中,我们将向面板添加一些标签和按钮。在此示例中,我们将使用时间范围突破 EA。如果您有兴趣学习如何编写此智能交易系统的代码,我的频道上有一个编码系列。您还可以在说明中找到第一部分的链接。

首先,我们切换到 MQL5 编辑器并开始编码。我们在这里有图形面板包含文件,还有时间范围突破 EA,我们对其进行了修改以显示面板。让我们转到包含文件并检查用户的输入值。我们将在类的私有方法部分下创建一个名为“检查输入”的方法。在 OnInit 函数之后,我们将调用此方法。如果该方法返回 false,我们也会从 OnInit 函数返回 false。这样,如果输入无效,我们将不会继续进行。让我们编译并继续。

现在,让我们开始向面板添加标签。我们需要包含标签和按钮所需的类文件。我们将转到包含部分,并包含用于标签的“controls/label.mqh”和用于按钮的“controls/button.mqh”。之后,我们将定义标签变量。我们将为输入、幻数、批次、开始时间、持续时间和结束时间提供标签。让我们编译并继续。

在 createPanel 函数中,我们将向面板添加标签。我们将使用变量“M_L_Input”创建输入标签。我们将为标签设置文本、颜色和字体大小。然后,我们将标签贴到面板上。我们也会对其他标签重复此过程。添加完所有标签后,我们将编译并检查左侧的面板。我们可能需要调整标签的位置以更好地对齐。我们来编译并检查一下。

现在,让我们将按钮添加到面板中。我们将定义一个“CButton”类型的变量“M_B_ChangeColor”。我们将设置按钮的位置、文本、文本颜色、背景颜色和字体大小。最后,我们将按钮添加到面板中。编译完成后,我们会在面板上看到按钮。在此阶段,该按钮没有任何功能,但我们稍后会添加该功能。

接下来,让我们更改面板的背景颜色和字体名称。为此,我们将包含“Defiance.mqh”文件并为默认设置定义新值。我们将取消定义默认字体名称和背景颜色设置,然后为它们定义新值。我们将使用字体名称“Consolas”和深灰色背景颜色。编译后,我们将看到更新后的面板,具有新的背景颜色和字体。

最后,让我们在面板上显示来自 EA 交易的实际值。我们将在包含文件中包含 EA 文件并访问输入变量。我们将使用专家顾问提供的实际值更新标签。编译完成后,我们将看到面板上显示输入的值。

今天关于在 MQL5 中创建图形面板的教程就到此为止。在下一部分中,我们将为按钮添加功能并完成面板。请继续关注更多!

How to create a graphical panel in mql5 | Part 1/2
How to create a graphical panel in mql5 | Part 1/2
  • 2022.12.04
  • www.youtube.com
Today I will show you how to code a simple graphical panel for Metatrader 5. If you are new to mql5, just follow my steps and we will create a fully working...
 

如何在 mql5 中创建图形面板 |第 2/2 部分


如何在 mql5 中创建图形面板 |第 2/2 部分

嗨,这是托比。今天我将向您展示如何在 MQL5 中创建图形面板。这是本教程系列的第二部分。在第一部分中,我们在左侧创建了一个简单的面板。如果你错过了,我会在这里链接。在今天的视频中,我们将向面板添加标签和按钮。在此示例中,我们将使用时间范围突破 EA。如果您想学习如何编写此智能交易系统的代码,我的频道上有一个编码系列。我也会在这里链接第一部分。

让我们切换到媒体编辑器并开始编码。我们有图形面板包含文件和修改后的时间范围突破 EA 文件,该文件显示面板。在包含文件中,我们将创建一个名为“checkInputs”的方法来验证用户的输入值。我们将在 OnInit 函数中创建面板之前调用此方法。如果任何输入无效,我们将显示错误消息并返回 false。否则,我们将继续创建面板。

接下来,我们将向面板添加标签和按钮。要使用标签和按钮,我们需要包含它们的类文件。我们将为类中的标签和按钮添加必要的 include 语句。然后,我们将为标签和按钮定义私有变量。

在 CreatePanel 函数中,创建面板后,我们将向面板添加标签和按钮。我们将设置它们的位置、文本、颜色和字体大小。最后,我们将使用 Add 方法将它们添加到面板中。

我们将编译代码并检查面板。标签和按钮应显示在面板上。我们还将更改面板的背景颜色和字体名称以获得更好的外观。为了在面板上显示来自 EA 交易的实际值,我们将在包含部分中包含 EA 交易文件。然后,在 CreatePanel 函数中,我们将从 EA 交易中检索输入值并将其显示在标签上。我们将编译代码并再次检查面板。标签现在应该显示来自 EA 的实际输入值。我们将对所有输入值重复此过程。

完成这些步骤后,带有标签和按钮的图形面板就准备好了。现在我们可以继续添加面板上其余标签的值。我们将以与幻数标签相同的方式进行此操作。让我们回到包含文件并找到我们创建标签的部分。在这里,我们将添加代码来显示批次、开始时间、持续时间和结束时间的值。

对于批次标签,我们将文本“幻数”替换为“批次”,并将 y 坐标更新为 70。对于开始时间标签,我们将名称更改为“开始时间”并更新 y 坐标将坐标更改为 90。对于持续时间标签,我们将名称更改为“duration”并将 y 坐标更新为 110。最后,对于关闭时间标签,我们将名称更改为“close time”并更新y 坐标为 130。

进行这些更改后,我们可以编译代码。

现在,如果我们查看我们的智能交易系统并对其进行编译,我们应该能够在面板上看到手数、开始时间、持续时间和结束时间的实际值。接下来,让我们实现按钮的功能。目前,当我们单击该按钮时,它不会执行任何操作。让我们改变这一点。在我们的包含文件中,我们将找到创建按钮的部分。在这里,我们可以为按钮单击添加事件处理程序。为此,我们将使用 OnChartEvent 函数。在事件处理程序中,我们可以指定单击按钮时要执行的操作。

现在,让我们在单击按钮时显示一条消息。我们可以使用 Print 函数将消息输出到终端。添加事件处理程序后,我们可以编译代码。

现在,如果我们运行专家顾问并单击按钮,我们应该会看到终端中显示的消息。

就是这样!我们已经在 MQL5 中成功创建了一个带有标签和按钮的图形面板。标签显示来自 EA 交易的输入值,按钮有一个单击事件处理程序。

您可以根据您的要求随意向按钮添加更多功能或自定义面板。请记住编译包含文件和 Expert Advisor 文件以查看更改生效。

How to create a graphical panel in mql5 | Part 2/2
How to create a graphical panel in mql5 | Part 2/2
  • 2022.12.12
  • www.youtube.com
Today I will show you how to code a simple graphical panel for Metatrader 5. If you are new to mql5, just follow my steps and we will create a fully working...
 

MQL5 中的动态头寸规模 | MT5编程



MQL5 中的动态头寸规模 | MT5编程

你好,我是托比。今天,我将向您展示如何在 MQL5 中计算动态手数,以便您可以获得如此处所示的结果。你可以自己尝试一下。

好吧,让我们开始吧。在本视频中,我们将向当前使用固定手数的策略添加动态手数计算。这将使我们能够在每笔交易中承担特定金额的风险,例如 100 美元或账户余额的一定百分比。此外,我们将进行回测,以确定该策略是否可以通过动态手数计算进一步改进。我还将引导您了解该策略及其设置。

首先,我们切换到 MetaEditor 并开始编码。我们现在在 MetaEditor 中,在本次演示中,我将使用“时间范围 EA”来合并动态手数大小计算。但是,您可以使用您选择的任何其他专家顾问。我们之前已在我们的频道上以一系列形式编写了此 EA。如果您想使用相同的专家顾问,我将提供第一部分的链接。

首先,我们打开“Time Range EA”文件。现在,让我们用新名称保存它。单击“另存为”并将其命名为“时间范围 EA 动态手数”。太好了,文件已保存。

我们将在此智能交易系统中添加动态手数大小计算。让我们编译该文件并检查策略测试器中的输入。打开 MetaTrader 5 平台中的策略测试器,并根据需要刷新智能交易系统。现在,选择“时间范围 EA 动态手数”。在“输入”选项卡中,您会注意到“批量大小”输入,当前接受固定值。我们需要对此进行修改,以便我们可以输入每笔交易 100 美元的风险值或账户余额的百分比。

切换回 MetaEditor,我们将在“输入”部分下添加动态手数大小输入。在“Magic Number”后面创建一些空间,并定义一个名为“Lot Mode Enum”的枚举 (enum)。该枚举将具有三个选项:“固定”、“货币”和“帐户百分比”。这将使我们能够轻松选择所需的批次模式。为每个选项提供注释以提高可读性。

接下来,我们将使用这个枚举作为输入。例如,定义一个类型为“批次模式枚举”的“输入”,并将其命名为“输入批次模式”。将默认值设置为“固定批次模式”,并添加注释来描述此输入的用途。

编译代码并检查它在策略测试器中的显示方式。您会注意到“手数模式”下拉菜单,允许您在“固定”、“基于资金的手数”和“基于账户百分比的手数”之间进行选择。

现在,让我们修改“批量大小”输入,以根据所选批量模式适应不同的值。将输入类型更改为“double”,并修改注释以反映选项:“Lot/Money/Percent”。再次编译代码并检查策略测试器以确保更改得到反映。

为了验证用户的输入,我们将修改“CheckInput”函数。添加对每个批次模式选项的检查,以确保输入在可接受的范围内。对于“固定”手数模式,手数大小应大于零且不超过特定限制(例如,10 手)。如果不满足这些条件,则显示相应的错误消息。对“货币”和“账户百分比”手数模式重复此过程,并相应调整限额。此外,如果选择这两种手数模式中的任何一种,我们需要检查止损是否处于活动状态。

在 MQL5 中实现动态手数大小计算所涉及的步骤的简要总结:

  1. 确定您的交易策略允许的最小和最大手数。
  2. 定义所需的手数步长,它表示手数可以更改的增量。
  3. 计算交易的止损距离。
  4. 使用止损距离来计算初始手数。
  5. 检查计算的手数是否低于允许的最小值,并在必要时进行调整。
  6. 检查计算出的手数是否超过最大允许值,必要时进行调整。
  7. 检查计算的手数是否为有效步长,如有必要,请将其调整为最接近的有效步长。
  8. 返回最终计算的手数。
  9. 使用计算出的手数来开仓。

通过执行这些步骤,您可以确保根据您期望的每笔交易风险和交易策略的限制动态计算您的手数大小。

Dynamic position sizing in mql5 | MT5 programming
Dynamic position sizing in mql5 | MT5 programming
  • 2022.12.18
  • www.youtube.com
Today I will show you how to code dynamic position sizing for Metatrader 5 in mql5. We create two functions to calculate a dynamic position size for any Expe...
 

MQL5 中的追踪止损 | MT5编程



MQL5 中的追踪止损 | MT5编程

今天,我将逐步指导您如何在 MQL5 中向任何 EA 交易添加训练止损。在本视频结束时,我们还将进行回测,以评估我们的策略是否可以通过交易止损来增强。那么让我们开始吧。

在开始编码之前,让我们先了解交易止损的基本概念。想象一下我们以特定价格建仓。最初,我们的止损设置在一定水平。当价格朝着对我们有利的方向移动时,我们将止损追踪在价格后面,始终保持相同的距离。如果价格回撤,止损仍然有效。随着价格继续朝我们的方向移动,我们继续追踪止损。最终,价格可能会逆转,导致我们的头寸被强制平仓。主要思想是从重要的市场趋势中获利,并在趋势结束时平仓。

现在,让我们切换到 MetaEditor 开始编码。您可以使用任何智能交易系统来实现此目的,但对于本视频,我们将使用我们在上一个视频中编码的具有动态手数大小的“时间线 GA”。打开文件并将其另存为名为“止损”的新智能交易系统。编译代码以确保一切都没有错误。

要向我们的专家顾问添加交易止损,我们需要遵循几个步骤。首先,我们为追踪止损添加一个额外的输入。在输入部分中,添加一个名为“EnableTrailingStopLoss”的布尔输入变量,并将其默认值设置为“false”。此输入将允许我们激活或停用交易止损。编译代码以合并更改。

现在,切换回 MetaTrader 平台并打开策略测试器。选择我们的专家顾问“带有追踪止损的动态手数”。在输入选项卡中,您将找到新添加的输入“EnableTrailingStopLoss”。将其从“假”切换为“真”以激活交易止损。

接下来,让我们编写更新止损的函数。我们将此函数放在“ClosePosition”函数之前。在该函数中,首先检查我们是否启用了交易止损以及该仓位是否存在止损。如果不是,则无需继续,因此从函数返回。

现在,让我们遍历所有未平仓头寸。对于每个职位,我们都会检查它是否属于我们的专家顾问。检索仓位类型(买入或卖出)、当前止损和止盈值。根据当前价格和交易品种范围乘以用户定义的止损百分比来计算新的止损。根据仓位类型调整止损。

在使用新的止损修改仓位之前,我们需要执行一些检查。首先,确保新的止损与当前的止损不同,以避免出现错误。此外,一些经纪商还会设定止损水平,防止止损设置太接近当前价格。检查新的止损是否符合止损水平,如果没有,则继续下一个头寸。

最后,用新的止损和当前的止盈值修改仓位。如果修改失败,则打印一条错误消息,指示遇到的问题。从函数返回以避免处理任何进一步的位置。

编译代码以确保没有错误或警告。至此,更新止损功能完成。

为了将此函数集成到我们的智能交易系统中,我们需要在“OnTick”函数中调用它。检查突破后进行函数调用。这可确保针对收到的每个报价更新止损。

最后一次编译代码以确认更改。现在,我们的专家顾问能够根据用户定义的参数追踪止损。我们添加了输入变量来启用或禁用追踪止损功能,并且我们实现了更新未平仓头寸止损的功能。

现在,让我们继续回测我们的智能交易系统,以评估交易止损的有效性。在 MetaTrader 平台中,打开策略测试器并选择我们的专家顾问“止损”进行测试。选择测试所需的交易品种和时间范围。

在“输入”选项卡中,您将找到要配置的各种参数,包括追踪止损百分比和手数大小。根据您的喜好和交易策略调整这些参数。

单击“开始”按钮开始回测。专家顾问将根据指定的参数执行交易,并且止损将随着价格向有利于我们的方向变动而动态调整。

回测完成后,您可以在结果和图表选项卡中查看结果。关注盈亏、回撤和其他绩效指标,以评估追踪止损对策略的影响。

如果回测结果令人满意,您可以考虑在您的真实交易账户中使用带有交易止损的智能交易系统。然而,在做出任何交易决策之前,彻底评估策略的性能并进行进一步的测试或优化至关重要。

总之,我们已成功使用 MQL5 为我们的 EA 交易添加了交易止损。通过跟踪价格后面的止损,我们的目标是在有利的市场趋势期间实现利润最大化,并在趋势反转时将损失最小化。请记住,在将任何修改或策略应用于真实交易账户之前,请彻底测试它们。

请注意,这是一般指南,在实施此类更改之前,必须充分了解编程和交易原则。务必谨慎行事,并在需要时考虑咨询专业财务顾问。

Trailing stop loss in mql5 | MT5 programming
Trailing stop loss in mql5 | MT5 programming
  • 2022.12.31
  • www.youtube.com
Today I will show you how to code a trailing stop loss in mql5. You can use the same function to add a trailing stop loss to any other Expert Advisor for Met...
 

用 mql5 编写一个简单的 RSI EA | MT5编程



用 mql5 编写一个简单的 RSI EA | MT5编程

在本教程中,Toby 介绍了自己并解释了本教程的目标,即演示如何使用 MetaEditor 编写简单的 Expert Advisor (EA)。 EA 将使用 RSI 指标根据超卖和超买情况生成买入和卖出信号。 Toby 还提到 EA 中将包含止损、止盈以及根据反向信号退出交易的选项。

Toby 首先在 MetaEditor 中创建一个新的 EA 文件并清理现有代码。然后,他定义 EA 的输入参数,例如幻数、手数、RSI 周期、RSI 水平、止损、止盈以及根据反向信号关闭交易的选项。他为这些输入参数分配默认值,并添加注释来描述每个参数。

定义输入参数后,Toby 继续创建全局变量部分。他声明了 RSI 指标句柄的变量、用于存储 RSI 值的缓冲区、用于存储当前价格变动的价格变动类型变量、用于开仓和平仓的交易对象,以及两个日期时间变量以确保每根柱仅打开一笔交易。他还包含访问 CTrade 类所需的 #include 指令。

接下来,Toby 在 OnInit() 函数中实现输入参数验证。他检查每个输入参数是否满足指定的条件,如果任何输入无效,则显示错误消息。他使用 Alert() 函数打印错误消息,并在遇到错误时从 OnInit() 函数返回。

除了输入验证之外,Toby 还为交易对象设置幻数并创建 RSI 指标句柄。他检查句柄创建是否成功,如果失败则显示错误消息。他还设置了 RSI 缓冲区的系列,以简化对值的处理。

在 OnDeinit() 函数中,Toby 使用 IndicatorRelease() 函数释放 RSI 指标以释放资源。

继续讨论 OnTick() 函数,Toby 首先使用 SymbolInfoTick() 函数获取当前报价。他检查蜱虫检索是否成功,如果失败则显示错误消息。他将当前报价的卖价和买价分配给全局变量 currentTick 以供将来使用。

接下来,Toby 使用 CopyBuffer() 函数检索 RSI 指标值。他将这些值分配给名为 rsiValues 的变量,并检查检索是否成功。他将两个 RSI 值存储在缓冲区中以供进一步分析。

检索到必要的数据后,Toby 现在可以继续在 OnTick() 函数中实现交易逻辑。然而,文本中提供的代码被截断,并且缺少剩余的细节。

本教程涵盖 EA 的初始设置,包括输入参数定义、输入验证、全局变量声明、RSI 指标处理和当前报价检索。本教程为后续步骤中实现交易逻辑奠定了基础。

Code a simple RSI EA in mql5 | MT5 Programming
Code a simple RSI EA in mql5 | MT5 Programming
  • 2023.01.08
  • www.youtube.com
Today I will show you how to code a simple RSI EA for Metatrader 5. If you are new to mql5, just follow my steps and we will create a fully working RSI Expe...
 

mql5 中令人惊叹的 RSI 交易机器人! | MT5编程



mql5 中令人惊叹的 RSI 交易机器人! | MT5编程

嘿,我是 Toby,今天我将向您展示如何编写 100% 胜率的策略。在本教程中,我们将修改现有的 Expert Advisor (EA) 并向 RSI 指标添加过滤器。我将逐步指导您完成编码过程。让我们开始吧!

第 1 步:设置策略 我们将在 MetaEditor 中工作。打开我们在上一个视频中创建的 EA。如果您还没有看过,我将链接供您观看。使用新名称保存文件,例如“RSI_MA_Filter_EA”。

步骤 2:修改输入 为了实现过滤器,我们需要添加移动平均周期输入。我们还将包含移动平均线运行时间范围的输入。我们将保持止损、止盈和相反信号输入不变。

步骤 3:调整全局变量 在全局变量部分,我们需要重命名 RSI 指标的句柄和缓冲区,以将其与移动平均线区分开来。我们将为移动平均线添加句柄和缓冲区。此外,我们可以删除与开盘时间买入和开盘时间卖出相关的不必要的变量。

步骤 4:在 onInit 函数中进行更改 在 onInit 函数中,我们将添加对移动平均周期输入的检查。我们还将修改 RSI 句柄以使用开盘价而不是收盘价。然后,我们将为移动平均线指标创建句柄和缓冲区。

步骤 5:更新 Untick 函数 在 untick 函数中,我们首先检查当前报价是否是新的开盘报价。如果没有,我们将返回并等待下一个开盘价。我们将添加一个自定义函数来执行此检查。然后,我们将检索移动平均值的值并将它们存储在缓冲区中。我们还将调整建仓买入和卖出仓位的条件,以包含移动平均线过滤器。

步骤 6:编译和测试 进行所有必要的更改后,我们将编译代码以检查是否有任何错误。如果一切编译成功,我们就可以继续在策略测试器中测试 EA。我们将使用 2012 年至今的历史数据进行可视化测试,为 RSI 和移动平均周期、止损、止盈以及根据相反信号平仓的选项选择适当的输入。

通过学习本教程,您已经学会了如何编写具有 100% 胜率的策略。我们修改了现有 EA 并向 RSI 指标添加了移动平均过滤器。请记住保存您的文件并编译它,不要出现任何错误。您现在可以使用策略测试器在 MetaTrader 5 平台中测试该策略。祝您未来的编码工作一切顺利!

Amazing RSI trading bot in mql5! | MT5 programming
Amazing RSI trading bot in mql5! | MT5 programming
  • 2023.01.15
  • www.youtube.com
Today I will show you how to code a RSI trading bot for Metatrader 5. If you are new to mql5, just follow my steps and we will create a fully working RSI Ex...
 

Donchian 通道自定义指标 EA | MT5编程



Donchian 通道自定义指标 EA | MT5编程

嘿,这是托比。今天,我将向您展示如何使用 MQL5 编写自定义指标。我们将创建一个 Donchian 通道指标,然后用它来开发一个可盈利的 Expert Advisor (EA)。一旦 EA 准备就绪,我们将运行一些回测来评估其性能。从结果中可以看出,该策略的效果非常好。让我们开始吧!

现在,让我们分析策略测试器中的结果。 Donchian Channel Expert Advisor 显示了有希望的结果。因此,我们的第一步是定义策略。我们将编写一个自定义 Donchian 通道指标并使用它来创建 Expert Advisor。让我们在图表上概述一下基本策略思想。

蓝线代表我们将在本视频中编码的唐奇安通道指标。唐奇安通道显示之前 n 条柱的最高高点和最低低点。许多交易者使用唐奇安通道来制定突破策略,当价格突破上限时,他们会进入买入交易。然而,对于这个 EA,我们将探索相反的方法。每当价格突破唐奇安通道的上限时,我们就会进行卖出交易。同样,当价格低于唐奇安通道的下轨时,我们将采取买入仓位。我们还将根据点数或通道百分比设置止损。此外,我们可能会向 Donchian 通道 EA 添加一个过滤器来考虑通道的大小。

现在,让我们进入元编辑器,开始编写自定义唐奇安通道指标。

在元编辑器中,我们首先创建一个新的自定义指标文件。我们将通过删除不必要的注释并对齐括号来稍微清理一下代码。接下来,我们将定义指标的属性。我们将指定它应该显示在主图表窗口中而不是单独的窗口中。我们还将声明我们的指标将具有的缓冲区和绘图的数量,在本例中为两个。

接下来,我们将定义自定义指标的输入。这些输入允许用户在将指标应用于图表时对其进行自定义。我们将为唐奇安通道的周期、通道的偏移(以百分比形式)和通道的颜色创建输入。

编译代码后,我们将进入全局变量部分,在这里我们将定义指标所需的变量。我们将为唐奇安通道的上限值和下限值创建缓冲区,并创建其他变量来存储上限值和下限值以及第一个柱索引。

在 OnInit 函数中,我们将初始化缓冲区并设置指标短名称,该名称将用于识别图表上的指标。

最后,在 OnCalculate 函数中,我们将执行唐奇安通道指标的计算。我们将检查图表中是否有足够的柱形图来继续。如果没有,我们将返回零。否则,我们将使用开盘价计算每个柱的上限和下限值。我们将把这些值存储在相应的缓冲区中。

一旦代码编译后没有任何错误或警告,我们就可以测试我们的自定义指标。打开图表,导航到导航器,然后找到“我的唐奇安通道”指标。将其拖放到图表上。在指标的设置中,指定所需的周期、偏移量和颜色。

Donchian channel custom Indicator EA | MT5 programming
Donchian channel custom Indicator EA | MT5 programming
  • 2023.01.29
  • www.youtube.com
Today I will show you how to code a Donchian channel custom indicator EA for Metatrader 5. If you are new to mql5, just follow my steps and we will create a...
 

MQL5 中令人敬畏的 Donchian 通道交易机器人! | MT5编程



MQL5 中令人敬畏的 Donchian 通道交易机器人! | MT5编程

将自定义指标添加到图表后,您将看到唐奇安通道显示为蓝线。唐奇安通道指标显示前 'n' 个柱的最高高点和最低低点。它通常用于创建突破策略,其中交易者在价格穿越唐奇安通道的上限时进行买入交易,并在价格穿越下限时进行卖出交易。

然而,对于这个 EA(EA 交易),我们想要测试相反的方法。当价格突破上限时,我们不会买入,而是卖出,反之亦然。因此,每当价格突破唐奇安通道的上限时,我们将建立卖出头寸,而当价格突破唐奇安通道的下限时,我们将建立买入头寸。

此外,我们将为每笔交易设置止损,以点数或通道的百分比为单位。我们还可以考虑根据通道的大小向 Donchian 通道 EA 添加一个过滤器。现在,让我们进入 MetaEditor 开始编写自定义 Donchian 通道指标的代码。

在 MetaEditor 中,单击左上角的“新建”,选择“自定义指标”,然后单击“下一步”,创建一个新的自定义指标文件。将文件命名为“MyDonchianChannel”,然后单击“下一步”和“完成”以完成该过程。创建文件后,通过删除不必要的注释并对齐括号来清理代码。接下来,编译代码以检查是否有任何错误或警告。

现在,让我们定义自定义指标的属性。我们希望它显示在主图表窗口中,因此将属性“indicator_chart_window”设置为 true。我们还需要为指标定义缓冲区和绘图的数量。由于我们有两条线(上线和下线),因此将“indicator_buffers”设置为 2,将“indicator_plots”设置为 2。

接下来,我们将为自定义指标定义输入参数。我们需要输入唐奇安通道的周期、偏移百分比和指标线的颜色。使用适当的类型(周期和偏移量为整数,颜色为颜色)定义这些输入,并为每个输入设置默认值和注释。

再次编译代码以确保没有错误或警告。

现在,让我们继续编写自定义指标的“onCalculate”函数。首先,检查图表中的柱数是否小于输入周期加一。如果是这样,则没有足够的柱来计算指标,因此返回零。接下来,设置“第一个”变量,它代表我们要开始计算唐奇安通道的第一个柱。如果之前的计算尚未完成(previous_calculated 为零),则将“first”设置为输入周期。否则,将其设置为 previous_calculated 减一。现在,我们需要使用 for 循环遍历这些条。从“第一个”柱开始循环,直到当前柱小于图表中的柱总数。在每次循环迭代结束时增加条形计数器。

在循环内,使用每个柱的开盘价计算唐奇安通道的上限值和下限值。将这些值分别存储在“upper”和“lower”变量中。

要计算偏移量,请从上限值中减去下限值,然后乘以输入偏移量除以 100。这将为我们提供以点为单位或以通道百分比表示的偏移值。最后,使用缓冲区索引和条形计数器将计算值存储在相应的缓冲区中。计算并将值存储在缓冲区中后,我们需要为每个图设置指标标签。这些标签将显示在指标的属性窗口中。

使用 SetIndexLabel() 函数为上图和下图分配标签,并将缓冲区索引和标签作为参数传递。接下来,我们将使用 SetIndexStyle() 和 SetIndexColor() 函数设置指标线的颜色。指定缓冲区索引、线条样式(例如,STYLE_SOLID)以及每条线条所需的颜色。

最后,我们将添加一些额外的代码以使指标在视觉上更具吸引力。我们可以通过将 Indicator_shortname 属性设置为空字符串来隐藏指标的名称。此外,我们可以使用 ObjectCreate() 和 ObjectSetText() 函数添加带有上带当前值的图表标签。

再次编译代码以确保没有错误或警告。

恭喜!您已成功编写自定义唐奇安通道指标。现在,您可以在 EA 交易中使用该指标来实施您的交易策略。

在下一步中,我们将继续编写 EA 交易程序 (EA) 的代码,该程序将利用唐奇安通道指标根据突破策略执行交易。在 MetaEditor 中打开一个新文件,将其命名为“DonchianChannelEA”,然后选择“Expert Advisor”选项。单击“下一步”和“完成”以创建文件。通过删除不必要的注释并对齐括号来清理初始代码。

首先,我们将为 EA 定义输入参数。这些将包括手数大小、止损、止盈以及唐奇安通道的周期和抵消。使用适当的类型定义这些输入,并为每个输入设置默认值和注释。接下来,我们将编写 OnInit() 函数的代码。在此函数内,我们将通过使用必要的参数调用 iCustom() 函数来初始化 Donchian 通道指标。

创建变量来存储指标句柄、上限带值和下限带值。使用 ArraySetAsSeries() 函数将数组设置为系列以确保正确的索引。现在,让我们继续编写主要的 OnTick() 函数,该函数将处理交易逻辑。

首先检查是否有足够的柱来计算唐奇安通道。如果不是,则返回零。使用 CopyBuffer() 函数从指标获取当前上限和下限值。现在,我们将检查买入信号。如果价格超过上限,则使用 OrderSend() 函数建立卖出头寸。设置适当的订单类型 (OP_SELL)、手数、止损和止盈水平。请记住处理 OrderSend() 函数返回的潜在错误。

同样,检查卖出信号。如果价格低于下限,请使用 OrderSend() 函数建立买入头寸。设置适当的订单类型 (OP_BUY)、手数、止损和止盈水平。

编译代码以确保没有错误或警告。

就是这样!您已完成 Donchian 通道 Expert Advisor 的编码。您现在可以在模拟账户上测试 EA 或使用历史数据进行回溯测试以评估其性能。请记住,在真实交易账户上使用 EA 之前,请彻底测试您的 EA 并考虑实施风险管理技术。请注意,提供的代码是基本实现,可能需要进一步修改或增强才能满足您的特定交易要求。

Awesome Donchian Channel trading bot in mql5! | MT5 programming
Awesome Donchian Channel trading bot in mql5! | MT5 programming
  • 2023.02.02
  • www.youtube.com
Today I will show you how to code a Donchian channel trading bot for Metatrader 5. If you are new to mql5, just follow my steps and we will create a fully w...
原因: