指标转EA智能交易系统实战指南
第一部分:指标
为了提升交易盈利概率,无论是专业机构还是个人投资者,都在研究和总结各种市场规律,EBC外汇并将其转化为技术指标。我们经常发现一些指标图形看起来非常完美,因此自然会产生依据指标变化进行交易的想法。
然而,这样做是否真的能够稳定盈利呢?
能否盈利,关键在于这些指标是否存在“作弊”行为,即判断指标是否包含未来函数的计算。这意味着指标可能基于当前K线数据,在历史K线上动态修改信号标记。例如,原本显示卖出信号的位置,随着价格变动被改为买入信号,这种情形可能令人困扰。当然,EA中还有其他特有环节会影响盈利,这里暂不展开讨论。
判断指标是否含有未来函数有常用两种方法:
1. 白盒校验(即查看源码)
直接检查指标源码中的循环部分,若存在修改历史行情数组的行为,即可判定指标带有未来函数。
2. 黑盒观察
在缺乏源码的情况下,可将指标加载到1分钟图表,持续观察其信号标记的变化,尤其关注与当前K线最近的历史K线信号是否存在变动。如果历史信号随着当前K线变化而发生变更,则可认定该指标含有未来函数。
指标EA化之前需要确认的关键事项:
如果一个指标包含未来函数,那么其参考价值将大打折扣。因此,在将指标转化为EA前,务必确认该指标不含未来函数,这样EA化过程才更具实际意义。
第二部分 指标EA化的实现
接下来,我们探讨指标EA化的大致思路:
在EA中,可利用iCustom函数读取指定指标的当前K线输出值,从而判断当前市场状态,以决定是否入场、平仓或反向开仓。
iCustom函数的详细用法:
指标通常以曲线或箭头两种形式展示。我们可以将曲线和箭头都视为与K线对应的数组,这样更容易理解其数据结构。
对于指标而言,每条曲线或箭头都对应一个数组,即一条曲线对应一个数组,一个方向的箭头也对应一个数组(有箭头位置的数组值为当时价格,无箭头位置的数组值为空)。
在MT4中,iCustom函数的官方说明是:“计算指定的客户指标并返回其值”,也就是说,通过此函数可以获取指定指标中特定数组在特定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 - 从显示缓冲区中取值的索引,EBC外汇即相对于当前柱的偏移量。
示例:
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线的计算数值作为条件判断依据。
若认为当前K线尚未收盘,其数值可能不断变化,导致信号时有时无,那么可转而采用前一根K线的指标数值作为判断基准。不过,使用前一K线数值可能会错失最佳入场点,这是程序设计者需要权衡的问题。
另一个常见问题是如何将指标输出数值与肉眼看到的信号对应起来。
如果参考指标为变色线,通常以不同颜色叠加多个数组显示。我们在获取数值时,只需比较不同颜色数组的数值大小,即可判断当前显示为何种颜色,并据此作为EA执行动作的条件。
对于箭头类指标,同样需要获取其数值。无箭头K线对应的数组值为空,有箭头位置的数组值则非空,据此即可判断信号是否触发。
例如,双色线指标包含两个数组分别显示不同颜色。当指标认为应显示某一种颜色时,就将该颜色对应数组在当前K线中的数值设为当前价格,反之则设为空。如此循环后,肉眼看到的就是变色线效果。
至此,我们已经可以轻松获取指标的当前信号状态。
下一步,就是将这些信号数值整合进EA逻辑中。
第三部分 EA编程逻辑
EA本质上是一个循环往复的过程,每个价格变动都会触发一次执行。
EA本身并不了解当前仓位,也不清楚指标状态,除了计算,无法主动感知市场。一切行为都由编程者赋予逻辑。因此,编程者需要建立全局状态视图。
在EA启动时,首先应检查仓位情况。大致逻辑如下:
1. 先查询持仓信息及持仓单方向。
2. 获取指标数值。
3. 判断并执行相应操作。
持仓状态下:根据持仓单方向判断反向信号是否触发。若触发,则平仓并反向开仓;否则直接返回,等待下次价格更新。
空仓状态下:同时判断双向信号,哪一侧触发,就按该方向开仓。
4. 其他执行细节
无论入场或出场,在下达指令后,都应立即检查执行结果。若未能成功执行,则需放弃后续操作并返回,等待下一个价格到达时再次尝试。
此外,数据会自动更新,无需人工干预。
