技术指标转化为智能交易系统EA的实用指南

第一部分:指标

为了在交易中实现盈利而非亏损,无论是专业交易商还是个人投资者,都在不断研究和总结各种规律,并将其转化为技术指标。我们常常会发现某些指标图线看起来十分完美,进而自然萌生依据指标变化进行交易的想法。

然而,这样的操作真的能带来盈利吗?

能否盈利,关键在于这些指标是否存在“作弊”行为。具体而言,我们需要判断指标是否含有未来函数,即指标是否会根据当前K线数据,在计算后对历史K线上的标示进行更改。例如,原本显示卖出的信号,被修改为买入信号(这确实令人担忧)。(当然,EA独有的其他环节也可能影响盈利问题,此处暂不讨论。)

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

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

直接检查源码中的循环部分,若发现修改历史曲线数组的行为,即可立即断定存在未来函数。

2.黑盒观察

在没有源码的情况下,可将指标加载至1分钟图线,持续观察其标示变化,尤其关注与当前K线状态最接近的历史K线标示的变动。若随着当前K线的变化,历史标示发生更改,也可确认存在未来函数。

指标EA化之前必须确认的事项:

若指标含有未来函数,则该指标的实际意义极为有限。换言之,在将指标转化为EA之前,必须确认其不含未来函数,这样EA化才具有实际价值。

第二部分 指标EA化

接下来,指标EA化的基本思路如下:

在EA中,通过iCustom函数读取指标的当前K线输出值,KCM外汇从而判断当前状态,决定是否入场或平仓并反向入场。

iCustom的具体用法:

指标通常表现为曲线或箭头两种形式。在此,我们可以将曲线和箭头视为数组,这样更易于理解。

对于指标而言,每条曲线或每个方向的箭头均对应一个数组,且与每根K线相对应。也就是说,一条曲线对应一个数组,一个方向的箭头也对应一个数组(有箭头的数组值为当时的价格,无箭头的数组值为“空”)。

iCustom在MT4帮助中的说明是:“计算指定的客户指标并返回其值”,即通过该函数,可以获取指定指标中特定数组在特定K线上的计算数值。

具体如下:

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

该函数用于计算指定客户指标并返回其值。客户指标必须位于terminal_directory/experts/indicators目录内(*.EX4文件)。

参数说明:

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启动后,首先应检查仓位情况。大致逻辑如下:

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

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

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

持仓状态下:根据持仓单方向,判断是否出现反向信号。若出现,则平仓并反向入场;若未出现,则直接返回,等待下一个价格数据。

空仓状态下:则需同时判断两个方向的信号,哪边出现信号,就按哪个方向入场。

4. 其他细节

无论是入场还是出场,在发出指令后,必须立即确认是否成功执行。若未成功执行,则应立即放弃后续操作并直接返回,待下一个价格数据到来时再次发出相同指令。

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