MQL4 iCustom Indicator EA

使用 MT4 的一个令人难以置信的优势是使用和集成了数百个在线可用的自定义指标。 许多人可以通过将自定义指标从自定义指标窗口拖放到图表中来轻松使用自定义指标。 在此 MQL4 iCustom Indicator EA 文章中了解如何对 Expert Advisor 进行编程以使用自定义指标或振荡器进行交易。


为了使用专家顾问的自定义指标,您需要了解一些事项。

您要用于 EA 的自定义指标必须位于指标目录中(对于 MT4 的标准安装,C:\Program Files\MetaTrader 4\experts\indicators)。 执行 EA 时,它会在指标目录中查找已编译的指标(.ex4 文件)。


有一个用于处理自定义指标的内置函数,称为 iCustom()。 iCustom() 是一个 MQL4 函数,使您能够在您的智能交易系统或自定义指标代码中使用外部指标,而无需从头开始重写代码。


该函数的语法如下:


double iCustom(string Symbol, int Timeframe, string IndicatorName, int Indicator Parameters, int Mode, int Shift);


参数说明

符号 用于计算指标的数据符号。 NULL 表示当前交易品种。

时限 时限。 可以是任何时间范围枚举值。

选择 (0) 显示当前时间范围或选择以下之一:(1, 5, 15, 30, 60, 240, 1440, 10080, 43200) {全部在分钟内}

IndicatorName 这是指标文件的名称,因为它出现在导航器窗口的自定义指标列表中。 例如,“NonLagMA_v7.1.1”。

指标

参数 自定义指标属性窗口中的输入选项卡将显示自定义指标的参数。 传递的参数及其顺序必须与自定义指标的声明顺序和外部变量的类型相对应。它们必须全部用逗号分隔。

模式行索引。 可以是 0 到 7,并且必须与 SetIndexBuffer 函数之一使用的索引相对应。

Shift Index 从指标缓冲区中获取的值的索引(相对于当前柱在给定的周期前移动)。

在上面的六个参数中,最容易弄清楚的是前三个和最后一个。 我们已经在之前的文章中讨论过品种和时间框架。 指标的名称也相当简单:它是出现在导航器窗口的自定义指标列表中的指标名称,被报价市场包围。 示例:如果您在窗口中看到指标名为 NonLagMA_v7.1,您将在指标名称参数中将其写为“NonLagMA_v7.1”。


我们在之前的文章中也已经讨论了最后一个参数 Shfit,但这里只是回顾一下。 Shift 指示正在计算指标的柱线。 条形编号为 0、1、2、3、4、5……当您在图表上及时返回时。 更改移动选项类似于将指示线移至未来或过去。 移位 1 获得前一个柱的值。 偏移 0 获得当前柱的值。


总共:


shift = 0 以获取当前柱的指标值(仍在形成)


shift = 1 前一根柱上的值


shift = 2 值在前一个柱之前的柱中


第三个参数指标参数和第四个参数模式可能很难在 EA 中发现和实现。


发现指标参数

首先,让我们检查如何发现自定义指标参数。 大多数情况下,自定义指标可能会使用 1 个或 2 个指标参数,但也有一些使用 3 个或更多指标参数,这使得发现过程更加困难。 自定义指标 NonLagMA_7.1 是使用 9 个指标参数的更复杂指标的示例。


注:参数均为改变指标值的输入; 它们是您用来为您的自定义指标设置最佳设置的变量。 您可以下载 NonLagMA_v7.1。


如果您转到自定义指标属性窗口中的输入选项卡,它将向您显示 NonLagMA_v7.1 自定义指标的参数:

虽然您可以在上图中看到 6 个输入,但实际上有 9 个输入或指标参数。 有 9 个具有不同输入的指标参数,您可以更改其值以获得最佳设置,其中之一对于指标的形成至关重要(长度)。


发现指标参数的更好方法是从源代码中复制和粘贴它们。 如果您右键单击自定义指标并单击修改,您可以在 MetaEditor 中看到该指标的源代码。 如果指示器是灰色的,说明你没有mq4代码,只有ex4,你必须想办法反编译,或者你可以使用上面的方法从属性窗口中推导出参数。


如果您有 mq4 代码并且可以打开它,那么您很幸运。 现在,检查指标源代码开头的外部变量。 指标参数、数据类型和默认值将在此处列出,您只需将外部代码复制并粘贴到智能交易系统的外部变量部分即可。


使用 NonLagMA 指标,您将看到以下外部变量:


//—— 输入参数

外部价格= 0;

外部长度 = 9; //NonLagMA 周期

外部 int 位移 = 0; //DispLace 或 Shift

外部双 PctFilter = 0; //十进制动态过滤器

外部颜色 = 1; //颜色模式的切换(1色)

外部 int ColorBarBack = 1; //返回颜色模式

外部双偏差= 0; //上/下偏差

外部警报模式 = 0; //声音警报开关(0-关,1-开)

外部 int WarningMode = 0; //声音警告开关(0-off,1-on)


