MT4入门:有效指标如何融入EA策略
第一部分:指标
为了在交易中实现盈利而非亏损,无论是专业交易商还是个人投资者,都在不断研究和总结市场规律,并将其转化为指标。我们经常发现某些指标图线看起来十分完美,因此自然会产生基于这些指标变化进行交易的想法。
但这样做真的能盈利吗?
能否盈利,关键在于这些指标是否存在“作弊”行为。也就是说,我们需要确认指标是否包含未来函数。未来函数指的是,指标在计算时,会根据当前K线的数据,对历史K线上的信号进行修改。例如,原本显示“卖出”的信号,可能会被更改为“买入”(这听起来很不可思议吧)。当然,EA特有的其他因素也会影响盈利,但这里暂不讨论。
判断指标是否包含未来函数,通常有两种方法:
1. 白盒校验(即查看源码)
直接检查源码中的循环部分,若存在修改历史曲线数组的行为,则可立即断定该指标包含未来函数。
2. 黑盒观察
在没有源码的情况下,可将指标加载到1分钟图线上,持续观察其信号变化,尤其关注与当前K线状态最接近的历史K线信号是否随当前K线变化而发生更改。如果发现历史信号被更改,也可确定该指标包含未来函数。
指标EA化之前必须确认的事项:
若指标包含未来函数,则该指标的实际意义有限。因此,在将指标转化为EA之前,必须确认该指标不含未来函数,这样指标EA化才具有实际价值。
第二部分 指标EA化
将指标EA化的大致做法如下:
在EA中,通过函数iCustom读取指定指标在当前K线上的输出值,从而得出当前信号状态,以此决定是否入场或平仓并反向入场。
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就运行一次。
EA本身是电脑程序,它并不知道当前仓位情况,也不知道指标状况,除了计算之外一无所知,一切都由编程者赋予。因此,编程者必须在脑海中建立一种综合状态的概念。
EA启动时,首先要进行仓位情况检查。大致逻辑如下:
1. 首先检查当前持仓情况和持仓单的方向。
2. 然后获取指标的数值。
3. 判断并执行相应操作。
持仓状态下:根据持仓单的方向,判断是否出现反向信号。若出现,则平仓并反向入场;若不出现,则直接返回,等待下一次价格变动。
空仓状态下:对两个方向的信号都进行判断,哪个方向出现信号,就按该方向入场。
4. 其他细节
无论入场还是出场,在发出动作后,必须立即检查是否成功执行。若未成功,则应立即放弃后续操作并直接返回,等待下一个价格变动时再次发出相同指令。
另外说明,数据会自动更新。
