指标转EA智能交易的关键步骤

2026-05-22

第一部分:指标

为了能够盈利而不是亏损,无论是专业交易商还是个人投资者,都在不断研究和总结各种市场规律,并将其制作成指标。我们常常会发现一些指标图线看起来非常完美,于是自然会想到根据这些指标的变化来进行交易。

但这样做真的能赚钱吗?

能否盈利,关键在于这些指标是否经过了“作弊”。也就是说,需要确认指标中是否包含未来函数。所谓未来函数,是指指标是否会根据当前的K线数据,在计算后修改历史K线上的标示。例如,原本是卖出提示,后来却变成了买入提示。(这听起来有些不可思议,但确实存在。)当然,还有一些与EA相关的特定环节也会影响盈利问题,这里暂不讨论。

判断指标是否含有未来函数,主要有两种方法:

1. 白盒校验(即查看源码)

直接查看源码中的循环部分,如果存在修改历史曲线数组的行为,就可以立刻断定含有未来函数。

2. 黑盒观察

在没有源码的情况下,可以将指标加载到1分钟图线上,持续观察其标示的变化。尤其要留意与当前K线状态最接近的历史K线标示是否发生改变。如果随着当前K线的变化,历史K线的标示出现过更改,那么也可以确定该指标含有未来函数。

在将指标转化为EA之前,必须确认一项重要事项:

如果一个指标包含未来函数,那么这个指标的实际意义并不大。也就是说,在将指标转换为EA之前,必须确保该指标不含未来函数,这样的转化才有价值。

第二部分:指标EA化

接下来,我们将介绍指标EA化的大致方法:

在EA中,通过函数iCustom读取该指标在当前K线上的输出值,从而判断当前状态,决定是否入场、平仓或反向入场。这一过程在如澳汇等交易平台中同样适用,但核心在于指标本身是否可靠。

iCustom函数的具体用法:

指标通常以曲线或箭头两种形式呈现。为了方便理解,我们可以将曲线和箭头都视为数组。对于指标而言,每一条曲线或箭头都对应着每个K线数组中的元素。也就是说,一条曲线对应一个数组,一个方向的箭头也对应一个数组(有箭头的数组值等于当时的价格,没有箭头的地方数组值为空)。

iCustom函数在MT4的帮助文档中是这样解释的:“计算指定的客户指标并返回它的值”。也就是说,通过这个函数,你可以获取指定指标中第几个数组对应第几根K线上的计算数值。

具体用法如下:

double iCustom(string symbol, int timeframe, string name, ..., int mode, int shift)

该函数用于计算指定的客户指标并返回其值。客户指标文件(*.EX4文件)必须存放在terminal_directoryexpertsindicators目录中。

参数说明:

symbol —— 计算指标数据时使用的货币对名称。若设置为NULL,则表示当前货币对。

timeframe —— 时间周期。可以设置为任意时间周期值,0表示当前图表的时间周期。

name —— 客户指标的完整程序名称。

... —— 参数设置(如有需要)。传递的参数及其顺序必须与客户指标中的声明命令和外部变量类型相对应。

mode —— 索引行。取值范围为0到7,并且必须与SetIndexBuffer函数中使用的某个索引相对应。

shift —— 从显示缓冲区中取值的索引(相对于当前柱的偏移量,即向前倒数若干周期)。

示例:

double val = iCustom(NULL, 0, "示例Ind", 13, 1, 0);

double va2 = iCustom(NULL, 0, "示例Ind", 13, 0, 1);

例如,对于一个绘制了两条曲线的指标,我们可以通过iCustom函数获取该指标在第4根K线上对应的第一条曲线的数值。

现在,我们可以根据自己的需求,获取指定指标在任何K线上的状态数值。接下来,我们需要引入EA的概念。

因为EA仅针对当前价格状态下的动作进行控制,所以一般来说,我们只需获取指定指标在当前K线下的计算数值,用于EA的条件判断。

如果你认为当前K线尚未结束,其数值可能会持续变化,导致信号时有时无,那么可以选择采用前一K线的指标数值作为判断基础。需要注意的是,使用当前K线指标数值作为条件可能会带来不确定性,而使用前一K线数值则可能面临“错过最佳入场点”的问题。这需要程序设计者根据实际情况进行权衡。

另一个需要解决的问题是,如何确保指标输出的数值与我们肉眼看到的信号保持一致。

如果参考的指标是一种变色线,那么通常是通过多个数组叠加不同颜色来显示的。在获取其数值时,只需要比较不同颜色数组的数值,即可判断出当前显示的是哪种颜色,并将其作为EA的入场或出场条件。

如果是箭头形式的指标,方法也类似,直接获取其数值即可。没有箭头的K线上,指标对应的数值为空;有箭头的地方,数值则不为空。通过这个差异,就可以判断信号是否出现。

例如,双色线指标会使用两个数组分别显示不同颜色。当指标认为应该显示某种颜色时,就将该颜色对应的数组在当前K线上的数值设置为当前价格,反之则设置为空。这样循环处理后,肉眼看到的便是变色线的效果。

现在,我们已经能够轻松获取指标的当前信号状态了!

下一步,就是将指标整合到EA中,即把指标中的数组值提取出来供EA使用。

第三部分:EA编程逻辑

EA本质上是一个循环往复的过程。每当有新的价格数据到来时,EA就会运行一次。

EA本身并不了解当前的仓位情况或指标状态,除了计算功能外,它一无所知。所有的逻辑都需要由编程者赋予。因此,编程者必须在脑海中建立一个综合状态的概念。

EA启动后,首先要进行仓位检查。大致的逻辑如下:

1. 先查询当前的持仓情况以及持仓单的方向。

2. 然后获取指标的数值。

3. 进行判断并执行操作。

在持仓状态下:根据持仓单的方向,判断反向信号是否出现。如果出现,则平仓并反向入场;如果没有出现,则直接返回,等待下一次价格数据的到来。

在空仓状态下:对两个方向的信号都进行判断,哪个方向先出现,就按哪个方向入场。

4. 其他细节

无论是入场还是出场,在发出指令后都必须立即验证是否执行成功。如果没有成功执行,则应立即放弃后续操作并直接返回,等待下一个价格数据到来时再次发送相同的指令。

另外需要说明的是,数据是自动更新的。

保证金可使外汇交易实现巨大收益,但是同时也伴随着巨大风险而不适于所有的投资者。在决定交易外汇之前,您应该仔细考虑您的投资目标,经验水平和风险偏好。过去表现不代表未来结果,因其将随着市场波动而有所变化。可能情况是您将承受损失掉部分或者全部您的初始投资,因此您不应将您不可损失的资金进行投资。您应知晓与外汇交易相关的全部风险,如果您有任何疑问,请寻求独立金融顾问的建议。

本网站或者任何本网站之链接上的观点、新闻、研究、分析、价格或其他信息仅作为一般性的市场评论,不表示任何投资建议。AUSFOREX 不承担任何损失或者赔偿之责任,包括可能直接或者间接地由于使用或者依赖上述信息来源而发生的获利或者任何损失。