请记住,尽管有 9 个参数,但只有一个参数 Length 会改变指标的本质。 其他的可以保留它们的默认值,在大多数情况下除了 Color 是 0。如果我们也将 0 作为最后两个参数 mode 和 shift 的默认值,我们可以用上面的构建我们的 iCustom NonLagMA 指标 身份标识:


iCustom(NULL, 0, “NonLagMA_v7.1”, Price,Length,Displace, PctFilter, Color, ColorBarBack, Deviation, AlertMode, WarningMode, 0,0)。


出于优化的目的,以上九个参数中只有一个,长度,是您要更改或优化的参数,以便为您的货币符号和时间范围找到最佳的 NonLagMA。 其他的将保持默认值。 通常情况下,如果您将长度视为自定义指标中的一个参数,它将成为您策略形成中最重要的参数,因此对于进一步操作也是最重要的。


上面的自定义指标应该可以有效编译,但为了将其放入策略中,您必须知道如何使用最后两个参数,mode 和 shift。


发现模式(线路/信号)

模式是一个线索引,范围从 0 到 7。MT4 允许每个自定义指标最多 8 个指标线(缓冲区)。 这些行(缓冲区)必须与指标代码中的 SetIndexBuffer 行之一使用的索引相对应。


可视化这一点很有帮助:您的指示器有多达 8 条不同颜色的线/信号(或箭头)。 每行给你一个输出,每行都有一个值。 使用模式,您可以选择 EA 所需的线(信号)(八分之一)。 大多数时候,指标只有一条线/信号,因此应该使用 mode=0。


关于模式的注意事项:因为 MT4 的索引从 0 到 7,模式取值从 0 到 7。所以第一个信号的模式 = 0(而不是 1)。 如果您的指标具有三个指标线/信号并且您想要获取第一条线的值,请使用模式=0,第二条线/信号的值使用模式=1 获取,模式=2 将获取值 对于第三个信号。


好的,那么,您如何确定用于您的 EA 的模式?


该模式的奥秘在于指标缓冲区。


基本上,您必须在代码中寻找缓冲区,这些缓冲区将成为您的模式行。 假设您有 3 个缓冲区:


iCustom(Symbol(),Timefram e,"CUSOMT INDI NAME",所有参数用逗号分隔,BUFFER,SHIFT);


如果您希望获得当前柱的 3 个缓冲区的值,您将编写:


iCustom(Symbol(),Timefram e,”CUSOMT INDI NAME”,所有参数用逗号分隔, 0, 0);


iCustom(Symbol(),Timefram e,”CUSOMT INDI NAME”,所有参数用逗号分隔, 1, 0);


iCustom(Symbol(),Timefram e,"CUSOMT INDI NAME",所有参数用逗号分隔, 2, 0);


好吧,好吧,让我们看看这个缓冲区语法的例子,以及它在代码中的位置。


在 NonLagMA 指标的初始化函数下,您将看到许多如下所示的指标缓冲区:


指标缓冲区(6);


SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,MABuffer);

SetIndexStyle(1,DRAW_LINE);

SetIndexBuffer(1,UpBuffer);

SetIndexStyle(2,DRAW_LINE);

SetIndexBuffer(2,DnBuffer);

SetIndexBuffer(3,趋势);

SetIndexBuffer(4,Del);

SetIndexBuffer(5,AvgDel);

字符串简称;


SetIndexStyle 告诉我们有三行 (DRAW_LINE)。 在下面,SetIn

 

我用红色突出显示的数据表提供了推导模式(线路/信号)功能的线索。 NonLagMA 是第一个模式(模式 = 0),我们可以推断它就是线本身。 如果您将鼠标悬停在任何柱上,它会为您提供该柱的 NonLagMA 行的数据读数。 向上是第二个模式(mode =1),我们可以推断它是蓝线。


如果您将鼠标悬停在下方有蓝线的任何栏上,您会看到它为您提供向上行的数据读数,而没有为下行行提供数据读数。 Dn是第三种模式(mode = 2),我们可以推导出它就是红线。 如果将鼠标悬停在上面有红线的任何条上,您会看到它为您提供了 Dn 行的数据读数,而没有 Up 行的数据读数。


趋势的第四种模式(模式 = 3)没有出现在数据窗口中,虽然我从代码中知道是这样写的:如果当前趋势信号 == 1,则趋势是多头,如果当前趋势信号 = = -1,趋势是空头。


现在您大致了解了 NonLagMA 自定义指标的四种模式,您可以创建至少三种类型的 EA 条件:


与 MA 线本身一起工作的 EA,如交叉 (Mode=0);


使用 Up(蓝色)和 Dn(红色)信号的 EA,在 NonLagMA 变为蓝色时买入,在变为红色时卖出(模式 = 1 和模式 = 2)。


使用趋势信号的 EA,在趋势上升时买入,在趋势下降时卖出(模式 = 3)。


我们将在下一篇文章中检查这些 EA 组合中的每一个:使用自定义指标构建策略